{"_id":"@a11y-guard/core","name":"@a11y-guard/core","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@a11y-guard/core","version":"1.0.0","description":"Core rule engine and compliance mappings for a11y-guard","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Zunaib/a11y-guard.git","directory":"packages/core"},"homepage":"https://github.com/Zunaib/a11y-guard#readme","publishConfig":{"access":"public"},"dependencies":{"htmlparser2":"^9.1.0","domhandler":"^5.0.3","domutils":"^3.1.0","css-select":"^5.1.0","wcag-contrast":"^3.0.0","@babel/parser":"^7.24.0"},"devDependencies":{"@babel/types":"^7.24.0","tsup":"^8.0.0","vitest":"^2.0.0","typescript":"^5.5.0"},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","lint":"eslint src","clean":"rm -rf dist"},"_id":"@a11y-guard/core@1.0.0","bugs":{"url":"https://github.com/Zunaib/a11y-guard/issues"},"_integrity":"sha512-zG1bybHzcnAk3R6x8QrRo9ljOU1qW1oVtyl8H2EnM6WptpaJH2ewz+W24XRKS4ZMSP2ZH/9o09i6COeakqDIvg==","_resolved":"/private/var/folders/fx/6_j04p_n1x7gnglswxk7cskc0000gp/T/891f2e061a7fceac877eb90757097b01/a11y-guard-core-1.0.0.tgz","_from":"file:a11y-guard-core-1.0.0.tgz","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-zG1bybHzcnAk3R6x8QrRo9ljOU1qW1oVtyl8H2EnM6WptpaJH2ewz+W24XRKS4ZMSP2ZH/9o09i6COeakqDIvg==","shasum":"3ecc63c3887fbad79505e534b198779b642b0b86","tarball":"https://registry.npmjs.org/@a11y-guard/core/-/core-1.0.0.tgz","fileCount":9,"unpackedSize":675468,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDoAkRZ56BV0D+hqO6pSHXUlnLbr2FyxIQYYKkH7GlkGAIgRvnsUqlvawoMmunfKdxdxrOD3UroWTuBtuMDA8tyaU0="}]},"_npmUser":{"name":"zunaib.imtiaz","email":"zunaib60@gmail.com"},"directories":{},"maintainers":[{"name":"zunaib.imtiaz","email":"zunaib60@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core_1.0.0_1778453049818_0.9737542933063625"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-10T22:44:09.676Z","1.0.0":"2026-05-10T22:44:10.010Z","modified":"2026-05-10T22:44:10.237Z"},"maintainers":[{"name":"zunaib.imtiaz","email":"zunaib60@gmail.com"}],"description":"Core rule engine and compliance mappings for a11y-guard","homepage":"https://github.com/Zunaib/a11y-guard#readme","repository":{"type":"git","url":"git+https://github.com/Zunaib/a11y-guard.git","directory":"packages/core"},"bugs":{"url":"https://github.com/Zunaib/a11y-guard/issues"},"license":"MIT","readme":"# @a11y-guard/core\n\nThe rule engine and compliance database that powers a11y-guard. Audits HTML strings against 36 WCAG rules and maps every violation to the exact law and jurisdiction that requires it.\n\n## Install\n\n```bash\nnpm install @a11y-guard/core\n# or\npnpm add @a11y-guard/core\n```\n\n## Quick start\n\n```ts\nimport { runAudit, format } from '@a11y-guard/core';\n\nconst result = runAudit({\n  html: '<img src=\"logo.png\">',\n  regions: ['US', 'EU'],\n  level: 'AA',\n});\n\nconsole.log(result.violations);\n// [{ ruleId: 'missing-alt-text', severity: 'error', laws: ['ADA', 'EAA'], regions: ['US', 'EU'], ... }]\n\n// Pretty-print to stdout\nprocess.stdout.write(format(result, { regions: ['US', 'EU'] }, 'index.html'));\n```\n\n## API\n\n### `runAudit(options)`\n\n```ts\nimport { runAudit } from '@a11y-guard/core';\n\nconst result = runAudit({\n  html: string,            // HTML string to audit (required)\n  file?: string,           // filename shown in violation output\n  isComponentFile?: boolean, // true for .tsx/.jsx — skips document-level rules\n  regions?: Region[],      // filter rules to these jurisdictions\n  laws?: Law[],            // filter rules to these laws\n  disabilityTypes?: DisabilityType[],\n  level?: 'A' | 'AA' | 'AAA',        // default 'AA'\n  wcagVersion?: '2.0' | '2.1' | '2.2', // default '2.1'\n  rules?: Record<string, 'error' | 'warning' | 'info' | 'off'>, // per-rule overrides\n});\n```\n\nReturns an `AuditResult`:\n\n```ts\ninterface AuditResult {\n  violations: Violation[];   // severity === 'error'\n  warnings: Violation[];     // severity === 'warning' | 'info'\n  passed: number;            // rules that ran with no findings\n  summary: ComplianceSummary;\n}\n\ninterface Violation {\n  ruleId: string;\n  severity: 'error' | 'warning' | 'info';\n  message: string;\n  suggestion: string;\n  element?: string;          // outerHTML snippet\n  file?: string;\n  line?: number;\n  col?: number;\n  laws: Law[];               // laws that require this criterion\n  regions: Region[];         // jurisdictions affected\n  wcagCriterion: WcagCriterion;\n}\n```\n\n### `format(result, config, file)`\n\nReturns a formatted string. Uses the `reporter` field in config:\n\n| `reporter` | Output |\n|---|---|\n| `'pretty'` (default) | Human-readable terminal output |\n| `'json'` | Full JSON object |\n| `'sarif'` | SARIF 2.1 (GitHub Code Scanning) |\n| `'github-actions'` | `::error` / `::warning` annotations |\n\n### `formatHtml(results, config)`\n\nGenerates a self-contained dark-theme HTML report aggregating multiple files:\n\n```ts\nimport { formatHtml } from '@a11y-guard/core';\nimport { writeFileSync } from 'fs';\n\nconst report = formatHtml(\n  [{ result, file: 'src/App.tsx' }, { result: result2, file: 'index.html' }],\n  { regions: ['US', 'EU'] }\n);\nwriteFileSync('a11y-report.html', report);\n```\n\n### `parseJsx(source, filename?)`\n\nConverts JSX/TSX source to an HTML string suitable for `runAudit`. Used internally by the CLI for `.tsx`/`.jsx` files.\n\n```ts\nimport { parseJsx, runAudit } from '@a11y-guard/core';\nimport { readFileSync } from 'fs';\n\nconst source = readFileSync('src/Button.tsx', 'utf-8');\nconst html = parseJsx(source, 'src/Button.tsx');\nconst result = runAudit({ html, isComponentFile: true, regions: ['US'] });\n```\n\n### `defineConfig(config)`\n\nType-safe helper for config files:\n\n```ts\n// a11y-guard.config.ts\nimport { defineConfig } from '@a11y-guard/core';\n\nexport default defineConfig({\n  regions: ['US', 'EU'],\n  level: 'AA',\n  failOn: 'error',\n  rules: {\n    'color-contrast': 'error',\n    'focus-visible': 'warning',\n  },\n});\n```\n\n## Regions\n\n| Code | Jurisdiction | Primary law(s) |\n|---|---|---|\n| `US` | United States | ADA, Section 508 |\n| `EU` | European Union | EAA, EN 301 549 |\n| `UK` | United Kingdom | Equality Act, PSBAR |\n| `CA` | Canada | AODA, ACA |\n| `AU` | Australia | DDA |\n| `DE` | Germany | BITV 2.0 |\n| `FR` | France | RGAA |\n| `BR` | Brazil | LBI 13.146 |\n| `JP` | Japan | JIS X 8341-3 |\n| `NZ` `IL` `IN` `ES` `NL` `SE` `NO` `DK` `FI` | — | EN 301 549 / regional |\n\n## Rules\n\n36 rules across six categories:\n\n**Visual** — `missing-alt-text`, `color-contrast`, `non-text-contrast`, `text-resize`, `images-of-text`, `focus-visible`, `target-size`\n\n**Auditory** — `video-captions`, `audio-description`, `live-captions`, `audio-control`\n\n**Motor** — `keyboard-accessible`, `keyboard-trap`, `focus-order`, `label-in-name`, `pointer-gestures`, `skip-links`\n\n**Cognitive** — `page-title`, `link-purpose`, `error-identification`, `error-suggestion`, `label-association`, `language-parts`, `on-input`, `consistent-navigation`, `timeout-adjustable`\n\n**Seizure** — `animation-from-interactions`\n\n**Structural** — `heading-order`, `landmark-regions`, `aria-required-attr`, `aria-valid-attr`, `aria-valid-attr-value`, `duplicate-id`, `html-has-lang`, `list-structure`, `table-headers`\n\n## License\n\nMIT — see [LICENSE](../../LICENSE) in the root of the repository.\n","readmeFilename":"README.md","_rev":"1-4bf8d67da46451775f8e696d45569f03"}