{"_id":"@dunggramer/biomejs-config","_rev":"6-ef13d2685797efb9fa5673b45824c1e3","name":"@dunggramer/biomejs-config","dist-tags":{"latest":"1.1.3"},"versions":{"1.0.0":{"name":"@dunggramer/biomejs-config","version":"1.0.0","keywords":["biome","biome-config","biomejs","shareable-config","linter","formatter","code-quality","javascript","typescript","react","format","lint","formatting","formatting-rules","standard"],"author":{"url":"https://dunggramer.com","name":"DungGramer","email":"dung.dev.gramer@gmail.com"},"license":"MIT","_id":"@dunggramer/biomejs-config@1.0.0","maintainers":[{"name":"dunggramer","email":"dung.dev.gramer@gmail.com"}],"homepage":"https://github.com/DungGramer/biomejs-config","bugs":{"url":"https://github.com/DungGramer/biomejs-config/issues"},"dist":{"shasum":"328ced841eaed9d5bbe223f640cfee239b98229a","tarball":"https://registry.npmjs.org/@dunggramer/biomejs-config/-/biomejs-config-1.0.0.tgz","fileCount":6,"integrity":"sha512-WSKDOHLTO6x3I0rW4HtsTy+ZbN6vKvHE0b5iYGVIsTtgSU5C6wuIGM43bL7LWWQOonscCehV92OI89MykUxeww==","signatures":[{"sig":"MEYCIQDeFUu1ic7Sm9BpVFYHhc5MLDKX3NqUvFHC0AALEvLGVAIhAKooxzYmkpO5XbJYulnufit0QoPxR/D4y1P7OYkFdCjw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30360},"main":"biome.jsonc","engines":{"node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/DungGramer","type":"individual"},"gitHead":"53b5300accb3eccb5a1d8f33ddbac5bde9148b79","scripts":{"lint":"biome lint .","check":"biome check --write .","format":"biome format --write .","version":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md","validate":"npx npm-packlist-cli","prepublishOnly":"pnpm run validate"},"_npmUser":{"name":"dunggramer","email":"dung.dev.gramer@gmail.com"},"repository":{"url":"git+https://github.com/DungGramer/biomejs-config.git","type":"git"},"_npmVersion":"10.9.0","description":"The shareable configuration for Biome in your project","directories":{},"_nodeVersion":"22.12.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.20.0","devDependencies":{"husky":"^9.0.0","@biomejs/biome":"^2.3.4","@commitlint/cli":"^19.0.0","semantic-release":"^23.0.0","@semantic-release/git":"^10.0.1","conventional-changelog-cli":"^5.0.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^19.0.0"},"peerDependencies":{"@biomejs/biome":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/biomejs-config_1.0.0_1762768554059_0.930354210865544","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@dunggramer/biomejs-config","version":"1.1.1","keywords":["biome","biome-config","biomejs","shareable-config","linter","formatter","code-quality","javascript","typescript","react","format","lint","formatting","formatting-rules","standard"],"author":{"url":"https://dunggramer.com","name":"DungGramer","email":"dung.dev.gramer@gmail.com"},"license":"MIT","_id":"@dunggramer/biomejs-config@1.1.1","maintainers":[{"name":"dunggramer","email":"dung.dev.gramer@gmail.com"}],"homepage":"https://github.com/DungGramer/biomejs-config","bugs":{"url":"https://github.com/DungGramer/biomejs-config/issues"},"dist":{"shasum":"ea73e19df269dd3dcb6ce50870eacfe638ba1ff4","tarball":"https://registry.npmjs.org/@dunggramer/biomejs-config/-/biomejs-config-1.1.1.tgz","fileCount":6,"integrity":"sha512-QyPc0KOwEAbCNnUJ3LOn7X1k83N80vpqKqjRC1Ueb40V3HsHRgpQ/7FGv1ypB7z2tMzLJIyHf5HYrPeY8tkmiA==","signatures":[{"sig":"MEUCIQDv+AcrBg79aXU7ARvPEfqFfpcnJuCfXp9Xqepma+LPgQIgGlE8FxV/XxFAjv1sBswyC5xJ5xd25Hhbd0ppRp9UKgM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dunggramer%2fbiomejs-config@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":43956},"main":"biome.jsonc","engines":{"node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/DungGramer","type":"individual"},"gitHead":"904f144facefabeddcba8067b41eba5f32210e84","scripts":{"check":"biome check .","format":"biome format . --write","version":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md","validate":"npx npm-packlist-cli","prepublishOnly":"pnpm run validate"},"_npmUser":{"name":"dunggramer","email":"dung.dev.gramer@gmail.com"},"repository":{"url":"git+https://github.com/DungGramer/biomejs-config.git","type":"git"},"_npmVersion":"10.8.2","description":"The shareable configuration for Biome in your project","directories":{},"_nodeVersion":"20.19.5","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.20.0","devDependencies":{"husky":"^9.0.0","@biomejs/biome":"^2.3.5","@commitlint/cli":"^19.0.0","semantic-release":"^23.0.0","@semantic-release/git":"^10.0.1","conventional-changelog-cli":"^5.0.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^19.0.0"},"peerDependencies":{"@biomejs/biome":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/biomejs-config_1.1.1_1763137996060_0.9642986040759569","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@dunggramer/biomejs-config","version":"1.1.2","keywords":["biome","biome-config","biomejs","shareable-config","linter","formatter","code-quality","javascript","typescript","react","format","lint","formatting","formatting-rules","standard"],"author":{"url":"https://dunggramer.com","name":"DungGramer","email":"dung.dev.gramer@gmail.com"},"license":"MIT","_id":"@dunggramer/biomejs-config@1.1.2","maintainers":[{"name":"dunggramer","email":"dung.dev.gramer@gmail.com"}],"homepage":"https://github.com/DungGramer/biomejs-config","bugs":{"url":"https://github.com/DungGramer/biomejs-config/issues"},"dist":{"shasum":"ca618d0ee82a6eaa30087b93adfdc60329440ca2","tarball":"https://registry.npmjs.org/@dunggramer/biomejs-config/-/biomejs-config-1.1.2.tgz","fileCount":6,"integrity":"sha512-0YWp8iZ+bSTNMnTUBuWjCWjcxPOWUguqxtSSNsr/seIxETrF4LAnBYr6wwoTi2wq7NQWdOEIIZ40mtdtNgnRwA==","signatures":[{"sig":"MEUCIQC6NGtbAy02PtifkFxXak38qAduLsUA3Ocx0qLLuaBPtwIgL0xt0/7agv18pZySy2GnShhNjeYqMhT2KgF0DRnu2ss=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dunggramer%2fbiomejs-config@1.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44675},"main":"biome.jsonc","engines":{"node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/DungGramer","type":"individual"},"gitHead":"3714fd3cc66754fea6681b82f8bae17b79a28f5e","scripts":{"check":"biome check .","format":"biome format . --write","version":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md","validate":"npx npm-packlist-cli","prepublishOnly":"pnpm run validate"},"_npmUser":{"name":"dunggramer","email":"dung.dev.gramer@gmail.com"},"repository":{"url":"git+https://github.com/DungGramer/biomejs-config.git","type":"git"},"_npmVersion":"10.8.2","description":"The shareable configuration for Biome in your project","directories":{},"_nodeVersion":"20.19.5","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.20.0","devDependencies":{"husky":"^9.0.0","@biomejs/biome":"^2.3.5","@commitlint/cli":"^19.0.0","semantic-release":"^23.0.0","@semantic-release/git":"^10.0.1","conventional-changelog-cli":"^5.0.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^19.0.0"},"peerDependencies":{"@biomejs/biome":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/biomejs-config_1.1.2_1763367487332_0.6721740260362206","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@dunggramer/biomejs-config","version":"1.1.3","description":"The shareable configuration for Biome in your project","homepage":"https://github.com/DungGramer/biomejs-config","bugs":{"url":"https://github.com/DungGramer/biomejs-config/issues"},"repository":{"type":"git","url":"git+https://github.com/DungGramer/biomejs-config.git"},"author":{"name":"DungGramer","email":"dung.dev.gramer@gmail.com","url":"https://dunggramer.com"},"license":"MIT","main":"biome.jsonc","engines":{"node":">=18.0.0"},"peerDependencies":{"@biomejs/biome":"^2.0.0"},"scripts":{"prepublishOnly":"pnpm run validate","validate":"npx npm-packlist-cli","format":"biome format . --write","check":"biome check .","version":"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"},"packageManager":"pnpm@10.20.0","devDependencies":{"@biomejs/biome":"^2.3.5","@commitlint/cli":"^19.0.0","@commitlint/config-conventional":"^19.0.0","@semantic-release/changelog":"^6.0.3","@semantic-release/git":"^10.0.1","conventional-changelog-cli":"^5.0.0","husky":"^9.0.0","semantic-release":"^23.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"funding":{"type":"individual","url":"https://github.com/sponsors/DungGramer"},"keywords":["biome","biome-config","biomejs","shareable-config","linter","formatter","code-quality","javascript","typescript","react","format","lint","formatting","formatting-rules","standard"],"_id":"@dunggramer/biomejs-config@1.1.3","gitHead":"d2a466512cbf168ec823e7ee1f02b87332316836","_nodeVersion":"20.19.5","_npmVersion":"10.8.2","dist":{"integrity":"sha512-otfNuSJ/p1uoFu1BOeVzph/wXZ4GySq3YBSebeZxsDAXE44lKwPWKCEEM0n/sK+woLIRXi2ooYiTzphAgyzfgw==","shasum":"e5bb462fe395da6be7883c660fa3700597672e80","tarball":"https://registry.npmjs.org/@dunggramer/biomejs-config/-/biomejs-config-1.1.3.tgz","fileCount":6,"unpackedSize":45321,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dunggramer%2fbiomejs-config@1.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDtTfaKYiILUnzk1kvM3gMzB0QVsA4PrES4c2u7LntuMAIgeTz5qImIUCPZw6rw6x03YqK8t3ktbta4Igs4eYCVESo="}]},"_npmUser":{"name":"dunggramer","email":"dung.dev.gramer@gmail.com"},"directories":{},"maintainers":[{"name":"dunggramer","email":"dung.dev.gramer@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/biomejs-config_1.1.3_1763518856122_0.9083224458507875"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-10T09:55:53.960Z","modified":"2025-11-19T02:20:56.774Z","1.0.0":"2025-11-10T09:55:54.255Z","1.1.0":"2025-11-14T12:19:27.529Z","1.1.1":"2025-11-14T16:33:16.274Z","1.1.2":"2025-11-17T08:18:07.520Z","1.1.3":"2025-11-19T02:20:56.312Z"},"bugs":{"url":"https://github.com/DungGramer/biomejs-config/issues"},"author":{"name":"DungGramer","email":"dung.dev.gramer@gmail.com","url":"https://dunggramer.com"},"license":"MIT","homepage":"https://github.com/DungGramer/biomejs-config","keywords":["biome","biome-config","biomejs","shareable-config","linter","formatter","code-quality","javascript","typescript","react","format","lint","formatting","formatting-rules","standard"],"repository":{"type":"git","url":"git+https://github.com/DungGramer/biomejs-config.git"},"description":"The shareable configuration for Biome in your project","maintainers":[{"name":"dunggramer","email":"dung.dev.gramer@gmail.com"}],"readme":"# @dunggramer/biomejs-config\n\n> Shareable [Biome](https://biomejs.dev) configuration for JavaScript, TypeScript, and React projects\n\n[![npm version](https://badge.fury.io/js/@dunggramer%2Fbiomejs-config.svg)](https://www.npmjs.com/package/@dunggramer/biomejs-config)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![CI](https://github.com/DungGramer/biomejs-config/actions/workflows/ci.yml/badge.svg)](https://github.com/DungGramer/biomejs-config/actions)\n\nA comprehensive, opinionated Biome configuration that provides consistent code formatting and linting rules for modern JavaScript and TypeScript projects. This configuration emphasizes code quality, security, and maintainability while remaining flexible enough to customize for your specific needs.\n\n## Features\n\n- **🎯 Opinionated but flexible** - Sensible defaults with easy customization\n- **⚡️ Fast** - Powered by Biome's Rust-based tooling\n- **🔒 Security-focused** - Strict rules for common security pitfalls\n- **📦 React-ready** - Includes React-specific linting rules\n- **🧪 Test-friendly** - Special configurations for test files\n- **🎨 Consistent formatting** - 2 spaces, single quotes, trailing commas\n- **💅 CSS/Tailwind support** - Full CSS formatting with Tailwind directives\n- **🤖 Auto-organize** - Imports, attributes, and class names sorted automatically\n- **📝 Multi-language** - JavaScript, TypeScript, CSS, HTML, JSON/JSONC support\n\n## Installation\n\nInstall the package along with Biome:\n\n```bash\n# Using npm\nnpm install -D @dunggramer/biomejs-config @biomejs/biome\n\n# Using pnpm\npnpm add -D @dunggramer/biomejs-config @biomejs/biome\n\n# Using yarn\nyarn add -D @dunggramer/biomejs-config @biomejs/biome\n```\n\n## Quick Start\n\nCreate a `biome.jsonc` file in your project root:\n\n```jsonc\n{\n  \"$schema\": \"https://biomejs.dev/schemas/latest/schema.json\",\n  \"extends\": [\"@dunggramer/biomejs-config\"]\n}\n```\n\nAdd scripts to your `package.json`:\n\n```json\n{\n  \"scripts\": {\n    \"format\": \"biome format --write .\",\n    \"lint\": \"biome lint .\",\n    \"check\": \"biome check --write .\"\n  }\n}\n```\n\nThat's it! Your project is now configured with comprehensive formatting and linting rules.\n\n## VSCode Integration\n\nFor the best developer experience, install the [Biome VSCode extension](https://marketplace.visualstudio.com/items?itemName=biomejs.biome) and configure your `.vscode/settings.json`:\n\n```jsonc\n{\n  // Enable Biome as the default formatter\n  \"editor.defaultFormatter\": \"biomejs.biome\",\n\n  // Format on save\n  \"editor.formatOnSave\": true,\n\n  // Auto-fix on save\n  \"editor.codeActionsOnSave\": {\n    \"source.organizeImports.biome\": \"explicit\",\n    \"source.fixAll.biome\": \"explicit\",\n    \"quickfix.biome\": \"explicit\",\n    \"addMissingImports\": \"explicit\",\n    \"source.action.useSortedAttributes.biome\": \"explicit\",\n    \"source.action.useSortedProperties.biome\": \"explicit\",\n  },\n\n  // Disable other formatters to avoid conflicts\n  \"[javascript]\": {\n    \"editor.defaultFormatter\": \"biomejs.biome\"\n  },\n  \"[javascriptreact]\": {\n    \"editor.defaultFormatter\": \"biomejs.biome\"\n  },\n  \"[typescript]\": {\n    \"editor.defaultFormatter\": \"biomejs.biome\"\n  },\n  \"[typescriptreact]\": {\n    \"editor.defaultFormatter\": \"biomejs.biome\"\n  },\n  \"[json]\": {\n    \"editor.defaultFormatter\": \"biomejs.biome\"\n  },\n  \"[jsonc]\": {\n    \"editor.defaultFormatter\": \"biomejs.biome\"\n  },\n  \"[css]\": {\n    \"editor.defaultFormatter\": \"biomejs.biome\"\n  }\n}\n```\n\n## Recommended Customizations for Your Project\n\nDepending on your project type and team preferences, you may want to customize these settings:\n\n### 1. **VCS Branch Name**\nIf your repository uses `master` instead of `main` (or another branch):\n\n```jsonc\n{\n  \"extends\": [\"@dunggramer/biomejs-config\"],\n  \"vcs\": {\n    \"defaultBranch\": \"master\"  // or \"develop\", \"trunk\", etc.\n  }\n}\n```\n\n### 2. **Console Usage**\nThe default allows `console.log`. For production apps, you may want stricter rules:\n\n```jsonc\n{\n  \"extends\": [\"@dunggramer/biomejs-config\"],\n  \"linter\": {\n    \"rules\": {\n      \"suspicious\": {\n        \"noConsole\": \"error\"  // Block all console usage\n        // Or allow specific methods:\n        // \"noConsole\": { \"level\": \"error\", \"options\": { \"allow\": [\"warn\", \"error\"] } }\n      }\n    }\n  }\n}\n```\n\n### 3. **Default Exports**\nIf your team prefers named exports everywhere:\n\n```jsonc\n{\n  \"extends\": [\"@dunggramer/biomejs-config\"],\n  \"linter\": {\n    \"rules\": {\n      \"style\": {\n        \"noDefaultExport\": \"error\"  // Enforce named exports\n      }\n    }\n  },\n  // Keep overrides for config files that require default exports\n  \"overrides\": [\n    {\n      \"includes\": [\"**/*.config.*\", \"**/vite.config.ts\", \"**/*.stories.*\"],\n      \"linter\": {\n        \"rules\": {\n          \"style\": { \"noDefaultExport\": \"off\" }\n        }\n      }\n    }\n  ]\n}\n```\n\n### 4. **TypeScript Strictness**\nFor stricter TypeScript projects:\n\n```jsonc\n{\n  \"extends\": [\"@dunggramer/biomejs-config\"],\n  \"linter\": {\n    \"rules\": {\n      \"suspicious\": {\n        \"noExplicitAny\": \"error\"  // Block 'any' type\n      },\n      \"style\": {\n        \"noNonNullAssertion\": \"error\"  // Block '!' assertions\n      }\n    }\n  }\n}\n```\n\n### 5. **Line Width**\nFor larger displays or narrower code style:\n\n```jsonc\n{\n  \"extends\": [\"@dunggramer/biomejs-config\"],\n  \"formatter\": {\n    \"lineWidth\": 120  // Or 80 for more conservative\n  },\n  \"css\": {\n    \"formatter\": {\n      \"lineWidth\": 120  // Keep CSS in sync\n    }\n  }\n}\n```\n\n### 6. **Import Restrictions**\nPrevent barrel file imports or enforce modular lodash:\n\n```jsonc\n{\n  \"extends\": [\"@dunggramer/biomejs-config\"],\n  \"linter\": {\n    \"rules\": {\n      \"style\": {\n        \"noRestrictedImports\": {\n          \"level\": \"error\",\n          \"options\": {\n            \"paths\": {\n              \"lodash\": \"Use lodash/<name> instead.\",\n              \"lodash-es\": \"Use lodash-es/<name> instead.\",\n              \"@/utils\": \"Import specific utilities, not the barrel file.\",\n              \"moment\": \"Use date-fns or dayjs instead.\"\n            }\n          }\n        }\n      }\n    }\n  }\n}\n```\n\n### 7. **Environment-Specific Overrides**\nDifferent rules for different file types:\n\n```jsonc\n{\n  \"extends\": [\"@dunggramer/biomejs-config\"],\n  \"overrides\": [\n    {\n      \"includes\": [\"**/scripts/**\", \"**/tools/**\"],\n      \"linter\": {\n        \"rules\": {\n          \"suspicious\": {\n            \"noConsole\": \"off\"  // Allow console in scripts\n          }\n        }\n      }\n    },\n    {\n      \"includes\": [\"**/*.stories.*\", \"**/*.story.*\"],\n      \"linter\": {\n        \"rules\": {\n          \"suspicious\": {\n            \"noExplicitAny\": \"off\"  // Relax for Storybook files\n          }\n        }\n      }\n    }\n  ]\n}\n```\n\n### 8. **Framework-Specific Globals**\nAdd globals for your testing framework or environment:\n\n```jsonc\n{\n  \"extends\": [\"@dunggramer/biomejs-config\"],\n  \"javascript\": {\n    \"globals\": [\n      // Vitest\n      \"describe\", \"it\", \"expect\", \"vi\", \"beforeEach\", \"afterEach\",\n      // Jest\n      \"jest\",\n      // Node.js\n      \"__dirname\", \"__filename\"\n    ]\n  }\n}\n```\n\n### 9. **Ignore Additional Directories**\nProject-specific build outputs or vendor code:\n\n```jsonc\n{\n  \"extends\": [\"@dunggramer/biomejs-config\"],\n  \"files\": {\n    \"ignore\": [\n      \"**/generated/**\",      // Code generation output\n      \"**/vendor/**\",         // Third-party code\n      \"**/.docusaurus/**\",    // Docusaurus cache\n      \"**/storybook-static/**\" // Storybook build\n    ]\n  }\n}\n```\n\n### 10. **Disable Auto-Organize for Specific Files**\nKeep manual control over import/key order in certain files:\n\n```jsonc\n{\n  \"extends\": [\"@dunggramer/biomejs-config\"],\n  \"overrides\": [\n    {\n      \"includes\": [\"**/theme.ts\", \"**/constants.ts\"],\n      \"assist\": {\n        \"actions\": {\n          \"source\": {\n            \"organizeImports\": \"off\",\n            \"useSortedKeys\": \"off\"\n          }\n        }\n      }\n    }\n  ]\n}\n```\n\n## What's Included\n\n### Formatter Configuration\n\n#### JavaScript/TypeScript\n- **Indentation**: 2 spaces\n- **Line width**: 100 characters\n- **Quotes**: Single quotes\n- **Trailing commas**: ES5 (arrays, objects)\n- **Quote properties**: Preserved\n\n#### CSS\n- **Line width**: 100 characters (matches JS/TS)\n- **Indentation**: 2 spaces\n- **Tailwind directives**: Supported (`@apply`, `@theme`, etc.)\n- **CSS Modules**: Enabled\n- **Line comments**: Allowed (for tooling)\n\n#### HTML\n- **Self-closing void elements**: Always (`<br />`, `<img />`)\n\n#### JSON/JSONC\n- **Indentation**: 2 spaces\n- **Comments**: Allowed in JSONC files\n- **Trailing commas**: Allowed\n- **TSConfig**: Special handling with comments and trailing commas\n\n### Linter Rules\n\nThis configuration enables comprehensive linting across multiple categories:\n\n#### **Correctness Rules** (Strict)\nPrevents common programming errors and enforces correct code patterns:\n- No unused variables or imports\n- Proper React Hook dependencies\n- No unreachable code\n- Valid typeof checks\n- And more...\n\n#### **Security Rules** (Strict)\nProtects against common security vulnerabilities:\n- No dangerouslySetInnerHTML misuse\n- No global eval\n- Enforces secure link targets\n- XSS prevention\n\n#### **Style Rules** (Flexible)\nEnforces consistent code style:\n- Use const when possible\n- Prefer template literals\n- Shorthand array type syntax\n- Import type for TypeScript\n- And more...\n\n#### **Complexity Rules** (Moderate)\nReduces code complexity:\n- No useless constructors or fragments\n- Optional chaining preferred\n- Literal keys over computed keys\n- And more...\n\n#### **Accessibility Rules** (Warnings)\nEnsures web accessibility:\n- Button type attributes\n- Keyboard event handlers\n- Valid anchor usage\n\n#### **Nursery Rules** (Experimental)\nBeta features for improved DX:\n- **Sorted Tailwind classes**: Auto-sort class names in `className`, `classList`, `clsx()`, `cn()`, `cva()`, `tw()`, `twMerge()` for cleaner diffs\n\nSee [CONFIGURATION.md](./CONFIGURATION.md) for detailed explanations of all rules.\n\n### Auto-Organize Features\n\nThe config includes intelligent code organization:\n- **Auto-organize imports**: Deduplicates and sorts import statements\n- **Sorted JSX/HTML attributes**: Normalizes attribute order for stable diffs\n- **Sorted object keys**: Alphabetizes object keys (where safe, see overrides)\n- **Sorted type properties**: Consistent ordering in TypeScript types\n\n### Special File Configurations\n\nThe config includes intelligent overrides for specific file types:\n\n#### Test Files (`*.test.*`, `*.spec.*`)\n- Relaxed `noExplicitAny` rule for flexibility in tests\n\n#### Config Files (`*.config.*`, `vite.config.ts`)\n- Allows default exports (commonly required by bundlers)\n\n#### TSConfig (`tsconfig.json`, `tsconfig.*.json`)\n- Comments and trailing commas allowed\n- Object key sorting disabled (preserves manual order like `compilerOptions` first)\n\n#### Package.json\n- Object key sorting disabled (preserves conventional order)\n\n#### JSON5 Files (`*.json5`)\n- Double quotes enforced\n- No trailing commas (spec compliance)\n\n#### Community Files (`.all-contributorsrc`)\n- Double quotes to match community conventions\n\n### Global Variables\n\nPre-configured global variables for testing:\n- **Cypress**: `cy`, `Cypress`, `before`, `context`, `assert`\n\n### VCS Integration\n\n- Git integration enabled\n- Respects `.gitignore` patterns\n- Default branch: `main`\n- Comprehensive ignore patterns for:\n  - Dependencies: `node_modules`, `.pnpm`, `.yarn`, `.npm`\n  - Build outputs: `dist`, `build`, `.next`, `.nuxt`, `.svelte-kit`, etc.\n  - Framework-specific: `.turbo`, `.parcel-cache`, `.vercel`, `.netlify`\n  - Testing artifacts: `coverage`, `playwright-report`, `test-results`\n\n## Usage Examples\n\n### Format your code\n\n```bash\n# Format all files\npnpm format\n\n# Check formatting without writing\nbiome format .\n```\n\n### Lint your code\n\n```bash\n# Lint with auto-fix\npnpm check\n\n# Lint without auto-fix\npnpm lint\n```\n\n### CI/CD Integration\n\n```yaml\n# .github/workflows/ci.yml\n- name: Check code quality\n  run: biome ci .\n```\n\n## Migration\n\nMigrating from ESLint and Prettier? See our [Migration Guide](./docs/migration.md).\n\n\n## Contributing\n\nContributions are welcome! Please read our [Contributing Guide](./CONTRIBUTING.md) for details on our code of conduct and the process for submitting pull requests.\n\n## Security\n\nIf you discover a security vulnerability, please see our [Security Policy](./SECURITY.md).\n\n## FAQ\n\nSee [FAQ.md](./docs/faq.md) for frequently asked questions.\n\n## License\n\nMIT © [DungGramer](https://dunggramer.com)\n\n## Links\n\n- [npm package](https://www.npmjs.com/package/@dunggramer/biomejs-config)\n- [GitHub repository](https://github.com/DungGramer/biomejs-config)\n- [Issue tracker](https://github.com/DungGramer/biomejs-config/issues)\n- [Biome documentation](https://biomejs.dev)\n\n---\n\nMade with ❤️ by [DungGramer](https://dunggramer.com)\n","readmeFilename":"README.md"}