Files
lage-chat-control/frontend/scripts/audit-a11y.mjs
T
sucupira e091ec75f7 feat: migre le quiz, renomme en Lagé Chat Control, nettoie l'ère Astro
- Quiz de résistance (/quiz) migré d'Astro vers Svelte 5 : 12 questions,
  contenu fusionné dans content/quiz.json, score calculé localement
  (aucun envoi), barres par domaine, recommandations liées à l'annuaire
  réel (/outils?cat=…), persistance locale, partage natif/presse-papier.
  Audit axe-core : 0 violation.
- Renommage complet « Exit Chat Control » → « Lagé Chat Control » :
  i18n fr/gcf, manifest PWA, package.json, README, design system.
- README racine et frontend/README.md réécrits pour le projet Svelte :
  lancement local (pnpm dev) et déploiement VPS (renvoi vers
  docs/DEPLOYMENT.md), en français.
- CONTRIBUTING.md adapté à la nouvelle structure (content/outils/,
  forge labola) en conservant la politique éditoriale de confiance.
- Nettoyage : suppression de tout l'outillage Astro devenu inutile
  (src/, public/, scripts/, tests/, migration/, docker/, configs racine
  eslint/prettier/vitest/playwright/tsconfig, CI GitHub Actions, script
  de migration one-shot). robots.txt et security.txt recréés sous
  frontend/static/ avec les bonnes références (labola).
- Fix : pin pnpm via frontend/pnpm-workspace.yaml (onlyBuiltDependencies/
  allowBuilds pour esbuild) après suppression du package.json racine qui
  perturbait la résolution de version de corepack.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-10 14:02:54 -04:00

25 lines
997 B
JavaScript

// Audit axe-core des pages clés servies sur localhost:4173
import { chromium } from '@playwright/test'
import { AxeBuilder } from '@axe-core/playwright'
const PAGES = ['/', '/outils', '/outils/signal', '/outils/tor', '/contribuer', '/quiz']
const browser = await chromium.launch()
const context = await browser.newContext()
const page = await context.newPage()
let total = 0
for (const path of PAGES) {
await page.goto(`http://localhost:4173${path}`, { waitUntil: 'networkidle' })
const results = await new AxeBuilder({ page }).withTags(['wcag2a', 'wcag2aa', 'wcag22aa']).analyze()
total += results.violations.length
console.log(`\n═══ ${path}${results.violations.length} violation(s)`)
for (const v of results.violations) {
console.log(` [${v.impact}] ${v.id}: ${v.help}`)
for (const n of v.nodes.slice(0, 3)) console.log(`${n.target.join(' ')}`)
}
}
await browser.close()
console.log(`\nTOTAL: ${total} violation(s)`)
process.exit(total > 0 ? 1 : 0)