From 72f60b10375850fadb72a5bdcfafc38c85e371e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcelo=20Gon=C3=A7alves?= Date: Tue, 11 Aug 2026 09:40:33 +0100 Subject: [PATCH 1/9] Bump ESLint plugin ecosystem and Prettier to 3 Prepares the toolchain for flat config and ESLint 9. typescript-eslint 7 only accepts ESLint ^8.56, so it is the hard blocker for any upgrade past v8; everything else here is either required by v8 or needed because the plugin has no flat-config export. Dependency changes: - @typescript-eslint/* 7.18.0 -> 8.66.0 (accepts ESLint ^8/^9/^10) - prettier 2.8.8 -> 3.9.6 and eslint-plugin-prettier 4.2.5 -> 5.5.6, since v4 has no flat-config export - eslint-config-prettier 9.1.2 -> 10.1.8 (@nx/eslint-plugin peer wants ^10) - eslint-plugin-vitest 0.5.4 -> @vitest/eslint-plugin 1.6.27 (renamed); its configs register as `@vitest`, so the extends were renamed to match - eslint-plugin-testing-library 6.5.0 -> 7.16.2, eslint-plugin-jest-dom 5.5.0 -> 5.10.1, jsonc-eslint-parser 2.4.2 -> 3.3.0 - drop eslint-plugin-tailwindcss, which no config referenced Prettier 3 no longer auto-loads plugins, so prettier-plugin-organize-imports is now declared explicitly in .prettierrc. Without it the plugin silently stops organizing imports. Fixes for findings the upgrade surfaced: - worker-controller passed the void results of rejectedPromiseHandler to Promise.all, so the payload saves were never actually awaited. Caught by a stricter await-thenable. - server/api extended the TypeScript and import-x configs at top level, which applied TS rules to .json files. Scoped them to the ts/js override. - switch-exhaustiveness-check pins considerDefaultExhaustiveForUnions, which v8 flipped to false, to keep the previous behaviour - drop a stale ban-types disable comment for a rule v8 removed - replace three consts used only in `typeof` positions with plain types @vitest/no-conditional-expect is disabled with a TODO: it newly reports pre-existing conditional assertions in data-driven tests. Co-Authored-By: Claude Opus 5 (1M context) --- .prettierrc | 3 +- package-lock.json | 1103 +++++------------ package.json | 21 +- .../lib/core/code/v8-isolate-code-sandbox.ts | 1 + .../src/lib/variables/props-resolver.ts | 1 - packages/react-ui/.eslintrc.json | 5 +- .../hooks/flow-version-undo-redo.ts | 2 +- .../basic-secret-connection-settings.tsx | 9 +- .../secret-text-connection-settings.tsx | 10 +- packages/server/api/.eslintrc.json | 21 +- .../api/src/app/workers/worker-controller.ts | 14 +- packages/ui-components/.eslintrc.json | 5 +- packages/ui-components/src/ui/use-toast.tsx | 14 +- packages/ui-kit/.eslintrc.json | 5 +- 14 files changed, 373 insertions(+), 841 deletions(-) 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/package-lock.json b/package-lock.json index eac97a6e78..07bf6f71f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -336,10 +336,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", @@ -348,20 +349,18 @@ "concurrently": "8.2.2", "esbuild": "0.28.1", "eslint": "8.57.1", - "eslint-config-prettier": "9.1.2", + "eslint-config-prettier": "10.1.8", "eslint-import-resolver-alias": "1.1.2", "eslint-import-resolver-typescript": "3.10.1", "eslint-plugin-import": "2.32.0", "eslint-plugin-import-x": "0.5.3", - "eslint-plugin-jest-dom": "5.5.0", + "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", "husky": "9.1.7", "i18next-cli": "1.64.1", @@ -369,7 +368,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,7 +376,7 @@ "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", @@ -10316,132 +10315,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" + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" }, "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/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 +19619,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 +19694,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 +19713,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 +19730,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 +19754,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 +19768,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 +19796,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 +19820,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 +19838,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 +19851,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 +20429,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", @@ -28496,14 +28208,17 @@ } }, "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" } @@ -28689,6 +28404,108 @@ "eslint": "^8.56.0 || ^9.0.0-0" } }, + "node_modules/eslint-plugin-import-x/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-import-x/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/eslint-plugin-import-x/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/eslint-plugin-import-x/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/eslint-plugin-import-x/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/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", @@ -28729,6 +28546,19 @@ "dev": true, "license": "MIT" }, + "node_modules/eslint-plugin-import-x/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "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 +28660,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 +28675,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 +28755,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,322 +28923,21 @@ "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==", - "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" - }, - "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==", + "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": { - "@typescript-eslint/utils": "^7.7.1" + "@typescript-eslint/scope-manager": "^8.56.0", + "@typescript-eslint/utils": "^8.56.0" }, "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": { @@ -39644,24 +39181,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 +47315,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" @@ -52875,24 +52424,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", @@ -53701,16 +53232,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 +53440,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", @@ -55047,6 +54555,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..c93b75053e 100644 --- a/package.json +++ b/package.json @@ -360,10 +360,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", @@ -372,20 +373,18 @@ "concurrently": "8.2.2", "esbuild": "0.28.1", "eslint": "8.57.1", - "eslint-config-prettier": "9.1.2", + "eslint-config-prettier": "10.1.8", "eslint-import-resolver-alias": "1.1.2", "eslint-import-resolver-typescript": "3.10.1", "eslint-plugin-import": "2.32.0", "eslint-plugin-import-x": "0.5.3", - "eslint-plugin-jest-dom": "5.5.0", + "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", "husky": "9.1.7", "i18next-cli": "1.64.1", @@ -393,7 +392,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,7 +400,7 @@ "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", 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/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/react-ui/.eslintrc.json b/packages/react-ui/.eslintrc.json index e68a3727cf..d1e183feb0 100644 --- a/packages/react-ui/.eslintrc.json +++ b/packages/react-ui/.eslintrc.json @@ -44,7 +44,7 @@ //"plugin:jsx-a11y/recommended", "plugin:testing-library/react", "plugin:jest-dom/recommended", - "plugin:vitest/legacy-recommended" + "plugin:@vitest/legacy-recommended" ], "rules": { "no-console": [ @@ -94,6 +94,9 @@ } ], "import/no-cycle": "off", + // 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", "linebreak-style": ["error", "unix"], "react/prop-types": "error", "import/no-unresolved": "off", 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/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/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 ( { async (request) => { const { flowId, projectId, payloads } = request.body; const savePayloads = payloads.map((payload) => - rejectedPromiseHandler( - triggerEventService.saveEvent({ - flowId, - payload, - projectId, - input: {}, - }), - ), + triggerEventService.saveEvent({ + flowId, + payload, + projectId, + input: {}, + }), ); rejectedPromiseHandler(Promise.all(savePayloads)); return {}; diff --git a/packages/ui-components/.eslintrc.json b/packages/ui-components/.eslintrc.json index 5fd2386ac8..d261b0ece4 100644 --- a/packages/ui-components/.eslintrc.json +++ b/packages/ui-components/.eslintrc.json @@ -48,7 +48,7 @@ //"plugin:jsx-a11y/recommended", "plugin:testing-library/react", "plugin:jest-dom/recommended", - "plugin:vitest/legacy-recommended" + "plugin:@vitest/legacy-recommended" ], "rules": { "no-console": "error", @@ -66,6 +66,9 @@ } ], "import/no-cycle": "off", + // 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", "linebreak-style": ["error", "unix"], "react/prop-types": "off", "import/no-unresolved": "off", 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 index 8d4974339b..8e9457360f 100644 --- a/packages/ui-kit/.eslintrc.json +++ b/packages/ui-kit/.eslintrc.json @@ -44,7 +44,7 @@ //"plugin:jsx-a11y/recommended", "plugin:testing-library/react", "plugin:jest-dom/recommended", - "plugin:vitest/legacy-recommended" + "plugin:@vitest/legacy-recommended" ], "rules": { "no-console": "error", @@ -62,6 +62,9 @@ } ], "import/no-cycle": "off", + // 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", "linebreak-style": ["error", "unix"], "import/no-unresolved": "off", "import/default": "off", From 85c9505ea18a6affc2683fd3a5a6969764b94f40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcelo=20Gon=C3=A7alves?= Date: Tue, 11 Aug 2026 12:06:07 +0100 Subject: [PATCH 2/9] Reformat lint-enforced files with Prettier 3 Mechanical reformat only, no behaviour changes. Split from the dependency bump so the meaningful diff stays reviewable. Scoped to the file types ESLint actually enforces prettier/prettier on - ts, tsx, js and json. Prettier also covers md, yaml, css, html and mjs, but nothing checks those in CI, so reformatting them would have been churn unrelated to this upgrade. Note that lint-staged does run prettier on them, so they will be reformatted whenever they are next edited. The blast radius is small because .prettierrc already set trailingComma: "all", which was Prettier 3's most disruptive default change. Co-Authored-By: Claude Opus 5 (1M context) --- .vscode/launch.json | 56 ++-- .vscode/settings.json | 63 ++-- jest.config.ts | 2 +- nx.json | 52 +--- .../get-recommendations-action-predefined.ts | 3 +- .../blocks/aws-compute-optimizer/project.json | 20 +- .../actions/ebs-get-recommendations-action.ts | 3 +- .../actions/ec2-get-recommendations-action.ts | 3 +- .../get-recommendations-summary-action.ts | 3 +- .../lib/common/ebs-recommendations-builder.ts | 7 +- .../lib/common/ec2-recommendations-builder.ts | 7 +- .../src/lib/actions/get-account-id-action.ts | 3 +- .../blocks/azure/src/lib/common-properties.ts | 8 +- .../src/lib/common/recommendations-api.ts | 2 +- .../src/lib/actions/get-asset-perspectives.ts | 13 +- .../delegating-authentication-converter.ts | 12 +- .../blocks/framework/src/lib/action/action.ts | 3 +- packages/blocks/framework/src/lib/block.ts | 6 +- packages/blocks/framework/src/lib/context.ts | 12 +- .../framework/src/lib/property/index.ts | 4 +- .../src/lib/property/input/common.ts | 44 +-- .../framework/src/lib/trigger/trigger.ts | 3 +- packages/blocks/http/package.json | 1 - .../lib/actions/send-http-request-action.ts | 3 +- .../linear/src/lib/triggers/new-issue.ts | 5 +- .../blocks/list-operations/.eslintrc.json | 25 +- packages/blocks/list-operations/project.json | 24 +- .../src/lib/actions/group-by-action.ts | 19 +- .../src/lib/actions/forward-email.ts | 6 +- .../src/lib/actions/request-action-message.ts | 3 +- .../src/lib/common/on-action-received.ts | 3 +- packages/blocks/store/package.json | 1 - .../blocks/terraform/src/lib/tfvars-parser.ts | 6 +- .../src/lib/actions/get-anomalies-action.ts | 3 +- packages/cli/package.json | 18 +- .../cli/src/lib/utils/block-generators.ts | 3 +- packages/cli/src/lib/utils/files.ts | 3 +- packages/engine/src/get-feature-flag.ts | 5 +- .../src/lib/cancellation-request-validator.ts | 5 +- packages/engine/src/lib/engine-ipc.ts | 3 +- .../engine/src/lib/handler/branch-executor.ts | 4 +- packages/engine/src/lib/operations.ts | 3 +- .../lib/variables/processors/array-zipper.ts | 11 +- packages/openops/.eslintrc.json | 15 +- packages/openops/project.json | 24 +- packages/openops/src/lib/ai/ai-auth.ts | 3 +- packages/openops/src/lib/aws/arn-handler.ts | 19 +- .../src/lib/aws/azure-aws-federation.ts | 5 +- packages/openops/src/lib/aws/pricing.ts | 4 +- packages/openops/src/lib/promise-pool.ts | 3 +- .../src/lib/servicenow/get-state-fields.ts | 4 +- .../openops/src/lib/servicenow/get-tables.ts | 5 +- packages/openops/test/aws/auth.test.ts | 5 +- .../get-ssm-describe-document-info.test.ts | 11 +- .../aws/ssm/get-ssm-document-versions.test.ts | 11 +- .../test/aws/ssm/get-ssm-documents.test.ts | 11 +- packages/openops/test/azure/auth.test.ts | 5 +- packages/openops/tsconfig.lib.json | 16 +- packages/openops/tsconfig.spec.json | 7 +- .../app/common/components/multi-select.tsx | 7 +- .../benchmark/use-provider-connections.ts | 3 +- .../block-properties/dynamic-array/utils.ts | 11 +- .../builder/block-properties/form-utils.tsx | 6 +- .../builder-header/builder-publish-button.tsx | 6 +- .../features/builder/data-selector/index.tsx | 4 +- .../flow-version-undo-redo/hooks/utils.ts | 5 +- .../tests/should-resync-step-settings.test.ts | 2 +- .../components/oauth2-connection-settings.tsx | 2 +- .../connections/lib/connections-utils.ts | 17 +- .../flows/components/move-flow-dialog.tsx | 9 +- .../component/move-subfolder-dialog.tsx | 6 +- .../navigation/side-menu/left-sidebar.tsx | 5 +- .../connections-picker/connections-picker.tsx | 2 +- ...c-flow-template-filter-sidebar-wrapper.tsx | 31 +- .../src/app/routes/settings/ai/index.tsx | 6 +- packages/server/api/__mocks__/isolated-vm.js | 2 +- .../api/src/app/ai/mcp/openops-tools.ts | 5 +- .../attach-benchmark-flows.service.ts | 5 +- .../1740463047000-InitializePostgresSchema.ts | 4 +- ...1016911542-AddColumnForStartupTemplates.ts | 4 +- .../1741475952000-RenamePieceToBlock.ts | 4 +- ...618000-ReplaceSelectOptionsIdsWithNames.ts | 4 +- ...roviderSettingsAndConstraintForAiConfig.ts | 4 +- ...746454781866-AddFlowStepTestOutputTable.ts | 4 +- ...ersionsAndInsertOutputInTestOutputTable.ts | 4 +- ...6358053-AddProviderToAppConnectionTable.ts | 4 +- ...-AddAuthProviderKeyToAppConnectionTable.ts | 4 +- ...AuthProviderKeyToExistingAppConnections.ts | 4 +- ...4220381-AddStepIdToExistingFlowVersions.ts | 4 +- ...etBlockNameAsNullableInConnectionsTable.ts | 4 +- ...797-RemoveBlockNameFromConnectionsTable.ts | 4 +- ...1750933522145-AddInputToTestOutputTable.ts | 4 +- ...51282188913-AddInputToTriggerEventTable.ts | 4 +- ...303-AddSuccessToFlowStepTestOutputTable.ts | 4 +- ...laRecommendationTypesAcrossFlowVersions.ts | 4 +- ...1754489349007-AddTriggerSourceToFlowRun.ts | 4 +- ...StepTestOutputToNewCompressionAlgorithm.ts | 4 +- .../1756298583000-AddIsWorkflowToFlowTable.ts | 4 +- ...6377588949-RenameIsWorkflowToIsInternal.ts | 4 +- ...42268873-MigrateAiConfigToAppConnection.ts | 4 +- ...001-AddTestRunActionLimitsToFlowVersion.ts | 4 +- ...lesWorkspaceIdFromOrganizationToProject.ts | 4 +- .../1763131154284-AddTablesTokenToProject.ts | 4 +- .../1763394159990-AddTablesTokenToProject.ts | 4 +- ...1763755045436-MigrateTablesUserPassword.ts | 4 +- ...9194-AddBenchmarkAndBenchmarkFlowTables.ts | 4 +- ...772449919844-DropLastRunIdFromBenchmark.ts | 4 +- ...73046640936-AddIsCleanupToBenchmarkFlow.ts | 4 +- ...1776097737024-FixFolderUniqueConstraint.ts | 4 +- .../ensure-tables-mcp-endpoint-exists.ts | 5 +- .../api/src/app/database/seeds/seed-admin.ts | 3 +- .../app/flows/flow-run/flow-run-service.ts | 4 +- .../app/flows/flow/flow-version.controller.ts | 10 +- .../flows/flow/resolve-manual-run-payload.ts | 2 +- .../analytics-seeding-service.ts | 5 +- .../create-aws-benchmark-dashboard.ts | 5 +- .../create-azure-benchmark-dashboard.ts | 5 +- .../resolvers/aws/aws-option-resolver.ts | 3 +- .../src/app/workers/queue/queue-manager.ts | 12 +- .../src/app/workers/redis/flow-run-cleaner.ts | 5 +- .../src/app/workers/redis/redis-migration.ts | 5 +- .../test-run-action-limits-calculator.test.ts | 8 +- .../cloud/project/project.service.test.ts | 5 +- .../authentication.controller.test.ts | 5 +- .../benchmark/benchmark-feature-guard.test.ts | 2 +- .../flow-template.service.test.ts | 5 +- .../src/lib/blocks/file-blocks-utils.ts | 10 +- .../shared/test/cache/memory-wrapper.test.ts | 14 +- .../server/worker/src/lib/api/axios-client.ts | 5 +- .../worker/src/lib/engine/call-engine.ts | 5 +- .../worker/src/lib/engine/engine-runner.ts | 3 +- .../src/lib/engine/flow-enginer-util.ts | 3 +- .../src/lib/app-connection/app-connection.ts | 20 +- .../src/lib/common/application-error.ts | 5 +- .../shared/src/lib/engine/engine-operation.ts | 19 +- .../src/lib/flow-run/execution/step-output.ts | 4 +- .../tooltip-copy-button.tsx | 7 +- .../src/components/flow-canvas/edges/utils.ts | 3 +- packages/ui-components/src/lib/types.ts | 9 +- .../stories/select-all-checkbox.stories.tsx | 3 +- .../src/stories/sidebar/sidebar.stories.tsx | 4 +- packages/ui-components/src/ui/badge.tsx | 3 +- packages/ui-components/src/ui/button.tsx | 3 +- .../src/ui/data-table-column-header.tsx | 6 +- packages/ui-components/src/ui/data-table.tsx | 24 +- packages/ui-components/src/ui/dot.tsx | 3 +- .../src/ui/image-with-fallback.tsx | 3 +- .../multi-step-form-header.tsx | 3 +- .../ui-components/src/ui/numeric-input.tsx | 9 +- .../select-all-checkbox.tsx | 3 +- packages/ui-components/src/ui/sortable.tsx | 10 +- .../src/ui/status-icon-with-text.tsx | 5 +- packages/ui-components/src/ui/tree-view.tsx | 4 +- tools/licenses/.generatelicensefile.json | 10 +- tools/scripts/utils/block-script-utils.ts | 280 ++++++++++-------- tools/scripts/utils/exec.ts | 6 +- tools/scripts/utils/files.ts | 3 +- .../utils/package-pre-publish-checks.ts | 92 +++--- tools/scripts/utils/publish-nx-project.ts | 34 +-- .../scripts/validate-publishable-packages.ts | 8 +- 160 files changed, 724 insertions(+), 877 deletions(-) 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/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..c24ef6139a 100644 --- a/nx.json +++ b/nx.json @@ -2,37 +2,21 @@ "$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" - ], + "inputs": ["default", "{workspaceRoot}/.eslintrc.json"], "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 }, @@ -44,28 +28,17 @@ } }, "@nx/eslint:lint": { - "inputs": [ - "default", - "{workspaceRoot}/.eslintrc.json" - ], + "inputs": ["default", "{workspaceRoot}/.eslintrc.json"], "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", @@ -145,12 +118,7 @@ "default": { "runner": "nx/tasks-runners/default", "options": { - "cacheableOperations": [ - "build", - "lint", - "test", - "e2e" - ] + "cacheableOperations": ["build", "lint", "test", "e2e"] } } }, 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/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/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/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/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/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/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/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/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/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 index 19a99c9d96..3456be9b90 100644 --- a/packages/blocks/list-operations/.eslintrc.json +++ b/packages/blocks/list-operations/.eslintrc.json @@ -1,32 +1,17 @@ { - "extends": [ - "../../../.eslintrc.json" - ], - "ignorePatterns": [ - "!**/*" - ], + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], "overrides": [ { - "files": [ - "*.ts", - "*.tsx", - "*.js", - "*.jsx" - ], + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], "rules": {} }, { - "files": [ - "*.ts", - "*.tsx" - ], + "files": ["*.ts", "*.tsx"], "rules": {} }, { - "files": [ - "*.js", - "*.jsx" - ], + "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/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/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/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/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/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/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/utils/block-generators.ts b/packages/cli/src/lib/utils/block-generators.ts index aa3859da1c..86864b9c45 100644 --- a/packages/cli/src/lib/utils/block-generators.ts +++ b/packages/cli/src/lib/utils/block-generators.ts @@ -58,8 +58,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; diff --git a/packages/cli/src/lib/utils/files.ts b/packages/cli/src/lib/utils/files.ts index 58374820e9..eab1f705da 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; }; }; 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/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/openops/.eslintrc.json b/packages/openops/.eslintrc.json index d75c3a7a0d..c99be39afa 100644 --- a/packages/openops/.eslintrc.json +++ b/packages/openops/.eslintrc.json @@ -1,21 +1,12 @@ { "extends": "../../.eslintrc.json", - "ignorePatterns": [ - "!**/*" - ], + "ignorePatterns": ["!**/*"], "overrides": [ { - "files": [ - "*.ts", - "*.tsx", - "*.js", - "*.jsx" - ], + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], "rules": {}, "parserOptions": { - "project": [ - "packages/openops/tsconfig.*?.json" - ] + "project": ["packages/openops/tsconfig.*?.json"] } } ] 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/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/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/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/lib/connections-utils.ts b/packages/react-ui/src/app/features/connections/lib/connections-utils.ts index 597044f03c..ea374bcdb8 100644 --- a/packages/react-ui/src/app/features/connections/lib/connections-utils.ts +++ b/packages/react-ui/src/app/features/connections/lib/connections-utils.ts @@ -190,13 +190,16 @@ export const aggregateBlocksByProvider = ( blocks: BlockMetadataModelSummary[], ) => { 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/__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/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/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/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/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/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/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/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/tools/licenses/.generatelicensefile.json b/tools/licenses/.generatelicensefile.json index f5d1de051b..707774351b 100644 --- a/tools/licenses/.generatelicensefile.json +++ b/tools/licenses/.generatelicensefile.json @@ -1,13 +1,9 @@ { - "inputs": [ - "./package.json" - ], + "inputs": ["./package.json"], "output": "./THIRD_PARTY_LICENSES.txt", "lineEnding": "lf", "ci": true, - "append": [ - "./THIRD_PARTY_LICENSES_ADDITIONAL.txt" - ], + "append": ["./THIRD_PARTY_LICENSES_ADDITIONAL.txt"], "replace": { "sax": "./node_modules/sax/LICENSE", "mailsplit": "./node_modules/mailsplit/LICENSE.MIT", @@ -19,4 +15,4 @@ }, "exclude": [], "omitVersion": false -} \ No newline at end of file +} diff --git a/tools/scripts/utils/block-script-utils.ts b/tools/scripts/utils/block-script-utils.ts index 991ffd8a22..c54fac57ef 100644 --- a/tools/scripts/utils/block-script-utils.ts +++ b/tools/scripts/utils/block-script-utils.ts @@ -1,153 +1,185 @@ - -import { readdir, stat } from 'node:fs/promises' -import { resolve, join } from 'node:path' -import { cwd } from 'node:process' -import { BlockMetadata } from '../../../packages/blocks/framework/src' -import { BlockCategory, extractBlockFromModule } from '../../../packages/shared/src' -import * as semver from 'semver' -import { readPackageJson } from './files' +import { readdir, stat } from 'node:fs/promises'; +import { join, resolve } from 'node:path'; +import { cwd } from 'node:process'; +import * as semver from 'semver'; +import { BlockMetadata } from '../../../packages/blocks/framework/src'; +import { + BlockCategory, + extractBlockFromModule, +} from '../../../packages/shared/src'; +import { readPackageJson } from './files'; type Block = { - name: string; - displayName: string; - version: string; - minimumSupportedRelease?: string; - maximumSupportedRelease?: string; - metadata(): Omit; + name: string; + displayName: string; + version: string; + minimumSupportedRelease?: string; + maximumSupportedRelease?: string; + metadata(): Omit; }; -export const BLOCKS_FOLDER = 'packages/blocks' - -const validateSupportedRelease = (minRelease: string | undefined, maxRelease: string | undefined) => { - if (minRelease !== undefined && !semver.valid(minRelease)) { - throw Error(`[validateSupportedRelease] "minimumSupportedRelease" should be a valid semver version`) - } - - if (maxRelease !== undefined && !semver.valid(maxRelease)) { - throw Error(`[validateSupportedRelease] "maximumSupportedRelease" should be a valid semver version`) - } - - if (minRelease !== undefined && maxRelease !== undefined && semver.gt(minRelease, maxRelease)) { - throw Error(`[validateSupportedRelease] "minimumSupportedRelease" should be less than "maximumSupportedRelease"`) - } -} +export const BLOCKS_FOLDER = 'packages/blocks'; + +const validateSupportedRelease = ( + minRelease: string | undefined, + maxRelease: string | undefined, +) => { + if (minRelease !== undefined && !semver.valid(minRelease)) { + throw Error( + `[validateSupportedRelease] "minimumSupportedRelease" should be a valid semver version`, + ); + } + + if (maxRelease !== undefined && !semver.valid(maxRelease)) { + throw Error( + `[validateSupportedRelease] "maximumSupportedRelease" should be a valid semver version`, + ); + } + + if ( + minRelease !== undefined && + maxRelease !== undefined && + semver.gt(minRelease, maxRelease) + ) { + throw Error( + `[validateSupportedRelease] "minimumSupportedRelease" should be less than "maximumSupportedRelease"`, + ); + } +}; const validateMetadata = (blockMetadata: BlockMetadata): void => { - console.info(`[validateMetadata] blockName=${blockMetadata.name}`) - validateSupportedRelease( - blockMetadata.minimumSupportedRelease, - blockMetadata.maximumSupportedRelease, - ) - validatePremiumBlock(blockMetadata) -} + console.info(`[validateMetadata] blockName=${blockMetadata.name}`); + validateSupportedRelease( + blockMetadata.minimumSupportedRelease, + blockMetadata.maximumSupportedRelease, + ); + validatePremiumBlock(blockMetadata); +}; const validatePremiumBlock = (block: BlockMetadata): void => { - const categories = block.categories ?? [] - - if (block.directoryPath?.includes("/ee/") && !categories.includes(BlockCategory.PREMIUM)) { - throw Error(`[validatePremiumBlock] Premium blocks must be in the 'premium' category`) - } - if (categories.includes(BlockCategory.PREMIUM) && (!block.minimumSupportedRelease || semver.lt(block.minimumSupportedRelease, '0.27.1'))) { - throw Error(`[validatePremiumBlock] Premium blocks must have a minimum supported release of 0.27.1 or higher`) - } -} + const categories = block.categories ?? []; + + if ( + block.directoryPath?.includes('/ee/') && + !categories.includes(BlockCategory.PREMIUM) + ) { + throw Error( + `[validatePremiumBlock] Premium blocks must be in the 'premium' category`, + ); + } + if ( + categories.includes(BlockCategory.PREMIUM) && + (!block.minimumSupportedRelease || + semver.lt(block.minimumSupportedRelease, '0.27.1')) + ) { + throw Error( + `[validatePremiumBlock] Premium blocks must have a minimum supported release of 0.27.1 or higher`, + ); + } +}; const byDisplayNameIgnoreCase = (a: BlockMetadata, b: BlockMetadata) => { - const aName = a.displayName.toUpperCase(); - const bName = b.displayName.toUpperCase(); - return aName.localeCompare(bName, 'en'); + const aName = a.displayName.toUpperCase(); + const bName = b.displayName.toUpperCase(); + return aName.localeCompare(bName, 'en'); }; -export async function findBlock(blockName: string): Promise { - const blocks = await findAllBlocks() - return blocks.find((p) => p.name === blockName) ?? null +export async function findBlock( + blockName: string, +): Promise { + const blocks = await findAllBlocks(); + return blocks.find((p) => p.name === blockName) ?? null; } export async function findAllBlocksDirectoryInSource(): Promise { - const blocksPath = resolve(cwd(), 'packages', 'blocks') - const paths = await traverseFolder(blocksPath) - const enterpriseBlocksPath = resolve(cwd(), 'packages', 'ee', 'blocks') - const enterpriseBlocksPaths = await traverseFolder(enterpriseBlocksPath) - return [...paths, ...enterpriseBlocksPaths] + const blocksPath = resolve(cwd(), 'packages', 'blocks'); + const paths = await traverseFolder(blocksPath); + const enterpriseBlocksPath = resolve(cwd(), 'packages', 'ee', 'blocks'); + const enterpriseBlocksPaths = await traverseFolder(enterpriseBlocksPath); + return [...paths, ...enterpriseBlocksPaths]; } -export async function findBlockDirectoryInSource(blockName: string): Promise { - const blocksPath = await findAllBlocksDirectoryInSource(); - const blockPath = blocksPath.find((p) => p.includes(blockName)) - return blockPath ?? null +export async function findBlockDirectoryInSource( + blockName: string, +): Promise { + const blocksPath = await findAllBlocksDirectoryInSource(); + const blockPath = blocksPath.find((p) => p.includes(blockName)); + return blockPath ?? null; } export async function findAllBlocks(): Promise { - const paths = await findAllDistPaths() - const blocks = await Promise.all(paths.map((p) => loadBlockFromFolder(p))) - return blocks.filter((p): p is BlockMetadata => p !== null).sort(byDisplayNameIgnoreCase) + const paths = await findAllDistPaths(); + const blocks = await Promise.all(paths.map((p) => loadBlockFromFolder(p))); + return blocks + .filter((p): p is BlockMetadata => p !== null) + .sort(byDisplayNameIgnoreCase); } async function findAllDistPaths(): Promise { - const baseDir = resolve(cwd(), 'dist', 'packages') - const standardBlocksPath = resolve(baseDir, 'blocks') - const enterpriseBlocksPath = resolve(baseDir, 'ee', 'blocks') - const paths = [ - ...await traverseFolder(standardBlocksPath), - ...await traverseFolder(enterpriseBlocksPath) - ] - return paths + const baseDir = resolve(cwd(), 'dist', 'packages'); + const standardBlocksPath = resolve(baseDir, 'blocks'); + const enterpriseBlocksPath = resolve(baseDir, 'ee', 'blocks'); + const paths = [ + ...(await traverseFolder(standardBlocksPath)), + ...(await traverseFolder(enterpriseBlocksPath)), + ]; + return paths; } async function traverseFolder(folderPath: string): Promise { - const paths: string[] = [] - const directoryExists = await stat(folderPath).catch(() => null) - - if (directoryExists && directoryExists.isDirectory()) { - const files = await readdir(folderPath) - - for (const file of files) { - const filePath = join(folderPath, file) - const fileStats = await stat(filePath) - if (fileStats.isDirectory() && file !== 'node_modules' && file !== 'dist') { - paths.push(...await traverseFolder(filePath)) - } - else if (file === 'package.json') { - paths.push(folderPath) - } - } + const paths: string[] = []; + const directoryExists = await stat(folderPath).catch(() => null); + + if (directoryExists && directoryExists.isDirectory()) { + const files = await readdir(folderPath); + + for (const file of files) { + const filePath = join(folderPath, file); + const fileStats = await stat(filePath); + if ( + fileStats.isDirectory() && + file !== 'node_modules' && + file !== 'dist' + ) { + paths.push(...(await traverseFolder(filePath))); + } else if (file === 'package.json') { + paths.push(folderPath); + } } - return paths + } + return paths; } -async function loadBlockFromFolder(folderPath: string): Promise { - try { - const packageJson = await readPackageJson(folderPath); - - const module = await import( - join(folderPath, 'src', 'index') - ) - - const { name: blockName, version: blockVersion } = packageJson - const block = extractBlockFromModule({ - module, - blockName, - blockVersion - }); - - const metadata = { - ...block.metadata(), - name: packageJson.name, - version: packageJson.version - }; - metadata.directoryPath = folderPath; - metadata.name = packageJson.name; - metadata.version = packageJson.version; - metadata.minimumSupportedRelease = block.minimumSupportedRelease ?? '0.0.0'; - metadata.maximumSupportedRelease = - block.maximumSupportedRelease ?? '99999.99999.9999'; - - - validateMetadata(metadata); - return metadata; - } - catch (ex) { - console.error(ex) - } - return null +async function loadBlockFromFolder( + folderPath: string, +): Promise { + try { + const packageJson = await readPackageJson(folderPath); + + const module = await import(join(folderPath, 'src', 'index')); + + const { name: blockName, version: blockVersion } = packageJson; + const block = extractBlockFromModule({ + module, + blockName, + blockVersion, + }); + + const metadata = { + ...block.metadata(), + name: packageJson.name, + version: packageJson.version, + }; + metadata.directoryPath = folderPath; + metadata.name = packageJson.name; + metadata.version = packageJson.version; + metadata.minimumSupportedRelease = block.minimumSupportedRelease ?? '0.0.0'; + metadata.maximumSupportedRelease = + block.maximumSupportedRelease ?? '99999.99999.9999'; + + validateMetadata(metadata); + return metadata; + } catch (ex) { + console.error(ex); + } + return null; } - diff --git a/tools/scripts/utils/exec.ts b/tools/scripts/utils/exec.ts index 40bdd89243..d6af8bfb9b 100644 --- a/tools/scripts/utils/exec.ts +++ b/tools/scripts/utils/exec.ts @@ -1,4 +1,4 @@ -import { exec as execCallback } from 'node:child_process' -import { promisify } from 'node:util' +import { exec as execCallback } from 'node:child_process'; +import { promisify } from 'node:util'; -export const exec = promisify(execCallback) +export const exec = promisify(execCallback); diff --git a/tools/scripts/utils/files.ts b/tools/scripts/utils/files.ts index a303b3463c..4e4ead784d 100644 --- a/tools/scripts/utils/files.ts +++ b/tools/scripts/utils/files.ts @@ -12,8 +12,7 @@ export type ProjectJson = { build?: { options?: { buildableProjectDepsInPackageJsonType?: - | 'peerDependencies' - | 'dependencies'; + 'peerDependencies' | 'dependencies'; updateBuildableProjectDepsInPackageJson: boolean; }; }; diff --git a/tools/scripts/utils/package-pre-publish-checks.ts b/tools/scripts/utils/package-pre-publish-checks.ts index b1eac45356..8cd00bc46a 100644 --- a/tools/scripts/utils/package-pre-publish-checks.ts +++ b/tools/scripts/utils/package-pre-publish-checks.ts @@ -1,19 +1,26 @@ -import assert from 'node:assert' -import { ExecException } from 'node:child_process' -import axios, { AxiosError } from 'axios' -import { exec } from './exec' -import { readPackageJson } from './files' - -const getLatestPublishedVersion = async (packageName: string, maxRetries: number = 5): Promise => { +import axios, { AxiosError } from 'axios'; +import assert from 'node:assert'; +import { ExecException } from 'node:child_process'; +import { exec } from './exec'; +import { readPackageJson } from './files'; + +const getLatestPublishedVersion = async ( + packageName: string, + maxRetries: number = 5, +): Promise => { console.info(`[getLatestPublishedVersion] packageName=${packageName}`); const retryDelay = (attempt: number) => Math.pow(4, attempt - 1) * 2000; for (let attempt = 1; attempt <= maxRetries; attempt++) { try { - const response = await axios<{ version: string }>(`https://registry.npmjs.org/${packageName}/latest`); + const response = await axios<{ version: string }>( + `https://registry.npmjs.org/${packageName}/latest`, + ); const version = response.data.version; - console.info(`[getLatestPublishedVersion] packageName=${packageName}, latestVersion=${version}`); + console.info( + `[getLatestPublishedVersion] packageName=${packageName}, latestVersion=${version}`, + ); return version; } catch (e: unknown) { if (attempt === maxRetries) { @@ -21,39 +28,45 @@ const getLatestPublishedVersion = async (packageName: string, maxRetries: number } if (e instanceof AxiosError && e.response?.status === 404) { - console.info(`[getLatestPublishedVersion] packageName=${packageName}, latestVersion=null`); + console.info( + `[getLatestPublishedVersion] packageName=${packageName}, latestVersion=null`, + ); return null; } - console.warn(`[getLatestPublishedVersion] packageName=${packageName}, attempt=${attempt}, error=${e}`); + console.warn( + `[getLatestPublishedVersion] packageName=${packageName}, attempt=${attempt}, error=${e}`, + ); const delay = retryDelay(attempt); - await new Promise(resolve => setTimeout(resolve, delay)); // Wait for the delay before retrying + await new Promise((resolve) => setTimeout(resolve, delay)); // Wait for the delay before retrying } } return null; // Return null if all retries fail }; - const packageChangedFromMainBranch = async (path: string): Promise => { - const cleaned = path.includes('/packages') ? `packages/` + path.split('packages/')[1] : path + const cleaned = path.includes('/packages') + ? `packages/` + path.split('packages/')[1] + : path; if (!cleaned.startsWith('packages/')) { - throw new Error(`[packageChangedFromMainBranch] path=${cleaned} is not a valid package path`) + throw new Error( + `[packageChangedFromMainBranch] path=${cleaned} is not a valid package path`, + ); } - console.info(`[packageChangedFromMainBranch] path=${cleaned}`) + console.info(`[packageChangedFromMainBranch] path=${cleaned}`); try { - const diff = await exec(`git diff --quiet origin/main -- ${cleaned}`) - return false - } - catch (e) { + const diff = await exec(`git diff --quiet origin/main -- ${cleaned}`); + return false; + } catch (e) { if ((e as ExecException).code === 1) { - return true + return true; } - throw e + throw e; } -} +}; /** * Validates the package before publishing. @@ -62,25 +75,34 @@ const packageChangedFromMainBranch = async (path: string): Promise => { * throws if validation fails. * @param path path of package to run pre-publishing checks for */ -export const packagePrePublishChecks = async (path: string): Promise => { - console.info(`[packagePrePublishValidation] path=${path}`) +export const packagePrePublishChecks = async ( + path: string, +): Promise => { + console.info(`[packagePrePublishValidation] path=${path}`); - assert(path, '[packagePrePublishValidation] parameter "path" is required') + assert(path, '[packagePrePublishValidation] parameter "path" is required'); - const { name: packageName, version: currentVersion } = await readPackageJson(path) - const latestPublishedVersion = await getLatestPublishedVersion(packageName) - const currentVersionAlreadyPublished = latestPublishedVersion !== null && currentVersion === latestPublishedVersion + const { name: packageName, version: currentVersion } = + await readPackageJson(path); + const latestPublishedVersion = await getLatestPublishedVersion(packageName); + const currentVersionAlreadyPublished = + latestPublishedVersion !== null && + currentVersion === latestPublishedVersion; if (currentVersionAlreadyPublished) { - const packageChanged = await packageChangedFromMainBranch(path) + const packageChanged = await packageChangedFromMainBranch(path); if (packageChanged) { - throw new Error(`[packagePrePublishValidation] package version not incremented, path=${path}, version=${currentVersion}`) + throw new Error( + `[packagePrePublishValidation] package version not incremented, path=${path}, version=${currentVersion}`, + ); } - console.info(`[packagePrePublishValidation] package already published, path=${path}, version=${currentVersion}`) - return true + console.info( + `[packagePrePublishValidation] package already published, path=${path}, version=${currentVersion}`, + ); + return true; } - return false -} + return false; +}; diff --git a/tools/scripts/utils/publish-nx-project.ts b/tools/scripts/utils/publish-nx-project.ts index ebe01236fd..8bc68e9048 100644 --- a/tools/scripts/utils/publish-nx-project.ts +++ b/tools/scripts/utils/publish-nx-project.ts @@ -1,12 +1,12 @@ -import assert from 'node:assert' -import { argv } from 'node:process' -import { exec } from './exec' -import { readPackageJson, readProjectJson } from './files' -import { packagePrePublishChecks } from './package-pre-publish-checks' +import assert from 'node:assert'; +import { argv } from 'node:process'; +import { exec } from './exec'; +import { readPackageJson, readProjectJson } from './files'; +import { packagePrePublishChecks } from './package-pre-publish-checks'; export const publishNxProject = async (path: string): Promise => { - console.info(`[publishNxProject] path=${path}`) - assert(path, '[publishNxProject] parameter "path" is required') + console.info(`[publishNxProject] path=${path}`); + assert(path, '[publishNxProject] parameter "path" is required'); const packageAlreadyPublished = await packagePrePublishChecks(path); @@ -14,30 +14,30 @@ export const publishNxProject = async (path: string): Promise => { return; } - const { version } = await readPackageJson(path) - const { name: nxProjectName } = await readProjectJson(path) + const { version } = await readPackageJson(path); + const { name: nxProjectName } = await readProjectJson(path); const nxPublishProjectCommand = ` node tools/scripts/publish.mjs \ ${nxProjectName} \ ${version} \ latest - ` + `; - await exec(nxPublishProjectCommand) + await exec(nxPublishProjectCommand); - console.info(`[publishNxProject] success, path=${path}, version=${version}`) -} + console.info(`[publishNxProject] success, path=${path}, version=${version}`); +}; const main = async (): Promise => { - const path = argv[2] - await publishNxProject(path) -} + const path = argv[2]; + await publishNxProject(path); +}; /* * module is entrypoint, not imported i.e. invoked directly * see https://nodejs.org/api/modules.html#modules_accessing_the_main_module */ if (require.main === module) { - main() + main(); } diff --git a/tools/scripts/validate-publishable-packages.ts b/tools/scripts/validate-publishable-packages.ts index ced40f8f13..b039dd6bdf 100644 --- a/tools/scripts/validate-publishable-packages.ts +++ b/tools/scripts/validate-publishable-packages.ts @@ -2,18 +2,18 @@ import { findAllBlocksDirectoryInSource } from './utils/block-script-utils'; import { packagePrePublishChecks } from './utils/package-pre-publish-checks'; const main = async () => { - const blocksMetadata = await findAllBlocksDirectoryInSource() + const blocksMetadata = await findAllBlocksDirectoryInSource(); const packages = [ ...blocksMetadata, 'packages/blocks/framework', 'packages/shared', 'packages/blocks/common', - ] + ]; - const validationResults = packages.map(p => packagePrePublishChecks(p)) + const validationResults = packages.map((p) => packagePrePublishChecks(p)); Promise.all(validationResults); -} +}; main(); From 1633863027cac3dc650f5c7f71a7b1c134b50148 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcelo=20Gon=C3=A7alves?= Date: Tue, 11 Aug 2026 11:03:22 +0100 Subject: [PATCH 3/9] Convert ESLint configs to flat config Replaces 65 legacy config files (64 .eslintrc.json plus two .eslintignore) with 11 flat configs. ESLint 10 removes eslintrc support entirely, so this is the prerequisite for that upgrade; ESLint 8.57 reads flat config already, and Nx sets ESLINT_USE_FLAT_CONFIG for us until we move to v9. Most of the deleted files carried no configuration: 52 of the block configs only re-declared the root config with empty rule blocks, and the two that looked different were an identical file with different indentation and one that redundantly re-applied the root's prettier config. Projects without their own config now resolve to the root one, since both the Nx executor and ESLint search upwards from the project directory. Shared layers live in eslint.base.config.mjs as named exports (baseConfig, frontendConfig, serverConfig) so Nx tracks one file as a lint cache input; a second root config file would not match Nx's eslint config glob and so would not invalidate the cache. nx.json inputs are updated to match. The eslintrc "ignore everything, then un-ignore per project" idiom is gone, replaced by real ignores. Note that cwd differs between the two ways Nx runs ESLint - the executor runs from the workspace root, inferred targets from the project root - and flat-config patterns resolve against cwd, so patterns are globstar-prefixed to behave the same either way. Also in this commit, because they are only reachable once the configs are rewritten: - eslint-plugin-import-x 0.5.3 -> 4.17.1 and eslint-import-resolver-typescript 3.10.1 -> 4.4.5, adding import-x's typescript config so `named` stops reporting type-only exports - add @eslint/js, globals and the typescript-eslint meta package, which @nx/eslint-plugin's flat configs require - engine's .eslintignore became `ignores`; its lint target no longer passes ignorePath, which flat config rejects - drop three re-exports from packages/shared/src/index.ts that duplicated what the ./lib/common and ./lib/flows barrels already export. import-x/export flagged them; a full build confirms nothing depended on them. Verified: lint passes for all 63 projects, full build passes, and linted file counts are unchanged (react-ui 459, server-api 500). Co-Authored-By: Claude Opus 5 (1M context) --- .eslintignore | 8 - .eslintrc.json | 69 ---- eslint.base.config.mjs | 301 +++++++++++++++ eslint.config.mjs | 8 + nx.json | 12 +- package-lock.json | 354 ++++++------------ package.json | 7 +- packages/blocks/ai/.eslintrc.json | 18 - packages/blocks/anodot/.eslintrc.json | 18 - packages/blocks/approval/.eslintrc.json | 18 - packages/blocks/archera/.eslintrc.json | 18 - packages/blocks/aws-athena/.eslintrc.json | 18 - .../aws-compute-optimizer/.eslintrc.json | 18 - packages/blocks/aws/.eslintrc.json | 18 - packages/blocks/azure/.eslintrc.json | 18 - packages/blocks/cloudability/.eslintrc.json | 18 - packages/blocks/cloudfix/.eslintrc.json | 18 - packages/blocks/cloudformation/.eslintrc.json | 18 - packages/blocks/cloudhealth/.eslintrc.json | 18 - packages/blocks/cloudzero/.eslintrc.json | 18 - packages/blocks/common/.eslintrc.json | 18 - packages/blocks/databricks/.eslintrc.json | 18 - packages/blocks/date-helper/.eslintrc.json | 18 - packages/blocks/delay/.eslintrc.json | 18 - packages/blocks/end-flow/.eslintrc.json | 18 - packages/blocks/file-helper/.eslintrc.json | 18 - packages/blocks/finout/.eslintrc.json | 18 - packages/blocks/flexera-one/.eslintrc.json | 18 - packages/blocks/flexera/.eslintrc.json | 18 - packages/blocks/framework/.eslintrc.json | 18 - packages/blocks/github/.eslintrc.json | 18 - packages/blocks/google-cloud/.eslintrc.json | 18 - packages/blocks/http/.eslintrc.json | 18 - packages/blocks/hyperglance/.eslintrc.json | 18 - packages/blocks/imap/.eslintrc.json | 18 - packages/blocks/jira-cloud/.eslintrc.json | 18 - packages/blocks/kion/.eslintrc.json | 18 - packages/blocks/linear/.eslintrc.json | 18 - .../blocks/list-operations/.eslintrc.json | 18 - packages/blocks/math-helper/.eslintrc.json | 18 - .../blocks/microsoft-outlook/.eslintrc.json | 18 - .../blocks/microsoft-teams/.eslintrc.json | 18 - packages/blocks/monday/.eslintrc.json | 18 - packages/blocks/nops/.eslintrc.json | 18 - packages/blocks/openops-tables/.eslintrc.json | 18 - packages/blocks/schedule/.eslintrc.json | 18 - packages/blocks/servicenow/.eslintrc.json | 18 - packages/blocks/sftp/.eslintrc.json | 18 - packages/blocks/slack/.eslintrc.json | 18 - packages/blocks/smtp/.eslintrc.json | 18 - packages/blocks/snowflake/.eslintrc.json | 18 - packages/blocks/store/.eslintrc.json | 18 - packages/blocks/ternary/.eslintrc.json | 18 - packages/blocks/terraform/.eslintrc.json | 18 - packages/blocks/text-helper/.eslintrc.json | 20 - packages/blocks/vantage/.eslintrc.json | 18 - packages/blocks/vegacloud/.eslintrc.json | 18 - packages/blocks/webhook/.eslintrc.json | 18 - packages/blocks/zendesk/.eslintrc.json | 18 - packages/cli/.eslintrc.json | 4 - packages/engine/.eslintignore | 2 - packages/engine/.eslintrc.json | 14 - packages/engine/eslint.config.mjs | 22 ++ packages/engine/project.json | 3 +- packages/openops/.eslintrc.json | 13 - packages/openops/eslint.config.mjs | 6 + packages/react-ui/.eslintrc.json | 134 ------- packages/react-ui/eslint.config.mjs | 46 +++ packages/server/api/.eslintrc.json | 60 --- packages/server/api/eslint.config.mjs | 11 + packages/server/shared/.eslintrc.json | 38 -- packages/server/shared/eslint.config.mjs | 33 ++ packages/server/worker/.eslintrc.json | 20 - packages/server/worker/eslint.config.mjs | 19 + packages/shared/.eslintrc.json | 11 - packages/shared/eslint.config.mjs | 11 + packages/shared/src/index.ts | 3 - packages/tests-e2e/.eslintrc.json | 18 - packages/ui-components/.eslintrc.json | 107 ------ packages/ui-components/eslint.config.mjs | 17 + packages/ui-kit/.eslintrc.json | 104 ----- packages/ui-kit/eslint.config.mjs | 15 + 82 files changed, 611 insertions(+), 1797 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.json create mode 100644 eslint.base.config.mjs create mode 100644 eslint.config.mjs delete mode 100644 packages/blocks/ai/.eslintrc.json delete mode 100644 packages/blocks/anodot/.eslintrc.json delete mode 100644 packages/blocks/approval/.eslintrc.json delete mode 100644 packages/blocks/archera/.eslintrc.json delete mode 100644 packages/blocks/aws-athena/.eslintrc.json delete mode 100644 packages/blocks/aws-compute-optimizer/.eslintrc.json delete mode 100644 packages/blocks/aws/.eslintrc.json delete mode 100644 packages/blocks/azure/.eslintrc.json delete mode 100644 packages/blocks/cloudability/.eslintrc.json delete mode 100644 packages/blocks/cloudfix/.eslintrc.json delete mode 100644 packages/blocks/cloudformation/.eslintrc.json delete mode 100644 packages/blocks/cloudhealth/.eslintrc.json delete mode 100644 packages/blocks/cloudzero/.eslintrc.json delete mode 100644 packages/blocks/common/.eslintrc.json delete mode 100644 packages/blocks/databricks/.eslintrc.json delete mode 100644 packages/blocks/date-helper/.eslintrc.json delete mode 100644 packages/blocks/delay/.eslintrc.json delete mode 100644 packages/blocks/end-flow/.eslintrc.json delete mode 100644 packages/blocks/file-helper/.eslintrc.json delete mode 100644 packages/blocks/finout/.eslintrc.json delete mode 100644 packages/blocks/flexera-one/.eslintrc.json delete mode 100644 packages/blocks/flexera/.eslintrc.json delete mode 100644 packages/blocks/framework/.eslintrc.json delete mode 100644 packages/blocks/github/.eslintrc.json delete mode 100644 packages/blocks/google-cloud/.eslintrc.json delete mode 100644 packages/blocks/http/.eslintrc.json delete mode 100644 packages/blocks/hyperglance/.eslintrc.json delete mode 100644 packages/blocks/imap/.eslintrc.json delete mode 100644 packages/blocks/jira-cloud/.eslintrc.json delete mode 100644 packages/blocks/kion/.eslintrc.json delete mode 100644 packages/blocks/linear/.eslintrc.json delete mode 100644 packages/blocks/list-operations/.eslintrc.json delete mode 100644 packages/blocks/math-helper/.eslintrc.json delete mode 100644 packages/blocks/microsoft-outlook/.eslintrc.json delete mode 100644 packages/blocks/microsoft-teams/.eslintrc.json delete mode 100644 packages/blocks/monday/.eslintrc.json delete mode 100644 packages/blocks/nops/.eslintrc.json delete mode 100644 packages/blocks/openops-tables/.eslintrc.json delete mode 100644 packages/blocks/schedule/.eslintrc.json delete mode 100644 packages/blocks/servicenow/.eslintrc.json delete mode 100644 packages/blocks/sftp/.eslintrc.json delete mode 100644 packages/blocks/slack/.eslintrc.json delete mode 100644 packages/blocks/smtp/.eslintrc.json delete mode 100644 packages/blocks/snowflake/.eslintrc.json delete mode 100644 packages/blocks/store/.eslintrc.json delete mode 100644 packages/blocks/ternary/.eslintrc.json delete mode 100644 packages/blocks/terraform/.eslintrc.json delete mode 100644 packages/blocks/text-helper/.eslintrc.json delete mode 100644 packages/blocks/vantage/.eslintrc.json delete mode 100644 packages/blocks/vegacloud/.eslintrc.json delete mode 100644 packages/blocks/webhook/.eslintrc.json delete mode 100644 packages/blocks/zendesk/.eslintrc.json delete mode 100644 packages/cli/.eslintrc.json delete mode 100644 packages/engine/.eslintignore delete mode 100644 packages/engine/.eslintrc.json create mode 100644 packages/engine/eslint.config.mjs delete mode 100644 packages/openops/.eslintrc.json create mode 100644 packages/openops/eslint.config.mjs delete mode 100644 packages/react-ui/.eslintrc.json create mode 100644 packages/react-ui/eslint.config.mjs delete mode 100644 packages/server/api/.eslintrc.json create mode 100644 packages/server/api/eslint.config.mjs delete mode 100644 packages/server/shared/.eslintrc.json create mode 100644 packages/server/shared/eslint.config.mjs delete mode 100644 packages/server/worker/.eslintrc.json create mode 100644 packages/server/worker/eslint.config.mjs delete mode 100644 packages/shared/.eslintrc.json create mode 100644 packages/shared/eslint.config.mjs delete mode 100644 packages/tests-e2e/.eslintrc.json delete mode 100644 packages/ui-components/.eslintrc.json create mode 100644 packages/ui-components/eslint.config.mjs delete mode 100644 packages/ui-kit/.eslintrc.json create mode 100644 packages/ui-kit/eslint.config.mjs 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/eslint.base.config.mjs b/eslint.base.config.mjs new file mode 100644 index 0000000000..ed9c815465 --- /dev/null +++ b/eslint.base.config.mjs @@ -0,0 +1,301 @@ +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/**', + // 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/nx.json b/nx.json index c24ef6139a..218c0449db 100644 --- a/nx.json +++ b/nx.json @@ -7,7 +7,11 @@ "cache": true }, "lint": { - "inputs": ["default", "{workspaceRoot}/.eslintrc.json"], + "inputs": [ + "default", + "{workspaceRoot}/eslint.config.mjs", + "{workspaceRoot}/eslint.base.config.mjs" + ], "cache": true }, "test": { @@ -28,7 +32,11 @@ } }, "@nx/eslint:lint": { - "inputs": ["default", "{workspaceRoot}/.eslintrc.json"], + "inputs": [ + "default", + "{workspaceRoot}/eslint.config.mjs", + "{workspaceRoot}/eslint.base.config.mjs" + ], "cache": true }, "@nx/js:tsc": { diff --git a/package-lock.json b/package-lock.json index 07bf6f71f3..a0ff7cfb15 100644 --- a/package-lock.json +++ b/package-lock.json @@ -283,6 +283,7 @@ "zustand": "4.5.7" }, "devDependencies": { + "@eslint/js": "8.57.1", "@faker-js/faker": "8.4.1", "@nx/devkit": "23.0.0", "@nx/esbuild": "23.0.0", @@ -351,9 +352,9 @@ "eslint": "8.57.1", "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-import-x": "4.17.1", "eslint-plugin-jest-dom": "5.10.1", "eslint-plugin-jsx-a11y": "6.10.2", "eslint-plugin-prettier": "5.5.6", @@ -362,6 +363,7 @@ "eslint-plugin-storybook": "10.4.6", "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", @@ -383,6 +385,7 @@ "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", @@ -9815,16 +9818,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", @@ -21700,16 +21693,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", @@ -24557,6 +24540,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", @@ -27267,19 +27260,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", @@ -28223,6 +28203,31 @@ "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", @@ -28283,22 +28288,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" @@ -28380,185 +28385,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" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "eslint": "^8.56.0 || ^9.0.0-0" - } - }, - "node_modules/eslint-plugin-import-x/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==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" + "minimatch": "^9.0.3 || ^10.1.2", + "semver": "^7.7.2", + "stable-hash-x": "^0.2.0", + "unrs-resolver": "^1.9.2" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-import-x/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" + "url": "https://opencollective.com/eslint-plugin-import-x" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-import-x/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" + "peerDependencies": { + "@typescript-eslint/utils": "^8.56.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "eslint-import-resolver-node": "*" }, "peerDependenciesMeta": { - "typescript": { + "@typescript-eslint/utils": { + "optional": true + }, + "eslint-import-resolver-node": { "optional": true } } }, - "node_modules/eslint-plugin-import-x/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/eslint-plugin-import-x/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/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" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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-x/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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, "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", @@ -31450,9 +31312,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": { @@ -31479,37 +31341,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", @@ -51567,12 +51398,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", @@ -53874,6 +53708,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", diff --git a/package.json b/package.json index c93b75053e..ecc8527c38 100644 --- a/package.json +++ b/package.json @@ -307,6 +307,7 @@ "zustand": "4.5.7" }, "devDependencies": { + "@eslint/js": "8.57.1", "@faker-js/faker": "8.4.1", "@nx/devkit": "23.0.0", "@nx/esbuild": "23.0.0", @@ -375,9 +376,9 @@ "eslint": "8.57.1", "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-import-x": "4.17.1", "eslint-plugin-jest-dom": "5.10.1", "eslint-plugin-jsx-a11y": "6.10.2", "eslint-plugin-prettier": "5.5.6", @@ -386,6 +387,7 @@ "eslint-plugin-storybook": "10.4.6", "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", @@ -407,6 +409,7 @@ "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/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/.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/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/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/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/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/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/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/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/list-operations/.eslintrc.json b/packages/blocks/list-operations/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/list-operations/.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/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-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/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/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/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/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/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/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/openops/.eslintrc.json b/packages/openops/.eslintrc.json deleted file mode 100644 index c99be39afa..0000000000 --- a/packages/openops/.eslintrc.json +++ /dev/null @@ -1,13 +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/react-ui/.eslintrc.json b/packages/react-ui/.eslintrc.json deleted file mode 100644 index d1e183feb0..0000000000 --- a/packages/react-ui/.eslintrc.json +++ /dev/null @@ -1,134 +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", - // 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", - "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/server/api/.eslintrc.json b/packages/server/api/.eslintrc.json deleted file mode 100644 index 1d549db920..0000000000 --- a/packages/server/api/.eslintrc.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*", "node_modules/**/*"], - "overrides": [ - { - "files": ["*.ts", "*.js"], - "extends": [ - "plugin:@typescript-eslint/strict", - "plugin:import-x/recommended" - ], - "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", - { "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" - } - } - ], - "settings": { - "import/ignore:": ["node_modules"], - "import-x/resolver": { - "typescript": { - "alwaysTryTypes": false - }, - "node": true - } - } -} 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/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/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/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/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 d261b0ece4..0000000000 --- a/packages/ui-components/.eslintrc.json +++ /dev/null @@ -1,107 +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", - // 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", - "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-kit/.eslintrc.json b/packages/ui-kit/.eslintrc.json deleted file mode 100644 index 8e9457360f..0000000000 --- a/packages/ui-kit/.eslintrc.json +++ /dev/null @@ -1,104 +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", - // 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", - "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', + }, + }, +]; From 3ef2e0558341656903378795f64a4c04c459d08a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcelo=20Gon=C3=A7alves?= Date: Tue, 11 Aug 2026 11:48:52 +0100 Subject: [PATCH 4/9] Upgrade ESLint to 9.39.5 Flat config is the default in v9, so Nx no longer sets ESLINT_USE_FLAT_CONFIG and the "Support for ESLint v8 is deprecated" warnings are gone. v9 adds no-constant-binary-expression to the recommended set, which caught a real bug in the monday block: `Number(x) ?? 0` never falls back, because Number() returns NaN rather than a nullish value, so a malformed hour or minute propagated NaN instead of 0. Changed to `|| 0`. Also cleans up references left stale by the flat config migration: - nx.json's production named input excluded .eslintrc.json - the block generator edited a .eslintrc.json that Nx no longer emits, which would have broken `npm run create-block`. Blocks inherit the workspace config, so it now deletes the generated config instead of rewriting it. - drop the now-unused readPackageEslint/writePackageEslint helpers - AGENTS.md pointed at .eslintrc Verified: lint passes for all 63 projects, full build passes, and the full test suite passes except blocks-azure, which fails identically on origin/main. That test asserts AZURE_EXTENSION_DIR is forwarded, but the implementation only forwards it when set, so it depends on the environment. Left alone as pre-existing and out of scope. Co-Authored-By: Claude Opus 5 (1M context) --- AGENTS.md | 2 +- nx.json | 2 +- package-lock.json | 460 ++++++++++-------- package.json | 4 +- .../blocks/monday/src/lib/common/helper.ts | 6 +- packages/cli/src/lib/commands/create-block.ts | 4 +- .../cli/src/lib/utils/block-generators.ts | 21 +- packages/cli/src/lib/utils/files.ts | 11 - tools/scripts/utils/files.ts | 11 - 9 files changed, 285 insertions(+), 236 deletions(-) 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/nx.json b/nx.json index 218c0449db..b0d771fa84 100644 --- a/nx.json +++ b/nx.json @@ -49,7 +49,7 @@ "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", diff --git a/package-lock.json b/package-lock.json index a0ff7cfb15..f0176af0fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -283,7 +283,7 @@ "zustand": "4.5.7" }, "devDependencies": { - "@eslint/js": "8.57.1", + "@eslint/js": "9.39.5", "@faker-js/faker": "8.4.1", "@nx/devkit": "23.0.0", "@nx/esbuild": "23.0.0", @@ -349,7 +349,7 @@ "chromatic": "11.29.0", "concurrently": "8.2.2", "esbuild": "0.28.1", - "eslint": "8.57.1", + "eslint": "9.39.5", "eslint-config-prettier": "10.1.8", "eslint-import-resolver-alias": "1.1.2", "eslint-import-resolver-typescript": "4.4.5", @@ -5630,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" @@ -5679,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": { @@ -5689,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" @@ -5716,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": [ { @@ -5758,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": { @@ -6551,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==", - "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==", + "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", + "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": { @@ -6612,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", @@ -28131,60 +28242,63 @@ } }, "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": { @@ -28803,9 +28917,9 @@ } }, "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": { @@ -28813,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" @@ -28867,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", @@ -28897,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", @@ -28923,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", @@ -28998,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", @@ -30082,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": { @@ -30354,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": { @@ -31431,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", @@ -33603,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", @@ -52715,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", diff --git a/package.json b/package.json index ecc8527c38..924f73c336 100644 --- a/package.json +++ b/package.json @@ -307,7 +307,7 @@ "zustand": "4.5.7" }, "devDependencies": { - "@eslint/js": "8.57.1", + "@eslint/js": "9.39.5", "@faker-js/faker": "8.4.1", "@nx/devkit": "23.0.0", "@nx/esbuild": "23.0.0", @@ -373,7 +373,7 @@ "chromatic": "11.29.0", "concurrently": "8.2.2", "esbuild": "0.28.1", - "eslint": "8.57.1", + "eslint": "9.39.5", "eslint-config-prettier": "10.1.8", "eslint-import-resolver-alias": "1.1.2", "eslint-import-resolver-typescript": "4.4.5", 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/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 86864b9c45..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'; @@ -77,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 eab1f705da..aa16c89b40 100644 --- a/packages/cli/src/lib/utils/files.ts +++ b/packages/cli/src/lib/utils/files.ts @@ -59,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/tools/scripts/utils/files.ts b/tools/scripts/utils/files.ts index 4e4ead784d..81e598e2b1 100644 --- a/tools/scripts/utils/files.ts +++ b/tools/scripts/utils/files.ts @@ -42,17 +42,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, From e9ce3ac39e4ed368338a8ed2d895f4425bf88d96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcelo=20Gon=C3=A7alves?= Date: Tue, 11 Aug 2026 12:50:34 +0100 Subject: [PATCH 5/9] Reformat merged OAuth files with Prettier 3 The OAuth authorization server merged from main was formatted with Prettier 2, so prettier/prettier reported 8 errors in server-api once this branch's Prettier 3 took effect. Formatting only: Prettier 3 breaks after `=` rather than wrapping the call arguments. No semantic change. Co-Authored-By: Claude Opus 5 (1M context) --- .../server/api/src/app/oauth/oauth-cleanup-job.ts | 5 ++--- .../api/src/app/oauth/projects/available-projects.ts | 5 ++--- .../api/src/app/oauth/tokens/tokens.service.ts | 5 ++--- .../test/unit/oauth/clients/clients.service.test.ts | 12 +++++------- .../test/unit/oauth/projects/oauth-principal.test.ts | 10 ++++------ 5 files changed, 15 insertions(+), 22 deletions(-) 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/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'); }); From d583a090c7e5aa9c6972a724dca7b0ac4336c57a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcelo=20Gon=C3=A7alves?= Date: Tue, 11 Aug 2026 12:59:04 +0100 Subject: [PATCH 6/9] Exclude tools from linting Build and release tooling under tools/ is not shipped code. No Nx project covers that directory, so `nx lint` never reached it; the ignore stops editors and bare `eslint .` runs from reporting on it too. Since those files are no longer lint-enforced, their Prettier 3 reformatting is reverted for consistency with the rest of this branch, which only reformats what lint checks. The one deliberate change kept there is the removal of the dead readPackageEslint/writePackageEslint helpers, which had no callers and referenced the .eslintrc.json files this branch deletes. Co-Authored-By: Claude Opus 5 (1M context) --- eslint.base.config.mjs | 4 + tools/licenses/.generatelicensefile.json | 10 +- tools/scripts/utils/block-script-utils.ts | 280 ++++++++---------- tools/scripts/utils/exec.ts | 6 +- tools/scripts/utils/files.ts | 3 +- .../utils/package-pre-publish-checks.ts | 92 +++--- tools/scripts/utils/publish-nx-project.ts | 34 +-- .../scripts/validate-publishable-packages.ts | 8 +- 8 files changed, 196 insertions(+), 241 deletions(-) diff --git a/eslint.base.config.mjs b/eslint.base.config.mjs index ed9c815465..21a1cfb58f 100644 --- a/eslint.base.config.mjs +++ b/eslint.base.config.mjs @@ -41,6 +41,10 @@ const ignores = [ '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. diff --git a/tools/licenses/.generatelicensefile.json b/tools/licenses/.generatelicensefile.json index 707774351b..f5d1de051b 100644 --- a/tools/licenses/.generatelicensefile.json +++ b/tools/licenses/.generatelicensefile.json @@ -1,9 +1,13 @@ { - "inputs": ["./package.json"], + "inputs": [ + "./package.json" + ], "output": "./THIRD_PARTY_LICENSES.txt", "lineEnding": "lf", "ci": true, - "append": ["./THIRD_PARTY_LICENSES_ADDITIONAL.txt"], + "append": [ + "./THIRD_PARTY_LICENSES_ADDITIONAL.txt" + ], "replace": { "sax": "./node_modules/sax/LICENSE", "mailsplit": "./node_modules/mailsplit/LICENSE.MIT", @@ -15,4 +19,4 @@ }, "exclude": [], "omitVersion": false -} +} \ No newline at end of file diff --git a/tools/scripts/utils/block-script-utils.ts b/tools/scripts/utils/block-script-utils.ts index c54fac57ef..991ffd8a22 100644 --- a/tools/scripts/utils/block-script-utils.ts +++ b/tools/scripts/utils/block-script-utils.ts @@ -1,185 +1,153 @@ -import { readdir, stat } from 'node:fs/promises'; -import { join, resolve } from 'node:path'; -import { cwd } from 'node:process'; -import * as semver from 'semver'; -import { BlockMetadata } from '../../../packages/blocks/framework/src'; -import { - BlockCategory, - extractBlockFromModule, -} from '../../../packages/shared/src'; -import { readPackageJson } from './files'; + +import { readdir, stat } from 'node:fs/promises' +import { resolve, join } from 'node:path' +import { cwd } from 'node:process' +import { BlockMetadata } from '../../../packages/blocks/framework/src' +import { BlockCategory, extractBlockFromModule } from '../../../packages/shared/src' +import * as semver from 'semver' +import { readPackageJson } from './files' type Block = { - name: string; - displayName: string; - version: string; - minimumSupportedRelease?: string; - maximumSupportedRelease?: string; - metadata(): Omit; + name: string; + displayName: string; + version: string; + minimumSupportedRelease?: string; + maximumSupportedRelease?: string; + metadata(): Omit; }; -export const BLOCKS_FOLDER = 'packages/blocks'; - -const validateSupportedRelease = ( - minRelease: string | undefined, - maxRelease: string | undefined, -) => { - if (minRelease !== undefined && !semver.valid(minRelease)) { - throw Error( - `[validateSupportedRelease] "minimumSupportedRelease" should be a valid semver version`, - ); - } - - if (maxRelease !== undefined && !semver.valid(maxRelease)) { - throw Error( - `[validateSupportedRelease] "maximumSupportedRelease" should be a valid semver version`, - ); - } - - if ( - minRelease !== undefined && - maxRelease !== undefined && - semver.gt(minRelease, maxRelease) - ) { - throw Error( - `[validateSupportedRelease] "minimumSupportedRelease" should be less than "maximumSupportedRelease"`, - ); - } -}; +export const BLOCKS_FOLDER = 'packages/blocks' + +const validateSupportedRelease = (minRelease: string | undefined, maxRelease: string | undefined) => { + if (minRelease !== undefined && !semver.valid(minRelease)) { + throw Error(`[validateSupportedRelease] "minimumSupportedRelease" should be a valid semver version`) + } + + if (maxRelease !== undefined && !semver.valid(maxRelease)) { + throw Error(`[validateSupportedRelease] "maximumSupportedRelease" should be a valid semver version`) + } + + if (minRelease !== undefined && maxRelease !== undefined && semver.gt(minRelease, maxRelease)) { + throw Error(`[validateSupportedRelease] "minimumSupportedRelease" should be less than "maximumSupportedRelease"`) + } +} const validateMetadata = (blockMetadata: BlockMetadata): void => { - console.info(`[validateMetadata] blockName=${blockMetadata.name}`); - validateSupportedRelease( - blockMetadata.minimumSupportedRelease, - blockMetadata.maximumSupportedRelease, - ); - validatePremiumBlock(blockMetadata); -}; + console.info(`[validateMetadata] blockName=${blockMetadata.name}`) + validateSupportedRelease( + blockMetadata.minimumSupportedRelease, + blockMetadata.maximumSupportedRelease, + ) + validatePremiumBlock(blockMetadata) +} const validatePremiumBlock = (block: BlockMetadata): void => { - const categories = block.categories ?? []; - - if ( - block.directoryPath?.includes('/ee/') && - !categories.includes(BlockCategory.PREMIUM) - ) { - throw Error( - `[validatePremiumBlock] Premium blocks must be in the 'premium' category`, - ); - } - if ( - categories.includes(BlockCategory.PREMIUM) && - (!block.minimumSupportedRelease || - semver.lt(block.minimumSupportedRelease, '0.27.1')) - ) { - throw Error( - `[validatePremiumBlock] Premium blocks must have a minimum supported release of 0.27.1 or higher`, - ); - } -}; + const categories = block.categories ?? [] + + if (block.directoryPath?.includes("/ee/") && !categories.includes(BlockCategory.PREMIUM)) { + throw Error(`[validatePremiumBlock] Premium blocks must be in the 'premium' category`) + } + if (categories.includes(BlockCategory.PREMIUM) && (!block.minimumSupportedRelease || semver.lt(block.minimumSupportedRelease, '0.27.1'))) { + throw Error(`[validatePremiumBlock] Premium blocks must have a minimum supported release of 0.27.1 or higher`) + } +} const byDisplayNameIgnoreCase = (a: BlockMetadata, b: BlockMetadata) => { - const aName = a.displayName.toUpperCase(); - const bName = b.displayName.toUpperCase(); - return aName.localeCompare(bName, 'en'); + const aName = a.displayName.toUpperCase(); + const bName = b.displayName.toUpperCase(); + return aName.localeCompare(bName, 'en'); }; -export async function findBlock( - blockName: string, -): Promise { - const blocks = await findAllBlocks(); - return blocks.find((p) => p.name === blockName) ?? null; +export async function findBlock(blockName: string): Promise { + const blocks = await findAllBlocks() + return blocks.find((p) => p.name === blockName) ?? null } export async function findAllBlocksDirectoryInSource(): Promise { - const blocksPath = resolve(cwd(), 'packages', 'blocks'); - const paths = await traverseFolder(blocksPath); - const enterpriseBlocksPath = resolve(cwd(), 'packages', 'ee', 'blocks'); - const enterpriseBlocksPaths = await traverseFolder(enterpriseBlocksPath); - return [...paths, ...enterpriseBlocksPaths]; + const blocksPath = resolve(cwd(), 'packages', 'blocks') + const paths = await traverseFolder(blocksPath) + const enterpriseBlocksPath = resolve(cwd(), 'packages', 'ee', 'blocks') + const enterpriseBlocksPaths = await traverseFolder(enterpriseBlocksPath) + return [...paths, ...enterpriseBlocksPaths] } -export async function findBlockDirectoryInSource( - blockName: string, -): Promise { - const blocksPath = await findAllBlocksDirectoryInSource(); - const blockPath = blocksPath.find((p) => p.includes(blockName)); - return blockPath ?? null; +export async function findBlockDirectoryInSource(blockName: string): Promise { + const blocksPath = await findAllBlocksDirectoryInSource(); + const blockPath = blocksPath.find((p) => p.includes(blockName)) + return blockPath ?? null } export async function findAllBlocks(): Promise { - const paths = await findAllDistPaths(); - const blocks = await Promise.all(paths.map((p) => loadBlockFromFolder(p))); - return blocks - .filter((p): p is BlockMetadata => p !== null) - .sort(byDisplayNameIgnoreCase); + const paths = await findAllDistPaths() + const blocks = await Promise.all(paths.map((p) => loadBlockFromFolder(p))) + return blocks.filter((p): p is BlockMetadata => p !== null).sort(byDisplayNameIgnoreCase) } async function findAllDistPaths(): Promise { - const baseDir = resolve(cwd(), 'dist', 'packages'); - const standardBlocksPath = resolve(baseDir, 'blocks'); - const enterpriseBlocksPath = resolve(baseDir, 'ee', 'blocks'); - const paths = [ - ...(await traverseFolder(standardBlocksPath)), - ...(await traverseFolder(enterpriseBlocksPath)), - ]; - return paths; + const baseDir = resolve(cwd(), 'dist', 'packages') + const standardBlocksPath = resolve(baseDir, 'blocks') + const enterpriseBlocksPath = resolve(baseDir, 'ee', 'blocks') + const paths = [ + ...await traverseFolder(standardBlocksPath), + ...await traverseFolder(enterpriseBlocksPath) + ] + return paths } async function traverseFolder(folderPath: string): Promise { - const paths: string[] = []; - const directoryExists = await stat(folderPath).catch(() => null); - - if (directoryExists && directoryExists.isDirectory()) { - const files = await readdir(folderPath); - - for (const file of files) { - const filePath = join(folderPath, file); - const fileStats = await stat(filePath); - if ( - fileStats.isDirectory() && - file !== 'node_modules' && - file !== 'dist' - ) { - paths.push(...(await traverseFolder(filePath))); - } else if (file === 'package.json') { - paths.push(folderPath); - } + const paths: string[] = [] + const directoryExists = await stat(folderPath).catch(() => null) + + if (directoryExists && directoryExists.isDirectory()) { + const files = await readdir(folderPath) + + for (const file of files) { + const filePath = join(folderPath, file) + const fileStats = await stat(filePath) + if (fileStats.isDirectory() && file !== 'node_modules' && file !== 'dist') { + paths.push(...await traverseFolder(filePath)) + } + else if (file === 'package.json') { + paths.push(folderPath) + } + } } - } - return paths; + return paths } -async function loadBlockFromFolder( - folderPath: string, -): Promise { - try { - const packageJson = await readPackageJson(folderPath); - - const module = await import(join(folderPath, 'src', 'index')); - - const { name: blockName, version: blockVersion } = packageJson; - const block = extractBlockFromModule({ - module, - blockName, - blockVersion, - }); - - const metadata = { - ...block.metadata(), - name: packageJson.name, - version: packageJson.version, - }; - metadata.directoryPath = folderPath; - metadata.name = packageJson.name; - metadata.version = packageJson.version; - metadata.minimumSupportedRelease = block.minimumSupportedRelease ?? '0.0.0'; - metadata.maximumSupportedRelease = - block.maximumSupportedRelease ?? '99999.99999.9999'; - - validateMetadata(metadata); - return metadata; - } catch (ex) { - console.error(ex); - } - return null; +async function loadBlockFromFolder(folderPath: string): Promise { + try { + const packageJson = await readPackageJson(folderPath); + + const module = await import( + join(folderPath, 'src', 'index') + ) + + const { name: blockName, version: blockVersion } = packageJson + const block = extractBlockFromModule({ + module, + blockName, + blockVersion + }); + + const metadata = { + ...block.metadata(), + name: packageJson.name, + version: packageJson.version + }; + metadata.directoryPath = folderPath; + metadata.name = packageJson.name; + metadata.version = packageJson.version; + metadata.minimumSupportedRelease = block.minimumSupportedRelease ?? '0.0.0'; + metadata.maximumSupportedRelease = + block.maximumSupportedRelease ?? '99999.99999.9999'; + + + validateMetadata(metadata); + return metadata; + } + catch (ex) { + console.error(ex) + } + return null } + diff --git a/tools/scripts/utils/exec.ts b/tools/scripts/utils/exec.ts index d6af8bfb9b..40bdd89243 100644 --- a/tools/scripts/utils/exec.ts +++ b/tools/scripts/utils/exec.ts @@ -1,4 +1,4 @@ -import { exec as execCallback } from 'node:child_process'; -import { promisify } from 'node:util'; +import { exec as execCallback } from 'node:child_process' +import { promisify } from 'node:util' -export const exec = promisify(execCallback); +export const exec = promisify(execCallback) diff --git a/tools/scripts/utils/files.ts b/tools/scripts/utils/files.ts index 81e598e2b1..f657a60404 100644 --- a/tools/scripts/utils/files.ts +++ b/tools/scripts/utils/files.ts @@ -12,7 +12,8 @@ export type ProjectJson = { build?: { options?: { buildableProjectDepsInPackageJsonType?: - 'peerDependencies' | 'dependencies'; + | 'peerDependencies' + | 'dependencies'; updateBuildableProjectDepsInPackageJson: boolean; }; }; diff --git a/tools/scripts/utils/package-pre-publish-checks.ts b/tools/scripts/utils/package-pre-publish-checks.ts index 8cd00bc46a..b1eac45356 100644 --- a/tools/scripts/utils/package-pre-publish-checks.ts +++ b/tools/scripts/utils/package-pre-publish-checks.ts @@ -1,26 +1,19 @@ -import axios, { AxiosError } from 'axios'; -import assert from 'node:assert'; -import { ExecException } from 'node:child_process'; -import { exec } from './exec'; -import { readPackageJson } from './files'; - -const getLatestPublishedVersion = async ( - packageName: string, - maxRetries: number = 5, -): Promise => { +import assert from 'node:assert' +import { ExecException } from 'node:child_process' +import axios, { AxiosError } from 'axios' +import { exec } from './exec' +import { readPackageJson } from './files' + +const getLatestPublishedVersion = async (packageName: string, maxRetries: number = 5): Promise => { console.info(`[getLatestPublishedVersion] packageName=${packageName}`); const retryDelay = (attempt: number) => Math.pow(4, attempt - 1) * 2000; for (let attempt = 1; attempt <= maxRetries; attempt++) { try { - const response = await axios<{ version: string }>( - `https://registry.npmjs.org/${packageName}/latest`, - ); + const response = await axios<{ version: string }>(`https://registry.npmjs.org/${packageName}/latest`); const version = response.data.version; - console.info( - `[getLatestPublishedVersion] packageName=${packageName}, latestVersion=${version}`, - ); + console.info(`[getLatestPublishedVersion] packageName=${packageName}, latestVersion=${version}`); return version; } catch (e: unknown) { if (attempt === maxRetries) { @@ -28,45 +21,39 @@ const getLatestPublishedVersion = async ( } if (e instanceof AxiosError && e.response?.status === 404) { - console.info( - `[getLatestPublishedVersion] packageName=${packageName}, latestVersion=null`, - ); + console.info(`[getLatestPublishedVersion] packageName=${packageName}, latestVersion=null`); return null; } - console.warn( - `[getLatestPublishedVersion] packageName=${packageName}, attempt=${attempt}, error=${e}`, - ); + console.warn(`[getLatestPublishedVersion] packageName=${packageName}, attempt=${attempt}, error=${e}`); const delay = retryDelay(attempt); - await new Promise((resolve) => setTimeout(resolve, delay)); // Wait for the delay before retrying + await new Promise(resolve => setTimeout(resolve, delay)); // Wait for the delay before retrying } } return null; // Return null if all retries fail }; + const packageChangedFromMainBranch = async (path: string): Promise => { - const cleaned = path.includes('/packages') - ? `packages/` + path.split('packages/')[1] - : path; + const cleaned = path.includes('/packages') ? `packages/` + path.split('packages/')[1] : path if (!cleaned.startsWith('packages/')) { - throw new Error( - `[packageChangedFromMainBranch] path=${cleaned} is not a valid package path`, - ); + throw new Error(`[packageChangedFromMainBranch] path=${cleaned} is not a valid package path`) } - console.info(`[packageChangedFromMainBranch] path=${cleaned}`); + console.info(`[packageChangedFromMainBranch] path=${cleaned}`) try { - const diff = await exec(`git diff --quiet origin/main -- ${cleaned}`); - return false; - } catch (e) { + const diff = await exec(`git diff --quiet origin/main -- ${cleaned}`) + return false + } + catch (e) { if ((e as ExecException).code === 1) { - return true; + return true } - throw e; + throw e } -}; +} /** * Validates the package before publishing. @@ -75,34 +62,25 @@ const packageChangedFromMainBranch = async (path: string): Promise => { * throws if validation fails. * @param path path of package to run pre-publishing checks for */ -export const packagePrePublishChecks = async ( - path: string, -): Promise => { - console.info(`[packagePrePublishValidation] path=${path}`); +export const packagePrePublishChecks = async (path: string): Promise => { + console.info(`[packagePrePublishValidation] path=${path}`) - assert(path, '[packagePrePublishValidation] parameter "path" is required'); + assert(path, '[packagePrePublishValidation] parameter "path" is required') - const { name: packageName, version: currentVersion } = - await readPackageJson(path); - const latestPublishedVersion = await getLatestPublishedVersion(packageName); - const currentVersionAlreadyPublished = - latestPublishedVersion !== null && - currentVersion === latestPublishedVersion; + const { name: packageName, version: currentVersion } = await readPackageJson(path) + const latestPublishedVersion = await getLatestPublishedVersion(packageName) + const currentVersionAlreadyPublished = latestPublishedVersion !== null && currentVersion === latestPublishedVersion if (currentVersionAlreadyPublished) { - const packageChanged = await packageChangedFromMainBranch(path); + const packageChanged = await packageChangedFromMainBranch(path) if (packageChanged) { - throw new Error( - `[packagePrePublishValidation] package version not incremented, path=${path}, version=${currentVersion}`, - ); + throw new Error(`[packagePrePublishValidation] package version not incremented, path=${path}, version=${currentVersion}`) } - console.info( - `[packagePrePublishValidation] package already published, path=${path}, version=${currentVersion}`, - ); - return true; + console.info(`[packagePrePublishValidation] package already published, path=${path}, version=${currentVersion}`) + return true } - return false; -}; + return false +} diff --git a/tools/scripts/utils/publish-nx-project.ts b/tools/scripts/utils/publish-nx-project.ts index 8bc68e9048..ebe01236fd 100644 --- a/tools/scripts/utils/publish-nx-project.ts +++ b/tools/scripts/utils/publish-nx-project.ts @@ -1,12 +1,12 @@ -import assert from 'node:assert'; -import { argv } from 'node:process'; -import { exec } from './exec'; -import { readPackageJson, readProjectJson } from './files'; -import { packagePrePublishChecks } from './package-pre-publish-checks'; +import assert from 'node:assert' +import { argv } from 'node:process' +import { exec } from './exec' +import { readPackageJson, readProjectJson } from './files' +import { packagePrePublishChecks } from './package-pre-publish-checks' export const publishNxProject = async (path: string): Promise => { - console.info(`[publishNxProject] path=${path}`); - assert(path, '[publishNxProject] parameter "path" is required'); + console.info(`[publishNxProject] path=${path}`) + assert(path, '[publishNxProject] parameter "path" is required') const packageAlreadyPublished = await packagePrePublishChecks(path); @@ -14,30 +14,30 @@ export const publishNxProject = async (path: string): Promise => { return; } - const { version } = await readPackageJson(path); - const { name: nxProjectName } = await readProjectJson(path); + const { version } = await readPackageJson(path) + const { name: nxProjectName } = await readProjectJson(path) const nxPublishProjectCommand = ` node tools/scripts/publish.mjs \ ${nxProjectName} \ ${version} \ latest - `; + ` - await exec(nxPublishProjectCommand); + await exec(nxPublishProjectCommand) - console.info(`[publishNxProject] success, path=${path}, version=${version}`); -}; + console.info(`[publishNxProject] success, path=${path}, version=${version}`) +} const main = async (): Promise => { - const path = argv[2]; - await publishNxProject(path); -}; + const path = argv[2] + await publishNxProject(path) +} /* * module is entrypoint, not imported i.e. invoked directly * see https://nodejs.org/api/modules.html#modules_accessing_the_main_module */ if (require.main === module) { - main(); + main() } diff --git a/tools/scripts/validate-publishable-packages.ts b/tools/scripts/validate-publishable-packages.ts index b039dd6bdf..ced40f8f13 100644 --- a/tools/scripts/validate-publishable-packages.ts +++ b/tools/scripts/validate-publishable-packages.ts @@ -2,18 +2,18 @@ import { findAllBlocksDirectoryInSource } from './utils/block-script-utils'; import { packagePrePublishChecks } from './utils/package-pre-publish-checks'; const main = async () => { - const blocksMetadata = await findAllBlocksDirectoryInSource(); + const blocksMetadata = await findAllBlocksDirectoryInSource() const packages = [ ...blocksMetadata, 'packages/blocks/framework', 'packages/shared', 'packages/blocks/common', - ]; + ] - const validationResults = packages.map((p) => packagePrePublishChecks(p)); + const validationResults = packages.map(p => packagePrePublishChecks(p)) Promise.all(validationResults); -}; +} main(); From d9988c401222d82fe1c50f9bf6fb0d86d9896814 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcelo=20Gon=C3=A7alves?= Date: Tue, 11 Aug 2026 13:10:28 +0100 Subject: [PATCH 7/9] Keep per-save error logging in save-payloads Corrects the earlier fix in this branch. The original defect was not that the saves went unawaited - the route returns immediately both before and after, so nothing was ever awaited. The defect was that `rejectedPromiseHandler(Promise.all(savePayloads))` was dead code: the mapped values were already void, so the aggregate could never see a rejection. The earlier fix passed the real promises to Promise.all, which made the aggregate live but reports only the first rejection, losing a log line per additional failed save. This keeps one handler per save, so every failure is logged, and drops the pointless aggregate. Co-Authored-By: Claude Opus 5 (1M context) --- .../api/src/app/workers/worker-controller.ts | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/server/api/src/app/workers/worker-controller.ts b/packages/server/api/src/app/workers/worker-controller.ts index 638f099f02..1d35dc4fa2 100644 --- a/packages/server/api/src/app/workers/worker-controller.ts +++ b/packages/server/api/src/app/workers/worker-controller.ts @@ -113,15 +113,19 @@ export const flowWorkerController: FastifyPluginAsyncTypebox = async (app) => { }, async (request) => { const { flowId, projectId, payloads } = request.body; - const savePayloads = payloads.map((payload) => - triggerEventService.saveEvent({ - flowId, - payload, - projectId, - input: {}, - }), + // Fire and forget, one handler per save so every failure is logged. The + // previous `rejectedPromiseHandler(Promise.all(...))` was dead code: the + // mapped values were already void, so the aggregate never saw a rejection. + payloads.forEach((payload) => + rejectedPromiseHandler( + triggerEventService.saveEvent({ + flowId, + payload, + projectId, + input: {}, + }), + ), ); - rejectedPromiseHandler(Promise.all(savePayloads)); return {}; }, ); From c39b751f79ae02cc0856caea857690bff6a5e58a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcelo=20Gon=C3=A7alves?= Date: Tue, 11 Aug 2026 13:18:45 +0100 Subject: [PATCH 8/9] WIP --- packages/server/api/src/app/workers/worker-controller.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/server/api/src/app/workers/worker-controller.ts b/packages/server/api/src/app/workers/worker-controller.ts index 1d35dc4fa2..f990ced263 100644 --- a/packages/server/api/src/app/workers/worker-controller.ts +++ b/packages/server/api/src/app/workers/worker-controller.ts @@ -113,10 +113,7 @@ export const flowWorkerController: FastifyPluginAsyncTypebox = async (app) => { }, async (request) => { const { flowId, projectId, payloads } = request.body; - // Fire and forget, one handler per save so every failure is logged. The - // previous `rejectedPromiseHandler(Promise.all(...))` was dead code: the - // mapped values were already void, so the aggregate never saw a rejection. - payloads.forEach((payload) => + const savePayloads = payloads.map((payload) => rejectedPromiseHandler( triggerEventService.saveEvent({ flowId, @@ -126,6 +123,7 @@ export const flowWorkerController: FastifyPluginAsyncTypebox = async (app) => { }), ), ); + rejectedPromiseHandler(Promise.all(savePayloads)); return {}; }, ); From fb54561156d9123bed51b46f32511367fbb58aee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcelo=20Gon=C3=A7alves?= Date: Tue, 11 Aug 2026 13:52:38 +0100 Subject: [PATCH 9/9] WIP --- packages/server/api/src/app/workers/worker-controller.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 {}; }, );