{ "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", "files": { "includes": [ "**", "!**/.pnpm-store", "!**/.terraform", "!**/coverage", "!**/dist", "!**/.next", "!**/node_modules", "!**/vite.*.ts.timestamp-*", "!**/*.grit", "!**/turbo.json", "!**/.devcontainer", "!**/.stylelintrc.json", "!**/package.json", "!**/*.vendor-styles.prebuilt.*", "!.turbo", "!.vscode", "!.claude", "!tsconfig.base.json", "!apps/app/src/styles/prebuilt", "!apps/app/next-env.d.ts", "!apps/app/tmp", "!apps/pdf-converter/specs", "!apps/slackbot-proxy/src/public/bootstrap", "!packages/pdf-converter-client/src/index.ts", "!packages/pdf-converter-client/specs" ] }, "formatter": { "enabled": true, "indentStyle": "space" }, "assist": { "actions": { "source": { "organizeImports": { "level": "on", "options": { "groups": [ ["react", "react/**"], ["next", "next/**"], [":NODE:", ":PACKAGE:"], ":BLANK_LINE:", ["@/**", "^/**"], ":BLANK_LINE:", "~/**", ":BLANK_LINE:", [ ":PATH:", "!../**/*.css", "!./*.css", "!../**/*.scss", "!./*.scss" ], ":BLANK_LINE:", ["../**/*.scss", "../**/*.css"], ["./*.scss", "./*.css"] ] } } } } }, "linter": { "enabled": true, "rules": { "recommended": true, "style": { "useThrowOnlyError": "error", "noParameterAssign": "warn", "noDefaultExport": "warn" }, "suspicious": { "noConsole": "error", "noAlert": "error", "noVar": "error", "useAwait": "warn" }, "performance": { "noAwaitInLoops": "warn" }, "correctness": { "useUniqueElementIds": "warn" }, "nursery": { "useMaxParams": "warn" } } }, "javascript": { "formatter": { "quoteStyle": "single" }, "parser": { "unsafeParameterDecoratorsEnabled": true } }, "overrides": [ { "includes": ["**/vite*.config.ts", "vitest*.config.ts"], "linter": { "rules": { "style": { "noDefaultExport": "off" } } } }, { "includes": ["bin/**"], "linter": { "rules": { "suspicious": { "noConsole": "off" } } } }, { "includes": ["bin/data-migrations/**"], "linter": { "rules": { "suspicious": { "noVar": "off" }, "correctness": { "noInnerDeclarations": "off" } } } }, { "includes": ["apps/pdf-converter/**", "./apps/slackbot-proxy/**"], "linter": { "rules": { "style": { "useImportType": "off" } } } }, { "includes": ["apps/app/**"], "linter": { "rules": { "style": { "noRestrictedImports": { "level": "error", "options": { "paths": { "axios": "Please use src/utils/axios instead." } } } } } } }, { "includes": [ "apps/app/src/stores-universal/**", "apps/app/src/utils/**", "apps/app/src/models/**", "apps/app/src/services/**", "apps/app/src/pages/**", "apps/app/src/server/**", "apps/app/src/components/**" ], "linter": { "rules": { "style": { "noRestrictedImports": { "level": "error", "options": { "paths": { "axios": "Please use src/utils/axios instead." }, "patterns": [ { "group": ["~/client/**", "**/client/**", "client/**"], "message": "Importing from client/ directories is restricted." } ] } } } } } }, { "includes": ["apps/app/src/server/models/**"], "plugins": ["apps/app/src/server/models/.biome/plugins/no-populate.grit"] } ] }