{"_id":"@alexey-gara/ag-eslint-ts","_rev":"11-84676a4ca845cd0b30cd5a4f9761ca72","name":"@alexey-gara/ag-eslint-ts","dist-tags":{"latest":"1.0.6"},"versions":{"1.0.2":{"name":"@alexey-gara/ag-eslint-ts","version":"1.0.2","keywords":[],"author":{"name":"Alexey Gara"},"license":"MIT","_id":"@alexey-gara/ag-eslint-ts@1.0.2","maintainers":[{"name":"alexey-gara","email":"alexey.gara@gmail.com"}],"dist":{"shasum":"97c6349f39f05a7170b8cbd6afe28ea90afbffc3","tarball":"https://registry.npmjs.org/@alexey-gara/ag-eslint-ts/-/ag-eslint-ts-1.0.2.tgz","fileCount":6,"integrity":"sha512-liLIRvyrzN4Z4dF6DhSI91XP/QQGgGw5fTrstROCZcNkcv3yR656/3o+if0/J2kxKeKlSlrn08v2DGU4ZXeLZQ==","signatures":[{"sig":"MEUCIFXlojcj//feQVYA9IKEA4Z0viOmWaUOojG2Iul52xozAiEAk4cDedx1Dc2976u3zLd0891AE7sSCCMRlJOqyRq497A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10469},"main":"./index.cjs","type":"module","module":"./index.mjs","exports":{".":{"import":"./index.mjs","require":"./index.cjs"},"./tsconfig.json":"./tsconfig.json"},"gitHead":"62fc74bab2549b73e22b74d0bc632fe8d1519b59","_npmUser":{"name":"alexey-gara","email":"alexey.gara@gmail.com"},"_npmVersion":"10.8.2","description":"ESLint rules and TS common configurations","directories":{},"_nodeVersion":"18.20.8","dependencies":{"@eslint/js":"^9.21.0","typescript-eslint":"^8.25.0","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.2","eslint-plugin-prettier":"^5.2.6","@typescript-eslint/parser":"^8.55.0","@stylistic/eslint-plugin-ts":"^1.8.1","@typescript-eslint/eslint-plugin":"^8.55.0","eslint-import-resolver-typescript":"^4.4.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.30.3","peerDependencies":{"eslint":"^8.57.1","prettier":"^3.5.3","typescript":"^4.9.5"},"_npmOperationalInternal":{"tmp":"tmp/ag-eslint-ts_1.0.2_1776030582957_0.43892276236509664","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@alexey-gara/ag-eslint-ts","version":"1.0.3","keywords":[],"author":{"name":"Alexey Gara"},"license":"MIT","_id":"@alexey-gara/ag-eslint-ts@1.0.3","maintainers":[{"name":"alexey-gara","email":"alexey.gara@gmail.com"}],"dist":{"shasum":"42fe436d185aafe45425b5c92576bf66e7a48b13","tarball":"https://registry.npmjs.org/@alexey-gara/ag-eslint-ts/-/ag-eslint-ts-1.0.3.tgz","fileCount":6,"integrity":"sha512-3ykxXNXm6Q1El/wBANsV+ml7uK8oTiJZ4UvkaQSnBiWC1uwMbnyznddbz6gQG9td+lZ+QK9BN6yYKWDmHzHMIA==","signatures":[{"sig":"MEUCIQDqjxDOG+hngeBW27G65+/6FKDCGnWO8GE/q9oIo12vhQIgKX9L2xvbRMezolylnoQHWapShKJL0Jjxxa46XuTIlhk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15454},"main":"./index.cjs","type":"module","module":"./index.mjs","exports":{".":{"import":"./index.mjs","require":"./index.cjs"},"./tsconfig.json":"./tsconfig.json"},"gitHead":"bb67a03287f33d21f9526218835c2e698c4d81e8","_npmUser":{"name":"alexey-gara","email":"alexey.gara@gmail.com"},"_npmVersion":"10.8.2","description":"ESLint rules and TS common configurations","directories":{},"_nodeVersion":"18.20.8","dependencies":{"@eslint/js":"^9.21.0","typescript-eslint":"^8.25.0","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.2","eslint-plugin-prettier":"^5.2.6","@typescript-eslint/parser":"^8.55.0","@stylistic/eslint-plugin-ts":"^1.8.1","@typescript-eslint/eslint-plugin":"^8.55.0","eslint-import-resolver-typescript":"^4.4.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.30.3","peerDependencies":{"eslint":"^8.57.1","prettier":"^3.5.3","typescript":"^4.9.5"},"_npmOperationalInternal":{"tmp":"tmp/ag-eslint-ts_1.0.3_1776295155698_0.029918731748096228","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@alexey-gara/ag-eslint-ts","version":"1.0.4","keywords":[],"author":{"name":"Alexey Gara"},"license":"MIT","_id":"@alexey-gara/ag-eslint-ts@1.0.4","maintainers":[{"name":"alexey-gara","email":"alexey.gara@gmail.com"}],"dist":{"shasum":"f0a93a0948b1f9668f10a2c309126e47572c5dce","tarball":"https://registry.npmjs.org/@alexey-gara/ag-eslint-ts/-/ag-eslint-ts-1.0.4.tgz","fileCount":6,"integrity":"sha512-id/BEcyLj3rQ6rleKls3kHRecSaUgD6/CvqGMtkKAkGkMTOvaxqPWuO6UuzX1Wh5gfBQbjBLvXYc8PaC/r1Heg==","signatures":[{"sig":"MEUCIQCWmPwpZnXOwghTzXMrHhzh+5Z+6OecWe8Q+4c45KG4IgIgGDCNy83X7Y0PuPffHaIMxx8Fp8JCYwudLp8Bw3KO4gA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15513},"main":"./index.cjs","type":"module","module":"./index.mjs","exports":{".":{"import":"./index.mjs","require":"./index.cjs"},"./tsconfig.json":"./tsconfig.json"},"gitHead":"6ce89efd5ae404f341cd977a776d4533c0ef63c7","_npmUser":{"name":"alexey-gara","email":"alexey.gara@gmail.com"},"_npmVersion":"10.8.2","description":"ESLint rules and TS common configurations","directories":{},"_nodeVersion":"18.20.8","dependencies":{"@eslint/js":"^9.21.0","typescript-eslint":"^8.25.0","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.2","eslint-plugin-prettier":"^5.2.6","@typescript-eslint/parser":"^8.55.0","@stylistic/eslint-plugin-ts":"^1.8.1","@typescript-eslint/eslint-plugin":"^8.55.0","eslint-import-resolver-typescript":"^4.4.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.30.3","peerDependencies":{"eslint":"^8.57.1","prettier":"^3.5.3","typescript":"^4.9.5"},"_npmOperationalInternal":{"tmp":"tmp/ag-eslint-ts_1.0.4_1776295731575_0.5920211986143922","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@alexey-gara/ag-eslint-ts","version":"1.0.5","keywords":["eslint","typescript","prettier","eslint-config","typescript-eslint","ts-eslint","stylistic","eslint-flat-config","pnpm","shared-config","code-style","code-quality","formatting","best-practices","strict","developer-experience","eslint-config-typescript","eslint-typescript-config"],"author":{"name":"Alexey Gara"},"license":"MIT","_id":"@alexey-gara/ag-eslint-ts@1.0.5","maintainers":[{"name":"alexey-gara","email":"alexey.gara@gmail.com"}],"dist":{"shasum":"e2a560c1ec06775cdcc87b41721633250f52238d","tarball":"https://registry.npmjs.org/@alexey-gara/ag-eslint-ts/-/ag-eslint-ts-1.0.5.tgz","fileCount":7,"integrity":"sha512-jzf/HjyF+KuFewuUbUgWAgBycLPXXQ/IK/J3AeziwYWnjxI4Yan8B6kitnYJspqjM4YDpBoVMxhVzCYWOQfk9w==","signatures":[{"sig":"MEUCIQDRehRuryhJ6z/b4HZTG1jsKatDrYBdkpJfvUcuTUYtMAIge6dxlk9NWoe7mEuGYL+ZQlkc73UD6FDuHsDlUiVXX+I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17047},"main":"./index.cjs","type":"module","module":"./index.mjs","exports":{".":{"import":"./index.mjs","require":"./index.cjs"},"./tsconfig.json":"./tsconfig.json"},"gitHead":"bdce0c7caedc3524b2425a42e6fdc8925f6b7a3e","_npmUser":{"name":"alexey-gara","email":"alexey.gara@gmail.com"},"_npmVersion":"10.8.2","description":"Shared opinionated ESLint and TypeScript config with strict rules, clean style, and a great developer experience.","directories":{},"_nodeVersion":"18.20.8","dependencies":{"@eslint/js":"^9.21.0","typescript-eslint":"^8.25.0","eslint-plugin-import":"^2.32.0","eslint-config-prettier":"^10.1.2","eslint-plugin-prettier":"^5.2.6","@typescript-eslint/parser":"^8.55.0","@stylistic/eslint-plugin-ts":"^1.8.1","@typescript-eslint/eslint-plugin":"^8.55.0","eslint-import-resolver-typescript":"^4.4.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.30.3","peerDependencies":{"eslint":"^8.57.1","prettier":"^3.5.3","typescript":"^4.9.5"},"_npmOperationalInternal":{"tmp":"tmp/ag-eslint-ts_1.0.5_1776369422407_0.8086148053239897","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@alexey-gara/ag-eslint-ts","version":"1.0.6","description":"Shared opinionated ESLint and TypeScript config with strict rules, clean style, and a great developer experience.","main":"./index.cjs","module":"./index.mjs","exports":{".":{"import":"./index.mjs","require":"./index.cjs"},"./tsconfig.json":"./tsconfig.json"},"type":"module","scripts":{"inspect-eslint":"npx @eslint/config-inspector --config index.mjs","inspect-eslint:build":"npx @eslint/config-inspector build --config index.mjs","serve":"serve ./.eslint-config-inspectore","deploy":"node deploy.js"},"repository":{"type":"git","url":"git+https://github.com/AlexeyGara/ag-eslint-ts.git"},"homepage":"https://github.com/AlexeyGara/ag-eslint-ts#readme","keywords":["eslint","typescript","prettier","eslint-config","typescript-eslint","ts-eslint","stylistic","eslint-flat-config","pnpm","shared-config","code-style","code-quality","formatting","best-practices","strict","developer-experience","eslint-config-typescript","eslint-typescript-config"],"author":{"name":"Alexey Gara"},"license":"MIT","packageManager":"pnpm@10.30.3","peerDependencies":{"eslint":"^8.57.1","prettier":"^3.5.3","typescript":"^4.9.5"},"dependencies":{"@eslint/js":"^9.21.0","@stylistic/eslint-plugin-ts":"^1.8.1","eslint-config-prettier":"^10.1.2","eslint-import-resolver-typescript":"^4.4.4","eslint-plugin-import":"^2.32.0","eslint-plugin-prettier":"^5.2.6","@typescript-eslint/parser":"^8.55.0","@typescript-eslint/eslint-plugin":"^8.55.0","typescript-eslint":"^8.25.0"},"devDependencies":{"@eslint/config-inspector":"^0.5.0","gh-pages":"^6.3.0","serve":"^14.2.5"},"publishConfig":{"access":"public"},"_id":"@alexey-gara/ag-eslint-ts@1.0.6","gitHead":"c4f64e4465ca5ad789d4f7d3e6f359d28c8b0c8d","bugs":{"url":"https://github.com/AlexeyGara/ag-eslint-ts/issues"},"_nodeVersion":"18.20.8","_npmVersion":"10.8.2","dist":{"integrity":"sha512-EBtZw1x4moEFQdGsGuon1UJyg3q9cfWbz06kdZwjvWPRP1mMxoXbbf00TLKXEGG7txXQALeokzZSxq+35yHzAg==","shasum":"569214bf98603349265768e748daa7835f857085","tarball":"https://registry.npmjs.org/@alexey-gara/ag-eslint-ts/-/ag-eslint-ts-1.0.6.tgz","fileCount":7,"unpackedSize":17799,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC1Om2+cNRj2aQ23UyE7rThfc1j+bXdurmHXYVsWmP+2AIgFv1MvNG/AxF/KVRBrkUFjDLRMfmng+RnqP0PgQpZDio="}]},"_npmUser":{"name":"alexey-gara","email":"alexey.gara@gmail.com"},"directories":{},"maintainers":[{"name":"alexey-gara","email":"alexey.gara@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ag-eslint-ts_1.0.6_1776543955575_0.27804270151617727"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-12T21:49:42.844Z","modified":"2026-04-18T20:25:55.866Z","1.0.0":"2026-04-11T18:39:32.267Z","1.0.1":"2026-04-11T19:02:09.527Z","1.0.2":"2026-04-12T21:49:43.091Z","1.0.3":"2026-04-15T23:19:15.845Z","1.0.4":"2026-04-15T23:28:51.735Z","1.0.5":"2026-04-16T19:57:02.570Z","1.0.6":"2026-04-18T20:25:55.742Z"},"author":{"name":"Alexey Gara"},"license":"MIT","keywords":["eslint","typescript","prettier","eslint-config","typescript-eslint","ts-eslint","stylistic","eslint-flat-config","pnpm","shared-config","code-style","code-quality","formatting","best-practices","strict","developer-experience","eslint-config-typescript","eslint-typescript-config"],"description":"Shared opinionated ESLint and TypeScript config with strict rules, clean style, and a great developer experience.","maintainers":[{"name":"alexey-gara","email":"alexey.gara@gmail.com"}],"readme":"# ag-eslint-ts\n\n<p align=\"left\">\n  Shared <b>ESLint</b> & <b>TypeScript</b> configuration for streamlined development.\n</p>\n\n<p align=\"left\">\n  <a href=\"https://www.npmjs.com/package/@alexey-gara/ag-eslint-ts\">\n    <img src=\"https://img.shields.io/npm/v/@alexey-gara/ag-eslint-ts\" alt=\"npm version\" />\n  </a>\n  <a href=\"https://www.npmjs.com/package/@alexey-gara/ag-eslint-ts\">\n    <img src=\"https://img.shields.io/npm/dm/@alexey-gara/ag-eslint-ts\" alt=\"npm downloads\" />\n  </a>\n  <a href=\"https://github.com/AlexeyGara/ag-eslint-ts/blob/main/LICENSE\">\n    <img src=\"https://img.shields.io/github/license/AlexeyGara/ag-eslint-ts\" alt=\"license\" />\n  </a>\n</p>\n\n---\n\n## Features\n\n- ✅ Preconfigured **ESLint** rules\n- ✅ Ready-to-use **TypeScript** setup\n- ✅ Integrated **Prettier**\n- ✅ Supports **Flat Config (ESLint v9+)**\n- ✅ Backward compatibility with **ESLint v8**\n- ✅ Works with `pnpm` monorepos\n\n[🔗 Explore ESLint configuration and rules](https://alexeygara.github.io/ag-eslint-ts/)\n\n---\n\n## Installation\n\n> [!TIP]\n> Recommended for **ESLint v9+ (Flat Config)** and **TypeScript v5+**:\n\n```bash\npnpm add -D @alexey-gara/ag-eslint-ts eslint typescript prettier\n```\n\nFor older IDEs that do **not support ESLint v9+ (Flat Config)** and/or **TypeScript v5+**  \n_(e.g., IDEA 2022.2 and earlier)_:\n\n```bash\npnpm add -D @alexey-gara/ag-eslint-ts eslint@8.57.1 typescript@4.9.5 prettier@3.5.3\n```\n\n---\n\n## Usage\n\n### ESLint Setup\n\n#### Modern (Flat Config, ESLint v9+)\n\nCreate `eslint.config.mjs` in the root of your project (next to `project.json`):\n\n```js\nimport agConfig from '@alexey-gara/ag-eslint-ts';\n\nexport default [\n  ...agConfig,\n  {\n    rules: {\n      // your custom rules here\n    }\n  }\n];\n```\n\n---\n\n#### Legacy (ESLint v8)\n\nFor older IDEs without Flat Config support:\n\nCreate `.eslintrc.cjs`:\n\n```js\nmodule.exports = {\n  extends: [\n    require.resolve('@alexey-gara/ag-eslint-ts')\n  ],\n  parserOptions: {\n    tsconfigRootDir: __dirname,\n  },\n  root: true,\n  rules: {\n    // your custom rules here\n  }\n};\n```\n\n---\n\n### pnpm Compatibility\n\nBefore installing dependencies, create a `.npmrc` file in your project root:\n\n```ini\npublic-hoist-pattern[]=*eslint*\npublic-hoist-pattern[]=*prettier*\n```\n\n> [!NOTE]\n> `pnpm` stores dependencies (like `eslint-plugin-import`) inside a virtual store.  \n> This configuration ensures ESLint can properly resolve plugins.\n\n---\n\n### TypeScript Setup\n\nExtend your `tsconfig.json`:\n\n```json\n{\n  \"extends\": \"@alexey-gara/ag-eslint-ts/tsconfig.json\",\n  \"compilerOptions\": {\n    // your project's TypeScript compiler options\n  },\n  \"include\": [\n    // files to include\n  ],\n  \"exclude\": [\n    // files and folders to exclude\n  ]\n}\n```\n\n---\n\n## Example\n\nMinimal project setup:\n\n```bash\npnpm add -D @alexey-gara/ag-eslint-ts eslint typescript prettier\n```\n\n`eslint.config.mjs`:\n\n```js\nimport agConfig from '@alexey-gara/ag-eslint-ts';\n\nexport default agConfig;\n```\n\n---\n\n## FAQ\n\n### Why do I need `.npmrc`?\n\nBecause `pnpm` isolates dependencies.  \nWithout hoisting, ESLint may fail to find plugins like `eslint-plugin-import`.\n\n---\n\n### Does this work with monorepos?\n\nYes.  \nThis config is designed to work well with `pnpm` workspaces and monorepos.\n\n---\n\n### Can I override rules?\n\nAbsolutely:\n\n```js\nexport default [\n  ...agConfig,\n  {\n    rules: {\n      'no-console': 'warn'\n    }\n  }\n];\n```\n\n---\n\n### Do I need Prettier separately?\n\nYes — Prettier is included in the setup but must still be installed as a dependency.\n\n---\n\n## License\n\n[MIT](https://github.com/AlexeyGara/ag-eslint-ts/blob/main/LICENSE)\n\n---\n\n## ESLint Rules Overview\n\nThis configuration extends multiple rule sets and plugins and is based on:\n- `typescript-eslint` recommended rules\n- `eslint-plugin-import`\n- `@stylistic/eslint-plugin-ts`\n+ full list of rules are here [.eslint-rules.json](https://github.com/AlexeyGara/ag-eslint-ts/blob/main/.eslint-rules.json)\n+ inspect all rules - [https://alexeygara.github.io/ag-eslint-ts/rules](https://alexeygara.github.io/ag-eslint-ts/rules)\n\nTo see the full resolved list of rules used in your project, run:\n\n```bash\nnpx eslint --print-config index.ts\n```\n\n> Replace `index.ts` with any file from your project.\n\n## TypeScript Configuration Overview\n\nThis package provides a base `tsconfig.json` with strict and modern TypeScript setup.\n\n### Target & Environment\n\n- `target`: `ES2020`\n- `module`: `ESNext`\n- `lib`: `ES2020`, `DOM`, `DOM.Iterable`\n- `moduleResolution`: `node`\n\n---\n\n### Core Features\n\n- Decorators enabled:\n    - `experimentalDecorators`\n    - `emitDecoratorMetadata`\n\n- Optimized for bundlers:\n    - `isolatedModules`\n    - `moduleDetection: \"force\"`\n    - `noEmit: true`\n\n---\n\n### Strictness\n\nStrict mode is fully enabled:\n\n- `strict`\n- `strictNullChecks`\n- `strictFunctionTypes`\n- `strictBindCallApply`\n- `strictPropertyInitialization`\n\n---\n\n### Safety Rules\n\n- `noImplicitAny`\n- `noImplicitThis`\n- `noImplicitReturns`\n- `noImplicitOverride`\n\n---\n\n### Code Quality\n\n- `noUnusedLocals`\n- `noUnusedParameters`\n- `noFallthroughCasesInSwitch`\n- `noPropertyAccessFromIndexSignature`\n\n---\n\n### Trade-offs / Relaxed Rules\n\nThese are intentionally less strict for better DX:\n\n- `useUnknownInCatchVariables: false`\n- `noUncheckedIndexedAccess: false`\n- `exactOptionalPropertyTypes: false`\n\n---\n\nTo inspect the fully resolved configuration, run:\n\n```bash\nnpx tsc --showConfig\n```\n","readmeFilename":"README.md","homepage":"https://github.com/AlexeyGara/ag-eslint-ts#readme","repository":{"type":"git","url":"git+https://github.com/AlexeyGara/ag-eslint-ts.git"},"bugs":{"url":"https://github.com/AlexeyGara/ag-eslint-ts/issues"}}