{"_id":"@a11yci/lint","_rev":"3-084c55da6de867d548364f792ac64ac6","name":"@a11yci/lint","dist-tags":{"latest":"0.5.0"},"versions":{"0.3.0":{"name":"@a11yci/lint","version":"0.3.0","license":"SEE LICENSE IN LICENSE","_id":"@a11yci/lint@0.3.0","maintainers":[{"name":"innerspark","email":"mike@innersparkmedia.com"}],"dist":{"shasum":"c0adbed0d8b3aae9745f2225c28bd835e241f29e","tarball":"https://registry.npmjs.org/@a11yci/lint/-/lint-0.3.0.tgz","fileCount":19,"integrity":"sha512-TpasJzP4fUD07lhXPMqxGTvtgEdYT0APbDELYrAegKocbTpBwK5noL/K9Ul3k7fYRDokxILxBOgfCN6Ptcn+qg==","signatures":[{"sig":"MEUCICYSUHyMW+HE/4y9pkxzhv+PO6+2YGrLD7jjGBOsWrkuAiEAlxtNZFBw1kbZBVVjSDrUN7Z02LEBMBL94iOMHgUXXwQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52194},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"79a2bd8b8c61c81d4f3f59b73eaf01b06d01c9ba","scripts":{"build":"tsc -b","prepublishOnly":"tsc -b"},"_npmUser":{"name":"innerspark","email":"mike@innersparkmedia.com"},"_npmVersion":"11.16.0","description":"Authoring-time accessibility linter: catch a11y anti-patterns in JSX/TSX and HTML source before they render.","directories":{},"_nodeVersion":"25.4.0","dependencies":{"parse5":"^7.1.2","typescript":"^5.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/lint_0.3.0_1780664816367_0.3758793119899966","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@a11yci/lint","version":"0.4.0","license":"SEE LICENSE IN LICENSE","_id":"@a11yci/lint@0.4.0","maintainers":[{"name":"innerspark","email":"mike@innersparkmedia.com"}],"dist":{"shasum":"b16418dd53f8a5c807a50f2bcfd96ece0e70e2e3","tarball":"https://registry.npmjs.org/@a11yci/lint/-/lint-0.4.0.tgz","fileCount":19,"integrity":"sha512-RuaCh5ZnsgmwN6cooVUtM5CiyHWowetRiJ90umEkd7OxZb7TUk87T0KUBmLg4IRoLrkddBhHvxfdhU5voQqZKw==","signatures":[{"sig":"MEQCIHKnYew10B1hIG9KVJqXWYo/ICB1VSSP0rKE+s51vA7uAiBWsNXdwsq3o1jrmvizFCFcEYm1NfxKlAyBGfTCBBQeEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52194},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"94008e548b50bbb6852fd8db56b3c1abb284bc71","scripts":{"build":"tsc -b","prepublishOnly":"tsc -b"},"_npmUser":{"name":"innerspark","email":"mike@innersparkmedia.com"},"_npmVersion":"11.16.0","description":"Authoring-time accessibility linter: catch a11y anti-patterns in JSX/TSX and HTML source before they render.","directories":{},"_nodeVersion":"25.4.0","dependencies":{"parse5":"^7.1.2","typescript":"^5.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/lint_0.4.0_1780670043434_0.011333169163424417","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@a11yci/lint","version":"0.5.0","description":"Authoring-time accessibility linter: catch a11y anti-patterns in JSX/TSX and HTML source before they render.","license":"SEE LICENSE IN LICENSE","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"publishConfig":{"access":"public"},"scripts":{"build":"tsc -b","prepublishOnly":"tsc -b"},"dependencies":{"parse5":"^7.1.2","typescript":"^5.4.0"},"_id":"@a11yci/lint@0.5.0","gitHead":"2328a6ee088b1c5e1544c4066f71bb516d93c78d","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-liASeX0tDBTtJ3fTuCng98hNgHOUywCPKrSaOxNBV9PnTfewjcdGdyiqZr6/d7Xk/uyEWvaDTUpytvyFoRhXjg==","shasum":"7e97d5e7be0a3a2535fdc1252cf58b73a832ada5","tarball":"https://registry.npmjs.org/@a11yci/lint/-/lint-0.5.0.tgz","fileCount":19,"unpackedSize":52194,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQChqqsX9Qy1kwhKGw+Jo5HbCy3JMoKhW6Dgb9QK+ExDCwIhAK4SHR4VZ7zmf+RDm08N8B+2IGqMvb44zlp7LLoFmGW5"}]},"_npmUser":{"name":"innerspark","email":"mike@innersparkmedia.com"},"directories":{},"maintainers":[{"name":"innerspark","email":"mike@innersparkmedia.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lint_0.5.0_1780679189169_0.7045795392012923"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-05T13:06:56.141Z","modified":"2026-06-05T17:06:29.456Z","0.3.0":"2026-06-05T13:06:56.537Z","0.4.0":"2026-06-05T14:34:03.567Z","0.5.0":"2026-06-05T17:06:29.319Z"},"license":"SEE LICENSE IN LICENSE","description":"Authoring-time accessibility linter: catch a11y anti-patterns in JSX/TSX and HTML source before they render.","maintainers":[{"name":"innerspark","email":"mike@innersparkmedia.com"}],"readme":"# @a11yci/lint\n\nThe authoring-time layer of [a11y-ci](https://github.com/InnerSpark/a11y-ci).\nIt reads your source (JSX/TSX and HTML) and flags accessibility anti-patterns\n**before anything renders**, so they're caught in the editor or pre-commit\ninstead of in a rendered CI run.\n\nIt uses real parsers, never regex: parse5 for HTML, the TypeScript compiler for\nJSX/TSX. That's what keeps the false-positive rate low. It only reports what it\ncan confidently determine from the markup, and leaves contrast and computed-role\nchecks to the rendered `@a11yci/core` engine.\n\n```ts\nimport { lintPaths, lintSource } from '@a11yci/lint';\n\nconst findings = lintPaths(['src']);            // walk a directory\nconst inline = lintSource('<img src=\"a.png\">', 'a.html'); // one snippet\n```\n\n## Rules\n\n| Rule | Severity | WCAG | Catches |\n| --- | --- | --- | --- |\n| `img-alt` | error | 1.1.1 | `<img>` with no `alt` (and not marked decorative) |\n| `interactive-name` | error | 4.1.2 | `<button>` / `<a href>` with no text or accessible name |\n| `clickable-noninteractive` | warn | 2.1.1 | `<div>`/`<span>` with `onClick` but no role, tabindex, or key handler |\n| `input-label` | warn | 1.3.1 | form control with no `id`, no `aria-label`, and not wrapped in a `<label>` |\n| `positive-tabindex` | warn | 2.4.3 | `tabindex` greater than 0 |\n| `vague-link-text` | warn | 2.4.4 | link text like \"click here\" / \"read more\" |\n| `html-lang` | error | 3.1.1 | `<html>` with no `lang` |\n| `no-autofocus` | info | 3.2.1 | `autofocus` (moves focus on load) |\n| `obsolete-element` | error | 2.2.2 | `<marquee>` / `<blink>` |\n\nConservative by design: a dynamic attribute (`alt={x}`, `id={...}`) or an\nambiguous child suppresses the related rule rather than guessing.\n\n## CLI\n\n```bash\nnpx a11y-ci lint src\nnpx a11y-ci lint src --format json\nnpx a11y-ci lint src --fail-on warn   # exit non-zero on warn-or-worse\n```\n\nSource-available under the Elastic License 2.0 (see `LICENSE`): free to use and\nself-host, not to resell as a hosted service.\n","readmeFilename":"README.md"}