{"_id":"@coding-with-hassan/eslint-config-spa","_rev":"4-51f095cb2f13a0a14bdc2c68daadfdd5","name":"@coding-with-hassan/eslint-config-spa","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@coding-with-hassan/eslint-config-spa","version":"0.1.0","keywords":["eslint","eslintconfig","angular","typescript"],"author":{"name":"Hassan Khousheish"},"license":"MIT","_id":"@coding-with-hassan/eslint-config-spa@0.1.0","maintainers":[{"name":"khousheish","email":"khousheish@live.com"}],"homepage":"https://github.com/CodiNG-With-Hassan/hassan-devkit#readme","bugs":{"url":"https://github.com/CodiNG-With-Hassan/hassan-devkit/issues"},"dist":{"shasum":"c9eb9c0be736f5dc5ef188a522f5d05509716e80","tarball":"https://registry.npmjs.org/@coding-with-hassan/eslint-config-spa/-/eslint-config-spa-0.1.0.tgz","fileCount":4,"integrity":"sha512-QyUWQCt7LnNup+R6YX12F+TqDMYXmYKcmDX6Z4O1PgmS3h89YXfxKGz5x6qT8m9AOrKSNw54yS6XvzaiVNkxgA==","signatures":[{"sig":"MEQCIFtMkxlXvzIb+Tod9WD4fvcoRNDTK0fHF7GQY+ZdnvMVAiBlxt/fN1uRA7J32Bz/mAMzfnXR8Dg5Z/u0oa5xHKe0ig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4561},"main":"./index.js","_from":"file:coding-with-hassan-eslint-config-spa-0.1.0.tgz","exports":{".":"./index.js"},"_npmUser":{"name":"khousheish","email":"khousheish@live.com"},"_resolved":"/tmp/22a87cf64e0e0017498c319ebb049b1a/coding-with-hassan-eslint-config-spa-0.1.0.tgz","_integrity":"sha512-QyUWQCt7LnNup+R6YX12F+TqDMYXmYKcmDX6Z4O1PgmS3h89YXfxKGz5x6qT8m9AOrKSNw54yS6XvzaiVNkxgA==","repository":{"url":"git+https://github.com/CodiNG-With-Hassan/hassan-devkit.git","type":"git","directory":"packages/eslint-config-spa"},"_npmVersion":"10.8.2","description":"Shared ESLint flat config for Angular projects.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@eslint/js":"^10.0.1","angular-eslint":"21.4.0","typescript-eslint":"8.59.2","eslint-config-prettier":"^10.1.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=9","typescript":">=5"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config-spa_0.1.0_1779623193205_0.6719385735294303","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@coding-with-hassan/eslint-config-spa","version":"0.2.0","keywords":["eslint","eslintconfig","angular","typescript"],"author":{"name":"Hassan Khousheish"},"license":"MIT","_id":"@coding-with-hassan/eslint-config-spa@0.2.0","maintainers":[{"name":"khousheish","email":"khousheish@live.com"}],"homepage":"https://github.com/CodiNG-With-Hassan/hassan-devkit#readme","bugs":{"url":"https://github.com/CodiNG-With-Hassan/hassan-devkit/issues"},"dist":{"shasum":"5e149d199cfab51b250eea3e5e3ff8d55c378db7","tarball":"https://registry.npmjs.org/@coding-with-hassan/eslint-config-spa/-/eslint-config-spa-0.2.0.tgz","fileCount":4,"integrity":"sha512-8WMIexHbOOIExfpkFTlD50SOKDcrHMXiQvIUZBUBtnLaOJBthYkdTPTSbW1af/xuEBVlKb8r4lCHX4bGNCUaXA==","signatures":[{"sig":"MEYCIQCXIq/tUX4wr8Jt+00/IQsmyve/AflxmtfaQrjHHVEZrwIhAJw/gnOpq1QkdUBhKNRebP38JAn3OXkgDN4GbqN9ZUNj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@coding-with-hassan%2feslint-config-spa@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5536},"main":"./index.js","_from":"file:coding-with-hassan-eslint-config-spa-0.2.0.tgz","exports":{".":"./index.js"},"_npmUser":{"name":"khousheish","email":"khousheish@live.com"},"_resolved":"/tmp/98d1e63b25ffbcc987af69cf7ef3ddbe/coding-with-hassan-eslint-config-spa-0.2.0.tgz","_integrity":"sha512-8WMIexHbOOIExfpkFTlD50SOKDcrHMXiQvIUZBUBtnLaOJBthYkdTPTSbW1af/xuEBVlKb8r4lCHX4bGNCUaXA==","repository":{"url":"git+https://github.com/CodiNG-With-Hassan/hassan-devkit.git","type":"git","directory":"packages/eslint-config-spa"},"_npmVersion":"10.8.2","description":"Shared ESLint flat config for Angular projects.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@eslint/js":"^10.0.1","angular-eslint":"21.4.0","typescript-eslint":"8.59.2","eslint-config-prettier":"^10.1.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=9","typescript":">=5"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config-spa_0.2.0_1786399054093_0.7541619984037948","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@coding-with-hassan/eslint-config-spa","version":"0.3.0","keywords":["eslint","eslintconfig","angular","typescript"],"author":{"name":"Hassan Khousheish"},"license":"MIT","_id":"@coding-with-hassan/eslint-config-spa@0.3.0","maintainers":[{"name":"khousheish","email":"khousheish@live.com"}],"homepage":"https://github.com/CodiNG-With-Hassan/hassan-devkit#readme","bugs":{"url":"https://github.com/CodiNG-With-Hassan/hassan-devkit/issues"},"dist":{"shasum":"3f795488cb0e6b08159734b3264296aced6cdbea","tarball":"https://registry.npmjs.org/@coding-with-hassan/eslint-config-spa/-/eslint-config-spa-0.3.0.tgz","fileCount":4,"integrity":"sha512-xuz9k7azNVv5aA4Waj2DIRvZSt6i3FBikS2SfX5/tzSG32GB7bN0zz07hUIFx+JRYreduagvTu00lTS6wW2irg==","signatures":[{"sig":"MEQCIF4TxYZmAdGOljKuozVunhOfTblU2JDrQn6i0t++EFnMAiBa7i2lvpSxH4BsuRcUR1xKXa+J79E0k9ILlwihc0sD4w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@coding-with-hassan%2feslint-config-spa@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5541},"main":"./index.js","_from":"file:coding-with-hassan-eslint-config-spa-0.3.0.tgz","exports":{".":"./index.js"},"_npmUser":{"name":"khousheish","email":"khousheish@live.com"},"_resolved":"/tmp/204bd207355448def1120e220dbc12a9/coding-with-hassan-eslint-config-spa-0.3.0.tgz","_integrity":"sha512-xuz9k7azNVv5aA4Waj2DIRvZSt6i3FBikS2SfX5/tzSG32GB7bN0zz07hUIFx+JRYreduagvTu00lTS6wW2irg==","repository":{"url":"git+https://github.com/CodiNG-With-Hassan/hassan-devkit.git","type":"git","directory":"packages/eslint-config-spa"},"_npmVersion":"10.8.2","description":"Shared ESLint flat config for Angular projects.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@eslint/js":"^10.0.1","angular-eslint":"22.1.0","typescript-eslint":"8.67.0","eslint-config-prettier":"^10.1.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=9","typescript":">=5 <6.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config-spa_0.3.0_1788558534690_0.5127252989779774","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"_id":"@coding-with-hassan/eslint-config-spa@0.4.0","bugs":{"url":"https://github.com/CodiNG-With-Hassan/hassan-devkit/issues"},"dist":{"shasum":"4bbd2b90d23dc07be72d3afe2748a2fd4e4ec7c6","tarball":"https://registry.npmjs.org/@coding-with-hassan/eslint-config-spa/-/eslint-config-spa-0.4.0.tgz","fileCount":4,"integrity":"sha512-hUkNuqXBxxYib4+4v1Uwr3WPs1bdxu9L/kOFHn42Gh9gjDEUoBjtLwk09LMxvOxK70i69fCkw6y0j1p73DKmgQ==","signatures":[{"sig":"MEYCIQCuDn8EW09zrqKjc2nTkrwZHAO8a6NRS3cf7aQ0S0Lf8QIhAJglFWwt/L8q0E050L6X0CAKklF/XLkThugINdGEe+Dc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDk1BOUPlbNes6wG1gJo9nOm/7rA37jXz1nH1/jUZTVXwIhAJnWGqQYwf9XgQsH8nrX+LBtmgi1DEckBLm7TVYXVkqH"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@coding-with-hassan%2feslint-config-spa@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6173},"main":"./index.js","name":"@coding-with-hassan/eslint-config-spa","_from":"file:coding-with-hassan-eslint-config-spa-0.4.0.tgz","author":{"name":"Hassan Khousheish"},"exports":{".":"./index.js"},"license":"MIT","version":"0.4.0","_npmUser":{"name":"khousheish","email":"khousheish@live.com"},"homepage":"https://github.com/CodiNG-With-Hassan/hassan-devkit#readme","keywords":["eslint","eslintconfig","angular","typescript"],"_resolved":"/tmp/399970e2d3468e6c8c0aeadedef7acc7/coding-with-hassan-eslint-config-spa-0.4.0.tgz","_integrity":"sha512-hUkNuqXBxxYib4+4v1Uwr3WPs1bdxu9L/kOFHn42Gh9gjDEUoBjtLwk09LMxvOxK70i69fCkw6y0j1p73DKmgQ==","repository":{"url":"git+https://github.com/CodiNG-With-Hassan/hassan-devkit.git","type":"git","directory":"packages/eslint-config-spa"},"_npmVersion":"10.8.2","description":"Shared ESLint flat config for Angular projects.","directories":{},"maintainers":[{"name":"khousheish","email":"khousheish@live.com"}],"_nodeVersion":"20.20.2","dependencies":{"@eslint/js":"^10.0.1","angular-eslint":"22.1.0","typescript-eslint":"8.67.0","eslint-config-prettier":"^10.1.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=9","typescript":">=5 <6.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-config-spa_0.4.0_1789491554951_0.9948526178679162"}}},"time":{"created":"2026-05-24T11:46:33.026Z","modified":"2026-09-15T16:59:15.392Z","0.1.0":"2026-05-24T11:46:33.446Z","0.2.0":"2026-08-10T21:57:34.229Z","0.3.0":"2026-09-04T21:48:54.839Z","0.4.0":"2026-09-15T16:59:15.029Z"},"bugs":{"url":"https://github.com/CodiNG-With-Hassan/hassan-devkit/issues"},"author":{"name":"Hassan Khousheish"},"license":"MIT","homepage":"https://github.com/CodiNG-With-Hassan/hassan-devkit#readme","keywords":["eslint","eslintconfig","angular","typescript"],"repository":{"url":"git+https://github.com/CodiNG-With-Hassan/hassan-devkit.git","type":"git","directory":"packages/eslint-config-spa"},"description":"Shared ESLint flat config for Angular projects.","maintainers":[{"name":"khousheish","email":"khousheish@live.com"}],"readme":"# @coding-with-hassan/eslint-config-spa\n\nShared ESLint flat config for Angular projects.\n\n## Install\n\n```sh\npnpm add -D @coding-with-hassan/eslint-config-spa eslint typescript\n```\n\n## Use\n\nCreate `eslint.config.js` in your Angular project root:\n\n```js\nmodule.exports = require('@coding-with-hassan/eslint-config-spa')({\n  prefix: 'app',\n  tsconfigRootDir: __dirname,\n});\n```\n\nThe `prefix` is the selector prefix used for both component (`<app-foo>`) and directive (`appFoo`) selector rules. Each client typically picks its own — e.g. `bridal`, `autozaak`, `lpx`.\n\n`tsconfigRootDir` anchors typescript-eslint to the project the config belongs to. Since typescript-eslint 8.5x it is effectively required: without it the parser infers the root from the process cwd and fails in monorepos when several candidates exist (editors run the ESLint server from the monorepo root, producing `multiple candidate TSConfigRootDirs are present` on every file).\n\nFor project-specific extras (a custom rule, a folder-specific override), pass an `extra` array of additional flat-config entries:\n\n```js\nmodule.exports = require('@coding-with-hassan/eslint-config-spa')({\n  prefix: 'autozaak',\n  extra: [\n    {\n      files: ['**/*.spec.ts'],\n      rules: { '@typescript-eslint/no-explicit-any': 'off' },\n    },\n  ],\n});\n```\n\n## What's in it\n\n- `@eslint/js` recommended\n- `typescript-eslint` recommended + stylistic\n- `angular-eslint` ts-recommended for `.ts`\n- `angular-eslint` template-recommended + template-accessibility for `.html`\n- `eslint-config-prettier` to disable rules that conflict with Prettier\n- Customisable selector prefix for components and directives\n- `no-console` as an error, with `console.warn` / `console.error` allowed — debug `console.log`\n  calls never reach `main`. One legitimate line (an SSR startup log) takes\n  `// eslint-disable-next-line no-console -- <reason>`; a project that must relax the rule\n  overrides it in `extra`.\n","readmeFilename":"README.md"}