{"_id":"@ecom-co/eslint","_rev":"5-d8c4993ff9318ea644a1d04537c81d90","name":"@ecom-co/eslint","dist-tags":{"latest":"2.0.2"},"versions":{"1.0.0":{"name":"@ecom-co/eslint","version":"1.0.0","keywords":["eslint","eslint-config","typescript","nestjs","javascript"],"author":{"name":"E-commerce Team"},"license":"MIT","_id":"@ecom-co/eslint@1.0.0","maintainers":[{"name":"nam077","email":"namnguyen177a@gmail.com"}],"dist":{"shasum":"4e96999fbb148c58f508b7452a4473b854069685","tarball":"https://registry.npmjs.org/@ecom-co/eslint/-/eslint-1.0.0.tgz","fileCount":23,"integrity":"sha512-dPKgc6MJfGgdFA8U/JtKTruJAsbotuCJi6ZeRlV1FjzHHRAfyN44yaLpcAwkWhDW2GL+cPD53iRb427hEH2O0g==","signatures":[{"sig":"MEUCIQDy7Zyk5d0HVAbQpQADZSXuYbRbwyv2TLdMOql3amH3pgIgRYv/i61PYVdrMxEVcwFFiqOYMWqEJuC/6VKxrHCbqxQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35303},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./base":{"types":"./dist/configs/base.d.ts","import":"./dist/configs/base.js"},"./nestjs":{"types":"./dist/configs/nestjs.d.ts","import":"./dist/configs/nestjs.js"},"./strict":{"types":"./dist/configs/strict.d.ts","import":"./dist/configs/strict.js"}},"gitHead":"60700e874c611563beaf2eb6b89cef9ed4fca0a8","scripts":{"build":"tsc","clean":"rm -rf dist","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"nam077","email":"namnguyen177a@gmail.com"},"_npmVersion":"10.2.5","description":"Shared ESLint configuration for e-commerce projects","directories":{},"_nodeVersion":"20.18.3","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/eslint":"^9.6.1"},"peerDependencies":{"eslint":"^9.18.0","globals":"^16.0.0","@eslint/js":"^9.18.0","typescript-eslint":"^8.20.0","eslint-plugin-jest":"^28.11.0","eslint-plugin-jsdoc":"^50.6.11","eslint-plugin-lodash":"^8.0.0","eslint-plugin-sonarjs":"^3.0.2","eslint-plugin-import-x":"^4.11.1","eslint-plugin-prettier":"^5.2.2","eslint-plugin-security":"^3.0.1","eslint-plugin-unused-imports":"^4.1.4","eslint-plugin-sort-class-members":"^1.21.0","eslint-import-resolver-typescript":"^4.3.4"},"_npmOperationalInternal":{"tmp":"tmp/eslint_1.0.0_1754743663237_0.6991085703672428","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@ecom-co/eslint","version":"2.0.0","keywords":["eslint","eslint-config","typescript","nestjs","javascript"],"author":{"name":"E-commerce Team"},"license":"MIT","_id":"@ecom-co/eslint@2.0.0","maintainers":[{"name":"nam077","email":"namnguyen177a@gmail.com"}],"dist":{"shasum":"1ef9805c412ab665bcf5b5d6fdefc282eab959d1","tarball":"https://registry.npmjs.org/@ecom-co/eslint/-/eslint-2.0.0.tgz","fileCount":23,"integrity":"sha512-TPoGRRAVlihKG3WNokV3Ra2vxFo+PzV5Al8jlGY8m9B4cqZkz/qhsjr785XUapmEF0LjlL7cFPJgI9fPa+MbKQ==","signatures":[{"sig":"MEUCIHuT80b3J8AkaDMJtAWg6fUXlnWeFwVujRVYN0u76SsGAiEAo3t1dOGHNS3OuOcryX2xosae7eBzI1KeX7L8iLfxVds=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35045},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./base":{"types":"./dist/configs/base.d.ts","import":"./dist/configs/base.js"},"./nestjs":{"types":"./dist/configs/nestjs.d.ts","import":"./dist/configs/nestjs.js"},"./strict":{"types":"./dist/configs/strict.d.ts","import":"./dist/configs/strict.js"}},"gitHead":"60700e874c611563beaf2eb6b89cef9ed4fca0a8","scripts":{"build":"tsc","clean":"rm -rf dist","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"nam077","email":"namnguyen177a@gmail.com"},"_npmVersion":"10.2.5","description":"Shared ESLint configuration for e-commerce projects","directories":{},"_nodeVersion":"20.18.3","dependencies":{"eslint":"^9.18.0","globals":"^16.0.0","@eslint/js":"^9.18.0","typescript-eslint":"^8.20.0","eslint-plugin-jest":"^28.11.0","eslint-plugin-jsdoc":"^50.6.11","eslint-plugin-lodash":"^8.0.0","eslint-plugin-sonarjs":"^3.0.2","eslint-plugin-import-x":"^4.11.1","eslint-plugin-prettier":"^5.2.2","eslint-plugin-security":"^3.0.1","eslint-plugin-unused-imports":"^4.1.4","eslint-plugin-sort-class-members":"^1.21.0","eslint-import-resolver-typescript":"^4.3.4"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/eslint":"^9.6.1","@typescript-eslint/utils":"^8.20.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint_2.0.0_1754745066614_0.6250542970306259","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@ecom-co/eslint","version":"2.0.1","keywords":["eslint","eslint-config","typescript","nestjs","javascript"],"author":{"name":"E-commerce Team"},"license":"MIT","_id":"@ecom-co/eslint@2.0.1","maintainers":[{"name":"nam077","email":"namnguyen177a@gmail.com"}],"homepage":"https://github.com/e-commerce-platform-co/lib-eslint-config#readme","bugs":{"url":"https://github.com/e-commerce-platform-co/lib-eslint-config/issues"},"dist":{"shasum":"cd8762da2b02c5f817ca6feabd7adcc8509a8806","tarball":"https://registry.npmjs.org/@ecom-co/eslint/-/eslint-2.0.1.tgz","fileCount":23,"integrity":"sha512-cwAmUwhnrhD5tZilGB1Vfgga//rcBGk/HIsx9Zh+akIc2Yi0L4HW3v9xHtnye5iEcVy43lsfY1Fa7yDJMQSATw==","signatures":[{"sig":"MEQCICHVkX20iaNaOy8sYdAjuHpQ0q6Kx0yGiYofgPxPdUY9AiAoUjkUhyrkJoTm/JeKQbJifGLjaLUiSKMEb7b3CRJZHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32194},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./base":{"types":"./dist/configs/base.d.ts","import":"./dist/configs/base.js"},"./nestjs":{"types":"./dist/configs/nestjs.d.ts","import":"./dist/configs/nestjs.js"},"./strict":{"types":"./dist/configs/strict.d.ts","import":"./dist/configs/strict.js"}},"gitHead":"08f052104084c44684ee724a481bec3198c8f233","scripts":{"build":"tsc","clean":"rm -rf dist","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"nam077","email":"namnguyen177a@gmail.com"},"repository":{"url":"git+https://github.com/e-commerce-platform-co/lib-eslint-config.git","type":"git"},"_npmVersion":"10.2.5","description":"Shared ESLint configuration for e-commerce projects","directories":{},"_nodeVersion":"20.18.3","dependencies":{"eslint":"^9.18.0","globals":"^16.0.0","@eslint/js":"^9.18.0","typescript-eslint":"^8.20.0","eslint-plugin-jest":"^28.11.0","eslint-plugin-jsdoc":"^50.6.11","eslint-plugin-lodash":"^8.0.0","eslint-plugin-sonarjs":"^3.0.2","eslint-plugin-import-x":"^4.11.1","eslint-plugin-prettier":"^5.2.2","eslint-plugin-security":"^3.0.1","eslint-plugin-unused-imports":"^4.1.4","eslint-plugin-sort-class-members":"^1.21.0","eslint-import-resolver-typescript":"^4.3.4"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^24.2.1","@types/eslint":"^9.6.1","@typescript-eslint/utils":"^8.20.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint_2.0.1_1754747206488_0.9842614579868232","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@ecom-co/eslint","version":"2.0.2","keywords":["eslint","eslint-config","typescript","nestjs","javascript"],"author":{"name":"E-commerce Team"},"license":"MIT","_id":"@ecom-co/eslint@2.0.2","maintainers":[{"name":"nam077","email":"namnguyen177a@gmail.com"}],"homepage":"https://github.com/e-commerce-platform-co/lib-eslint-config#readme","bugs":{"url":"https://github.com/e-commerce-platform-co/lib-eslint-config/issues"},"dist":{"shasum":"364947841cd41dc10300e13e536794f28fc5b6ef","tarball":"https://registry.npmjs.org/@ecom-co/eslint/-/eslint-2.0.2.tgz","fileCount":23,"integrity":"sha512-ZkzUg7aUUpr7R+YKMVfZsEKY0F7M8sBv/hyBBQSP3mzFTtyPxw0EcFBz1AUdf1jjdadB++6b8J9xbU4WZF0Onw==","signatures":[{"sig":"MEUCIGj5KTzweLjgfiISGN6m/xEmft03mKPHymSpbN69FHhjAiEA9jyTqVaXQhZTmNXzyM1iFYymW3CKJKdVckPW1R2oW0g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32235},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./base":{"types":"./dist/configs/base.d.ts","import":"./dist/configs/base.js"},"./nestjs":{"types":"./dist/configs/nestjs.d.ts","import":"./dist/configs/nestjs.js"},"./strict":{"types":"./dist/configs/strict.d.ts","import":"./dist/configs/strict.js"}},"gitHead":"08f052104084c44684ee724a481bec3198c8f233","scripts":{"build":"tsc","clean":"rm -rf dist","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"nam077","email":"namnguyen177a@gmail.com"},"repository":{"url":"git+https://github.com/e-commerce-platform-co/lib-eslint-config.git","type":"git"},"_npmVersion":"10.2.5","description":"Shared ESLint configuration for e-commerce projects","directories":{},"_nodeVersion":"20.18.3","dependencies":{"eslint":"^9.18.0","globals":"^16.0.0","@eslint/js":"^9.18.0","typescript-eslint":"^8.20.0","eslint-plugin-jest":"^28.11.0","eslint-plugin-jsdoc":"^50.6.11","eslint-plugin-lodash":"^8.0.0","eslint-plugin-sonarjs":"^3.0.2","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.11.1","eslint-plugin-prettier":"^5.2.2","eslint-plugin-security":"^3.0.1","eslint-plugin-unused-imports":"^4.1.4","eslint-plugin-sort-class-members":"^1.21.0","eslint-import-resolver-typescript":"^4.3.4"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^24.2.1","@types/eslint":"^9.6.1","@typescript-eslint/utils":"^8.20.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint_2.0.2_1754750367006_0.08413841381080234","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-08-09T12:47:43.173Z","modified":"2025-08-15T17:38:04.147Z","1.0.0":"2025-08-09T12:47:43.449Z","2.0.0":"2025-08-09T13:11:06.797Z","2.0.1":"2025-08-09T13:46:46.710Z","2.0.2":"2025-08-09T14:39:27.240Z"},"bugs":{"url":"https://github.com/e-commerce-platform-co/lib-eslint-config/issues"},"author":{"name":"E-commerce Team"},"license":"MIT","homepage":"https://github.com/e-commerce-platform-co/lib-eslint-config#readme","keywords":["eslint","eslint-config","typescript","nestjs","javascript"],"repository":{"url":"git+https://github.com/e-commerce-platform-co/lib-eslint-config.git","type":"git"},"description":"Shared ESLint configuration for e-commerce projects","maintainers":[{"email":"support@npmjs.com","name":"npm-support"}],"readme":"# @ecom-co/eslint\n\nShared ESLint configuration library for e-commerce projects. This package provides reusable, customizable ESLint configurations to ensure consistent code quality across multiple projects.\n\n## Features\n\n- 🎯 **Multiple Presets**: Base, NestJS, and Strict configurations\n- 🔧 **Highly Customizable**: Override rules, add custom patterns, and configure plugins\n- 📦 **Zero Config**: Works out of the box with sensible defaults\n- 🚀 **TypeScript First**: Built with TypeScript support in mind\n- 🧩 **Modular**: Use individual plugin configurations as needed\n\n## Installation\n\n```bash\n# Install the configuration package (no extra peer deps needed)\nnpm install --save-dev @ecom-co/eslint\n```\n\n## Quick Start\n\n### Basic Configuration\n\nCreate `eslint.config.mjs` in your project root:\n\n```javascript\nimport { createBaseConfig } from '@ecom-co/eslint';\n\nexport default createBaseConfig();\n```\n\n### NestJS Configuration\n\n```javascript\nimport { createNestJSConfig } from '@ecom-co/eslint/nestjs';\n\nexport default createNestJSConfig({\n  tsconfigRootDir: import.meta.dirname,\n});\n```\n\n### Strict Configuration\n\n```javascript\nimport { createStrictConfig } from '@ecom-co/eslint/strict';\n\nexport default createStrictConfig({\n  tsconfigRootDir: import.meta.dirname,\n  jsdoc: true,\n});\n```\n\n## Configuration Options\n\nAll configuration functions accept an options object with the following properties:\n\n```typescript\ninterface EcomESLintOptions {\n  /** Project root directory for TypeScript configuration */\n  tsconfigRootDir?: string;\n  \n  /** Path to TypeScript configuration file */\n  project?: string | string[];\n  \n  /** Enable strict mode rules */\n  strict?: boolean;\n  \n  /** Enable NestJS specific rules */\n  nestjs?: boolean;\n  \n  /** Enable Jest testing rules */\n  jest?: boolean;\n  \n  /** Enable JSDoc documentation rules */\n  jsdoc?: boolean;\n  \n  /** Enable security rules */\n  security?: boolean;\n  \n  /** Enable SonarJS code quality rules */\n  sonarjs?: boolean;\n  \n  /** Enable Lodash optimization rules */\n  lodash?: boolean;\n  \n  /** Additional ignore patterns */\n  ignores?: string[];\n  \n  /** Additional rules to override */\n  rules?: Record<string, any>;\n  \n  /** Custom import order groups */\n  importGroups?: {\n    groups?: Array<string | string[]>;\n    pathGroups?: Array<{\n      pattern: string;\n      group: string;\n      position?: 'before' | 'after';\n    }>;\n  };\n}\n```\n\n## Usage Examples\n\n### Custom Rules Override\n\n```javascript\nimport { createBaseConfig } from '@ecom-co/eslint';\n\nexport default createBaseConfig({\n  rules: {\n    'no-console': 'off',\n    '@typescript-eslint/no-explicit-any': 'error',\n    'import-x/order': 'off',\n  },\n});\n```\n\n### Custom Import Groups\n\n```javascript\nimport { createNestJSConfig } from '@ecom-co/eslint/nestjs';\n\nexport default createNestJSConfig({\n  importGroups: {\n    pathGroups: [\n      {\n        pattern: '@company/**',\n        group: 'internal',\n        position: 'before',\n      },\n      {\n        pattern: '@shared/**',\n        group: 'internal',\n        position: 'after',\n      },\n    ],\n  },\n});\n```\n\n### Multiple Configurations\n\n```javascript\nimport { createBaseConfig, createJestConfig } from '@ecom-co/eslint';\nimport { mergeConfigs } from '@ecom-co/eslint';\n\nconst baseConfig = createBaseConfig({\n  jest: false, // Disable Jest in base config\n});\n\nconst jestConfig = createJestConfig({\n  jest: true,\n});\n\nexport default mergeConfigs(baseConfig, jestConfig);\n```\n\n### Project-Specific Overrides\n\n```javascript\nimport { createNestJSConfig } from '@ecom-co/eslint/nestjs';\n\nexport default createNestJSConfig({\n  tsconfigRootDir: import.meta.dirname,\n  ignores: [\n    'src/generated/**',\n    'src/legacy/**',\n  ],\n  rules: {\n    // Disable specific rules for this project\n    'sonarjs/cognitive-complexity': 'off',\n    \n    // Project-specific import patterns\n    'import-x/no-restricted-paths': [\n      'error',\n      {\n        zones: [\n          {\n            target: './src/modules',\n            from: './src/core',\n            except: ['./src/core/types'],\n          },\n        ],\n      },\n    ],\n  },\n});\n```\n\n## Available Presets\n\n### Base Configuration (`@ecom-co/eslint`)\n- Essential TypeScript rules\n- Import organization\n- Code formatting\n- Performance optimizations\n- Basic security rules\n\n### NestJS Configuration (`@ecom-co/eslint/nestjs`)\n- All base rules\n- NestJS-specific patterns\n- Class member organization\n- Decorator support\n- Testing configuration\n\n### Strict Configuration (`@ecom-co/eslint/strict`)\n- All base rules\n- Strict TypeScript checking\n- Mandatory JSDoc\n- Complexity limits\n- Enhanced security rules\n\n## Individual Plugin Configurations\n\nYou can also use individual plugin configurations:\n\n```javascript\nimport { \n  createBaseConfig,\n  createJestConfig,\n  createSecurityConfig,\n  mergeConfigs \n} from '@ecom-co/eslint';\n\nexport default mergeConfigs(\n  createBaseConfig({ jest: false, security: false }),\n  createJestConfig({ jest: true }),\n  createSecurityConfig({ security: true }),\n);\n```\n\n## Migration from Existing ESLint Config\n\nIf you're migrating from an existing ESLint configuration:\n\n1. **Backup your current config**: Save your existing `eslint.config.mjs` or `.eslintrc.*`\n2. **Install the package**: Follow the installation instructions above\n3. **Start with base config**: Begin with `createBaseConfig()`\n4. **Gradually add features**: Enable plugins and rules as needed\n5. **Override specific rules**: Use the `rules` option to maintain your current preferences\n\n### Migration Example\n\n```javascript\n// Old .eslintrc.js\nmodule.exports = {\n  extends: ['@typescript-eslint/recommended'],\n  rules: {\n    'no-console': 'off',\n    '@typescript-eslint/no-explicit-any': 'error',\n  },\n};\n\n// New eslint.config.mjs\nimport { createBaseConfig } from '@ecom-co/eslint';\n\nexport default createBaseConfig({\n  rules: {\n    'no-console': 'off',\n    '@typescript-eslint/no-explicit-any': 'error',\n  },\n});\n```\n\n## Contributing\n\nWhen contributing to this package:\n\n1. **Test your changes**: Ensure configurations work across different project types\n2. **Update documentation**: Keep README and JSDoc comments up to date\n3. **Follow semver**: Use appropriate version bumps for changes\n4. **Add examples**: Include usage examples for new features\n\n## Troubleshooting\n\n### Common Issues\n\n**\"Cannot resolve dependency\" errors**\n- Ensure all peer dependencies are installed\n- Check that TypeScript configuration path is correct\n\n**\"Rules not applying\" issues**\n- Verify the configuration is being exported correctly\n- Check for conflicting rules in multiple configurations\n\n**Performance issues**\n- Use `project` option to limit TypeScript parsing scope\n- Consider disabling expensive rules for large codebases\n\n### Getting Help\n\n1. Check the [troubleshooting section](#troubleshooting)\n2. Review configuration examples above\n3. Check peer dependency versions\n4. Create an issue with your configuration and error details\n\n## License\n\nMIT\n","readmeFilename":"README.md"}