{"_id":"@ansospace/eslint-config","_rev":"2-d2c1f511c4cef842aec2423959c90233","name":"@ansospace/eslint-config","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.1":{"name":"@ansospace/eslint-config","version":"0.0.1","keywords":["eslint","eslint-config","typescript","sonarjs","react","nextjs","nodejs","express"],"license":"MIT","_id":"@ansospace/eslint-config@0.0.1","maintainers":[{"name":"sahsanjay","email":"sanjay8797421521@gmail.com"}],"homepage":"https://github.com/ansopedia/ansospace#readme","bugs":{"url":"https://github.com/ansopedia/ansospace/issues"},"dist":{"shasum":"508b97c836a8af309d8ccaf308610d209615e789","tarball":"https://registry.npmjs.org/@ansospace/eslint-config/-/eslint-config-0.0.1.tgz","fileCount":7,"integrity":"sha512-XGPHqRTBC8UGJZ06uJ+UHfex9QDagSrwqlf6xBR23DlS7cPeu7tKuwgjpEhumM0o0G9stIPXN/+LowPNnmtFdA==","signatures":[{"sig":"MEUCIQCrS+ZNZvpXipHgx0UqPp2swGBN1lB5ET4vYiV7pG/5iQIgZ5Wrvw8DRa3Ohoi5NWI4KbFLPrNX47F3zuIaIDenPZU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17225},"main":"./base.mjs","type":"module","exports":{"./base":"./base.mjs","./node":"./node.mjs","./react":"./react.mjs","./turbo":"./turbo.mjs","./next-js":"./next.mjs"},"gitHead":"2a90389be73caf8b52ae432d6069d00d27028ba1","_npmUser":{"name":"sahsanjay","email":"sanjay8797421521@gmail.com"},"repository":{"url":"git+https://github.com/ansopedia/ansospace.git","type":"git"},"_npmVersion":"11.7.0","description":"Shared ESLint configuration for AnsoSpace projects with TypeScript, SonarJS, React, Next.js, and Node.js support","directories":{},"_nodeVersion":"24.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.39.2","globals":"16.5.0","@eslint/js":"9.39.2","typescript":"5.9.3","typescript-eslint":"8.51.0","eslint-plugin-react":"7.37.5","eslint-plugin-jsx-a11y":"6.10.2","@typescript-eslint/parser":"8.51.0","eslint-plugin-react-hooks":"7.0.1","@typescript-eslint/eslint-plugin":"8.51.0"},"peerDependencies":{"eslint":"^9.39.2","typescript":"^5.9.3","eslint-plugin-sonarjs":"3.0.5","eslint-config-prettier":"10.1.8"},"optionalDependencies":{"eslint-config-next":"16.1.1","eslint-plugin-turbo":"2.7.2","@next/eslint-plugin-next":"16.1.1"},"peerDependenciesMeta":{"typescript":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_0.0.1_1769083142728_0.43873822978027555","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@ansospace/eslint-config","version":"0.0.2","description":"Shared ESLint configuration for AnsoSpace projects with TypeScript, SonarJS, React, Next.js, and Node.js support","type":"module","main":"./base.mjs","exports":{"./base":"./base.mjs","./next-js":"./next.mjs","./react":"./react.mjs","./node":"./node.mjs","./turbo":"./turbo.mjs"},"keywords":["eslint","eslint-config","typescript","sonarjs","react","nextjs","nodejs","express"],"repository":{"type":"git","url":"git+https://github.com/ansopedia/ansospace.git"},"bugs":{"url":"https://github.com/ansopedia/ansospace/issues"},"license":"MIT","devDependencies":{"@eslint/js":"9.39.2","@typescript-eslint/eslint-plugin":"8.51.0","@typescript-eslint/parser":"8.51.0","eslint":"9.39.2","eslint-plugin-jsx-a11y":"6.10.2","eslint-plugin-react":"7.37.5","eslint-plugin-react-hooks":"7.0.1","globals":"16.5.0","typescript":"5.9.3","typescript-eslint":"8.51.0"},"peerDependencies":{"eslint":"^9.39.2","@eslint/js":"9.39.2","eslint-plugin-sonarjs":"3.0.5","eslint-config-prettier":"10.1.8","typescript":"^5.9.3"},"peerDependenciesMeta":{"typescript":{"optional":true}},"optionalDependencies":{"eslint-plugin-turbo":"2.7.2","eslint-config-next":"16.1.1","@next/eslint-plugin-next":"16.1.1"},"publishConfig":{"access":"public"},"gitHead":"1886d1fc8c5dcf49d157e1cfe1085c089b984306","_id":"@ansospace/eslint-config@0.0.2","homepage":"https://github.com/ansopedia/ansospace#readme","_nodeVersion":"24.7.0","_npmVersion":"11.7.0","dist":{"integrity":"sha512-LBC29hGn9urRpU0NzOmRqJmkpehtXUwu1WbDcOxLoaUsI/LHeMYrhIRVdQpDF5De2mAGBUZ8Gpt0EYPAOMIhvw==","shasum":"f06c27de42ac0b0f64c6e79132215343a1262aa1","tarball":"https://registry.npmjs.org/@ansospace/eslint-config/-/eslint-config-0.0.2.tgz","fileCount":7,"unpackedSize":17253,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBFUriy9CIE5yjZVEaydsU4zsu/jQnub4btfI+fbfP1pAiEA34uFIQtQ7obXhUWqYMxdN+8vzDqUSjIo3kqKVcZO2NM="}]},"_npmUser":{"name":"sahsanjay","email":"sanjay8797421521@gmail.com"},"directories":{},"maintainers":[{"name":"sahsanjay","email":"sanjay8797421521@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-config_0.0.2_1774251486824_0.33387277688904127"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-22T11:59:02.570Z","modified":"2026-03-23T07:38:07.133Z","0.0.1":"2026-01-22T11:59:02.881Z","0.0.2":"2026-03-23T07:38:06.979Z"},"bugs":{"url":"https://github.com/ansopedia/ansospace/issues"},"license":"MIT","homepage":"https://github.com/ansopedia/ansospace#readme","keywords":["eslint","eslint-config","typescript","sonarjs","react","nextjs","nodejs","express"],"repository":{"type":"git","url":"git+https://github.com/ansopedia/ansospace.git"},"description":"Shared ESLint configuration for AnsoSpace projects with TypeScript, SonarJS, React, Next.js, and Node.js support","maintainers":[{"name":"sahsanjay","email":"sanjay8797421521@gmail.com"}],"readme":"# `@ansospace/eslint-config`\n\nShared ESLint configuration for AnsoSpace projects with TypeScript, SonarJS, React, Next.js, and Node.js support.\n\n> **Note:** This package requires ESLint 9+ and uses the flat config format only. Legacy `.eslintrc.js` format is not supported.\n\n## Installation\n\n```bash\nnpm install --save-dev @ansospace/eslint-config\n# or\npnpm add -D @ansospace/eslint-config\n# or\nyarn add -D @ansospace/eslint-config\n```\n\n## Features\n\n- **TypeScript Support**: Full TypeScript linting with `typescript-eslint`\n- **Code Quality**: SonarJS rules for bug detection and code smells\n- **React Support**: React and React Hooks rules via `react` config\n- **Next.js Support**: Next.js specific rules via `next-js` config\n- **Node.js/Express Support**: Node.js and Express.js optimized config via `node` config\n- **Prettier Integration**: Prevents conflicts with Prettier formatting\n- **Turbo Support**: Optional Turbo-specific rules for Turborepo monorepos via `turbo` config\n\n## Configurations\n\n### Base Configuration\n\nThe base configuration includes TypeScript, SonarJS, and common rules. Use this for non-Turborepo projects.\n\n```javascript\n// eslint.config.js (ESLint 9+ flat config)\nimport { baseConfig } from \"@ansospace/eslint-config/base\";\n\nexport default [...baseConfig];\n```\n\n**Note:** If you're in a Turborepo monorepo, you can add Turbo support on top of any config. See the Turborepo section below.\n\n### React Libraries\n\nFor React libraries and components:\n\n```javascript\nimport { reactConfig } from \"@ansospace/eslint-config/react\";\n\nexport default reactConfig;\n```\n\n### Next.js Applications\n\nFor Next.js applications:\n\n```javascript\nimport { nextConfig } from \"@ansospace/eslint-config/next-js\";\n\nexport default nextConfig;\n```\n\n### Node.js/Express.js Applications\n\nFor Node.js and Express.js backend applications:\n\n```javascript\nimport { nodeConfig } from \"@ansospace/eslint-config/node\";\n\nexport default [...nodeConfig];\n```\n\n### Turborepo Monorepos\n\nFor Turborepo monorepos, you have two options:\n\n#### Option 1: Use the turbo config directly\n\n```javascript\nimport { turboConfig } from \"@ansospace/eslint-config/turbo\";\n\nexport default turboConfig;\n```\n\n#### Option 2: Combine turbo config with framework-specific configs\n\nFor React projects in a Turborepo:\n\n```javascript\nimport { reactConfig } from \"@ansospace/eslint-config/react\";\nimport { turboConfig } from \"@ansospace/eslint-config/turbo\";\n\nexport default [...turboConfig, ...reactConfig];\n```\n\nFor Next.js projects in a Turborepo:\n\n```javascript\nimport { nextConfig } from \"@ansospace/eslint-config/next-js\";\nimport { turboConfig } from \"@ansospace/eslint-config/turbo\";\n\nexport default [...turboConfig, ...nextConfig];\n```\n\nFor Node.js projects in a Turborepo:\n\n```javascript\nimport { nodeConfig } from \"@ansospace/eslint-config/node\";\nimport { turboConfig } from \"@ansospace/eslint-config/turbo\";\n\nexport default [...turboConfig, ...nodeConfig];\n```\n\n#### What's Included\n\nThe `node` config includes:\n\n- ✅ **Node.js globals**: `process`, `Buffer`, `__dirname`, etc.\n- ✅ **SonarJS**: All recommended SonarJS rules for code quality\n- ✅ **TypeScript**: Full TypeScript support with `typescript-eslint`\n- ✅ **Strict TypeScript rules**: `prefer-nullish-coalescing`, `strict-boolean-expressions`\n- ✅ **Code style rules**: `prefer-template`, `prefer-arrow-callback`, `func-style`, `prefer-destructuring`\n- ✅ **Express.js friendly defaults**:\n  - `no-underscore-dangle: off` (allows `req._parsedUrl`, etc.)\n  - `func-names: off` (allows anonymous functions in routes)\n  - `no-console: error` (strict by default, can be overridden)\n  - `indent: [\"error\", 2]` (2-space indentation)\n\n#### Express.js Example with Custom Rules\n\n```javascript\n// eslint.config.js\nimport { nodeConfig } from \"@ansospace/eslint-config/node\";\nimport checkFile from \"eslint-plugin-check-file\";\n\nexport default [\n  ...nodeConfig,\n  {\n    plugins: {\n      \"check-file\": checkFile,\n    },\n    rules: {\n      // File naming conventions (requires eslint-plugin-check-file)\n      \"check-file/filename-naming-convention\": [\n        \"error\",\n        {\n          \"**/*.{ts,tsx}\": \"KEBAB_CASE\",\n        },\n        {\n          ignoreMiddleExtensions: true,\n        },\n      ],\n      \"check-file/folder-naming-convention\": [\n        \"error\",\n        {\n          \"src/**/!^[.*\": \"KEBAB_CASE\",\n        },\n      ],\n      // Custom rules\n      \"max-len\": [\"error\", { code: 100 }],\n      \"prefer-destructuring\": [\n        \"error\",\n        {\n          array: false,\n          object: false,\n        },\n      ],\n    },\n  },\n];\n```\n\n#### Migration from Legacy Config\n\nIf you're migrating from a legacy `.eslintrc.js` format:\n\n**Before (Legacy `.eslintrc.js`):**\n\n```javascript\n/** @type {import('eslint').Linter.Config} */\nmodule.exports = {\n  extends: [\"@zurutech/eslint-config\", \"plugin:sonarjs/recommended-legacy\"],\n  parserOptions: { ecmaVersion: \"latest\", sourceType: \"module\" },\n  plugins: [\"sonarjs\"],\n  rules: {\n    \"no-console\": \"error\",\n    \"func-names\": [\"error\", \"never\"],\n    // ... more rules\n  },\n};\n```\n\n**After (ESLint 9+ Flat Config `eslint.config.js`):**\n\n```javascript\nimport { nodeConfig } from \"@ansospace/eslint-config/node\";\n\nexport default [\n  ...nodeConfig,\n  {\n    rules: {\n      // Your custom rules\n      \"func-names\": [\"error\", \"never\"],\n      \"max-len\": [\"error\", { code: 100 }],\n    },\n  },\n];\n```\n\n#### TypeScript Support in Node.js\n\nFor TypeScript files, the config automatically:\n\n- Uses `typescript-eslint` parser\n- Enables TypeScript-specific rules\n- Uses `tsconfig.eslint.json` if available, falls back to `tsconfig.json`\n- Allows `require()` in `.ts` files (with warning)\n- Warns on `any` types (doesn't error)\n\n#### Customizing Rules\n\nYou can override any rules in your `eslint.config.js`:\n\n```javascript\nimport { nodeConfig } from \"@ansospace/eslint-config/node\";\n\nexport default [\n  ...nodeConfig,\n  {\n    rules: {\n      // Override console.log to be an error\n      \"no-console\": \"error\",\n      // Custom max line length\n      \"max-len\": [\"error\", { code: 120 }],\n      // Disable specific SonarJS rule\n      \"sonarjs/cognitive-complexity\": \"off\",\n    },\n  },\n];\n```\n\n#### Ignored Files\n\nThe config automatically ignores:\n\n- `dist/**`, `build/**`, `node_modules/**`\n- `**/.eslintrc.js`, `**/*.config.js`, `**/*.config.mjs`\n- `**/*.md`, `eslint.config.mjs`\n- `coverage**/*`, `*.history`\n\n## Available Configurations\n\n- `base`: Base configuration with TypeScript, SonarJS, and common rules\n- `react`: For React libraries and components\n- `next-js`: For Next.js applications\n- `node`: For Node.js and Express.js backend applications\n- `turbo`: For Turborepo monorepos (optional, only use if you have a turbo.json)\n\n## SonarJS Rules\n\nAll SonarJS recommended rules are enabled. Code quality rules are set to warnings to allow incremental improvement:\n\n- `sonarjs/cognitive-complexity`: Warning (threshold: 15)\n- `sonarjs/no-nested-conditional`: Warning\n- `sonarjs/no-duplicate-string`: Warning\n- `sonarjs/no-identical-functions`: Warning\n- `sonarjs/pseudo-random`: Warning (for UI/non-critical contexts)\n- `sonarjs/no-commented-code`: Warning\n- `sonarjs/no-small-switch`: Warning\n- `sonarjs/no-redundant-boolean`: Warning\n- `sonarjs/prefer-immediate-return`: Warning\n\nCritical bug detection and security rules remain as errors.\n\n## TypeScript Support\n\nTypeScript is fully supported. The configuration:\n\n- Uses `typescript-eslint` for TypeScript-specific rules\n- Handles unused variables and parameters correctly\n- Supports type definitions and function signatures\n- Works with both `.ts` and `.tsx` files\n\n## License\n\nMIT\n","readmeFilename":"README.md"}