{ "$schema": "./node_modules/oxlint/configuration_schema.json", "plugins": ["typescript", "import", "unicorn"], "jsPlugins": ["../twenty-oxlint-rules/dist/oxlint-plugin.mjs"], "options": { "typeAware": true }, "categories": { "correctness": "off" }, "ignorePatterns": [ "node_modules", "dist", ".local-storage", "src/engine/workspace-manager/dev-seeder/data/constants/**", "src/engine/workspace-manager/dev-seeder/data/seeds/**", "src/utils/email-providers.ts", "src/engine/core-modules/i18n/locales/generated/**", "src/engine/core-modules/logic-function/logic-function-resource/constants/seed-project/src/index.ts", "src/engine/metadata-modules/front-component/constants/seed-project/**", "src/engine/core-modules/upgrade/constants/twenty-current-version.constant.ts", "src/engine/core-modules/upgrade/constants/twenty-previous-versions.constant.ts", "src/engine/core-modules/upgrade/constants/twenty-next-versions.constant.ts" ], "rules": { "func-style": ["error", "declaration", { "allowArrowFunctions": true }], "no-console": [ "warn", { "allow": ["group", "groupCollapsed", "groupEnd"] } ], "no-control-regex": "off", "no-debugger": "error", "no-duplicate-imports": "error", "no-undef": "off", "no-unused-vars": "off", "no-redeclare": "off", "no-restricted-imports": [ "error", { "paths": [ { "name": "twenty-shared/i18n", "importNames": ["generateMessageId"], "message": "Provider-owned metadata strings must resolve through resolveEffectiveEntityProperty, which owns the catalog lookup. Hashing message ids by hand is how the per-entity resolvers drifted apart." }, { "name": "src/engine/core-modules/i18n/utils/translate-standard-label.util", "message": "Call resolveEffectiveEntityProperty instead: it arbitrates overrides and overrides.translations before delegating here." } ], "patterns": [ { "group": ["**../"], "message": "Relative imports are not allowed." }, { "group": ["lodash"], "message": "Please use the standalone lodash package (for instance: `import groupBy from 'lodash.groupby'` instead of `import { groupBy } from 'lodash'`)" } ] } ], "import/no-duplicates": "error", "typescript/no-redeclare": "error", "typescript/ban-ts-comment": "error", "typescript/consistent-type-imports": "off", "typescript/explicit-function-return-type": "off", "typescript/explicit-module-boundary-types": "off", "typescript/no-empty-object-type": [ "error", { "allowInterfaces": "with-single-extends" } ], "typescript/no-empty-function": "off", "typescript/no-explicit-any": "warn", "typescript/no-floating-promises": "error", "typescript/no-misused-promises": "error", "typescript/no-unused-vars": [ "warn", { "vars": "all", "varsIgnorePattern": "^_", "args": "after-used", "argsIgnorePattern": "^_" } ], "twenty/inject-workspace-repository": "warn", "twenty/prefer-workspace-scoped-repository": "error", "twenty/rest-api-methods-should-be-guarded": "error", "twenty/graphql-resolvers-should-be-guarded": "error", "twenty/upgrade-command-filename": "error", "twenty/no-data-mutation-in-fast-instance-command": "error", "twenty/no-icu-escaping-apostrophe": "error", "twenty/no-miscased-acronym-in-message": "error", "twenty/enforce-module-boundaries": [ "error", { "depConstraints": [ { "sourceTag": "scope:backend", "onlyDependOnLibsWithTags": ["scope:shared", "scope:backend"] } ] } ] }, "overrides": [ { "files": [ "**/*.spec.ts", "**/*.integration-spec.ts", "**/__tests__/**", "**/test/**" ], "rules": { "typescript/no-explicit-any": "off" } }, { "files": ["**/constants/*.ts", "**/*.constants.ts"], "rules": { "twenty/max-consts-per-file": "off" } }, { "files": [ "src/engine/core-modules/i18n/utils/translate-standard-label.util.ts", "src/engine/core-modules/tool-provider/**", "src/engine/metadata-modules/overrides/utils/resolve-effective-entity-property.util.ts", "src/engine/metadata-modules/overrides/utils/__tests__/**", "src/engine/core-modules/i18n/utils/__tests__/**", "src/engine/workspace-manager/twenty-standard-application/__tests__/**", "test/**" ], "rules": { "no-restricted-imports": [ "error", { "patterns": [ { "group": ["**../"], "message": "Relative imports are not allowed." }, { "group": ["lodash"], "message": "Please use the standalone lodash package (for instance: `import groupBy from 'lodash.groupby'` instead of `import { groupBy } from 'lodash'`)" } ] } ] } } ] }