{ "$schema": "./node_modules/oxlint/configuration_schema.json", "plugins": ["typescript", "import", "unicorn", "promise"], "jsPlugins": ["@e18e/eslint-plugin"], "categories": { "correctness": "error", "suspicious": "warn", "perf": "warn" }, "rules": { "no-await-in-loop": "off", "no-unused-vars": [ "warn", { "argsIgnorePattern": "^_", "varsIgnorePattern": "^_" } ], "unicorn/filename-case": "off", "unicorn/no-null": "off", "unicorn/prefer-add-event-listener": "off", "typescript/no-unsafe-type-assertion": "warn", "typescript/unbound-method": "off", "typescript/no-unnecessary-boolean-literal-compare": "off", // Noisy/stylistic rules added in newer oxlint. Disabled while we triage them // (see https://github.com/emdash-cms/emdash/issues — track follow-ups before // re-enabling). "no-underscore-dangle": "off", "typescript/consistent-return": "off", "typescript/no-unnecessary-type-conversion": "off", "typescript/no-unnecessary-type-parameters": "off", // The rule degrades to an unactionable error on configs without // strictNullChecks (the test plugins under packages/plugins/*-test/). "typescript/no-useless-default-assignment": "off", "import/no-named-as-default": "off", "import/no-unassigned-import": [ "warn", { "allow": ["**/*.css", "@testing-library/react", "vitest-browser-react"] } ], "e18e/prefer-array-at": "error", "e18e/prefer-array-fill": "error", "e18e/prefer-includes": "error", "e18e/prefer-array-to-reversed": "error", "e18e/prefer-array-to-sorted": "error", "e18e/prefer-array-to-spliced": "error", "e18e/prefer-nullish-coalescing": "error", "e18e/prefer-object-has-own": "error", "e18e/prefer-spread-syntax": "error", "e18e/prefer-url-canparse": "error", "e18e/ban-dependencies": "error", "e18e/prefer-array-from-map": "error", "e18e/prefer-timer-args": "error", "e18e/prefer-date-now": "error", "e18e/prefer-regex-test": "error", "e18e/prefer-array-some": "error", "e18e/prefer-static-regex": "error" }, "overrides": [ { "files": [ "**/*.test.ts", "**/*.test.tsx", "**/tests/**/*.ts", "**/tests/**/*.tsx", "packages/atproto-test-utils/**/*.ts" ], "rules": { "typescript/no-unsafe-type-assertion": "off", "typescript/no-unnecessary-type-assertion": "off", "unicorn/consistent-function-scoping": "off", "e18e/prefer-static-regex": "off" } }, { "files": [ "**/database/repositories/content.ts", "**/database/repositories/comment.ts", "**/database/repositories/user.ts", "**/mcp/server.ts", "**/client/index.ts", "**/client/transport.ts", "**/client/portable-text.ts", "**/cli/**/*.ts", "packages/plugin-cli/src/bundle/api.ts", "packages/plugin-cli/src/bundle/utils.ts", "packages/plugin-cli/src/bundle/command.ts", "packages/plugin-cli/src/bundle/types.ts", "packages/plugin-cli/src/oauth.ts", "packages/plugin-cli/src/publish/api.ts", "packages/plugin-cli/src/commands/publish.ts", "packages/registry-client/src/publishing/index.ts", "**/api/handlers/api-tokens.ts", "**/api/handlers/device-flow.ts", "**/api/handlers/oauth-authorization.ts", "**/api/handlers/comments.ts", "**/routes/api/oauth/token.ts", "**/routes/api/comments/**/*.ts", "**/routes/api/admin/comments/**/*.ts", "**/routes/api/plugins/**/*.ts", "**/plugins/hooks.ts", "**/plugins/context.ts", "**/plugins/cron.ts", "**/plugins/define-plugin.ts", "**/plugins/request-meta.ts", "**/seed/load.ts", "**/comments/notifications.ts", "**/astro/integration/index.ts", "packages/plugins/**/*.ts", "packages/plugins/**/*.tsx", "packages/blocks/**/*.tsx", "packages/admin/**/*.tsx" ], "rules": { "typescript/no-unsafe-type-assertion": "off" } } ], "ignorePatterns": [ "**/dist/**", "**/node_modules/**", "**/*.d.ts", "**/src/generated/**", "skills/**/scaffold/**", ".agents/skills/**/scaffold/**", ".claude/skills/**/scaffold/**", "scripts/query-dumps/**", ".flue/**" ] }