diff --git a/.github/workflows/ci.yml b/.github/workflows/accessibility.yml similarity index 98% rename from .github/workflows/ci.yml rename to .github/workflows/accessibility.yml index dd3f8fd..a8bae86 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/accessibility.yml @@ -1,4 +1,4 @@ -name: CI +name: Accessibility on: push: branches: main diff --git a/.github/workflows/links.yml b/.github/workflows/links.yml index 77c0b70..be4c168 100644 --- a/.github/workflows/links.yml +++ b/.github/workflows/links.yml @@ -1,4 +1,4 @@ -name: Links +name: Valid Links on: repository_dispatch: diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 3e1c7ac..6b94548 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,4 +1,8 @@ { - "recommendations": ["astro-build.astro-vscode", "dbaeumer.vscode-eslint"], + "recommendations": [ + "astro-build.astro-vscode", + "dbaeumer.vscode-eslint", + "deque-systems.vscode-axe-linter" + ], "unwantedRecommendations": [] } diff --git a/README.md b/README.md index ac06367..a6cf707 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,14 @@ If you need help with your legal name change or gender marker change, come join | `src/styles` | Global site styles. | | `tests` | End-to-end tests written using Playwright. | -## Broken Links +## Accessibility + +[![Accessibility](https://github.com/namesakefyi/namesake.fyi/actions/workflows/accessibility.yml/badge.svg)](https://github.com/namesakefyi/namesake.fyi/actions/workflows/accessibility.yml) + +Namesake aims to conform to the Level AA accessibility standards outlined in the [WCAG 2.2 specification](https://www.w3.org/TR/WCAG22/). If you experience an issue with accessing any part of this site, please [file an issue](https://github.com/namesakefyi/namesake.fyi/issues) and we will correct it. + +## Link Checking + +[![Valid Links](https://github.com/namesakefyi/namesake.fyi/actions/workflows/links.yml/badge.svg)](https://github.com/namesakefyi/namesake.fyi/actions/workflows/links.yml) A weekly [GitHub workflow](https://github.com/namesakefyi/namesake.fyi/actions/workflows/links.yml) scans the site for broken links and will open an [issue](https://github.com/namesakefyi/namesake.fyi/issues) if one is found. diff --git a/eslint.config.js b/eslint.config.js index 87dfdb2..d268686 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,10 +1,3 @@ import eslintPluginAstro from "eslint-plugin-astro"; -export default [ - ...eslintPluginAstro.configs.recommended, - { - rules: { - "eol-last": "always", - }, - }, -]; +export default [...eslintPluginAstro.configs["jsx-a11y-recommended"]]; diff --git a/package.json b/package.json index 5b1a848..70271e3 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "build": "astro check && astro build", "preview": "astro preview", "astro": "astro", + "lint": "eslint .", "test": "playwright test --reporter=html", "check-links": "lychee --config .lychee.toml ." }, @@ -34,8 +35,8 @@ "devDependencies": { "@playwright/test": "^1.44.1", "@types/node": "^20.14.8", - "@typescript-eslint/parser": "^7.13.1", - "eslint": "^8.57.0", + "@typescript-eslint/parser": "^7.14.1", + "eslint": "^9.5.0", "eslint-plugin-astro": "^1.2.2", "eslint-plugin-jsx-a11y": "^6.9.0", "prettier": "^3.3.2", diff --git a/playwright.config.ts b/playwright.config.ts index 723c4d2..2be6e15 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -11,14 +11,12 @@ export default defineConfig({ baseURL: "http://localhost:4321", trace: "on-first-retry", }, - projects: [ { name: "chromium", use: { ...devices["Desktop Chrome"] }, }, ], - webServer: { command: "pnpm dev", url: "http://localhost:4321", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6683f83..48d70ed 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -65,17 +65,17 @@ devDependencies: specifier: ^20.14.8 version: 20.14.8 '@typescript-eslint/parser': - specifier: ^7.13.1 - version: 7.13.1(eslint@8.57.0)(typescript@5.5.2) + specifier: ^7.14.1 + version: 7.14.1(eslint@9.5.0)(typescript@5.5.2) eslint: - specifier: ^8.57.0 - version: 8.57.0 + specifier: ^9.5.0 + version: 9.5.0 eslint-plugin-astro: specifier: ^1.2.2 - version: 1.2.2(eslint@8.57.0)(typescript@5.5.2) + version: 1.2.2(eslint@9.5.0)(typescript@5.5.2) eslint-plugin-jsx-a11y: specifier: ^6.9.0 - version: 6.9.0(eslint@8.57.0) + version: 6.9.0(eslint@9.5.0) prettier: specifier: ^3.3.2 version: 3.3.2 @@ -1500,13 +1500,13 @@ packages: dev: false optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): + /@eslint-community/eslint-utils@4.4.0(eslint@9.5.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.57.0 + eslint: 9.5.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1515,14 +1515,25 @@ packages: engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/config-array@0.16.0: + resolution: {integrity: sha512-/jmuSd74i4Czf1XXn7wGRWZCuyaUZ330NH1Bek0Pplatt4Sy1S5haN21SCLLdbeKslQ+S0wEJ+++v5YibSi+Lg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.5 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/eslintrc@3.1.0: + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: ajv: 6.12.6 debug: 4.3.5 - espree: 9.6.1 - globals: 13.24.0 + espree: 10.1.0 + globals: 14.0.0 ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -1532,9 +1543,14 @@ packages: - supports-color dev: true - /@eslint/js@8.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/js@9.5.0: + resolution: {integrity: sha512-A7+AOT2ICkodvtsWnxZP4Xxk3NbZ3VMHd8oihydLRGrJgqqdEz1qSeEgXYyT/Cu8h1TWWsQRejIx48mtjZ5y1w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + + /@eslint/object-schema@2.1.4: + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: true /@fastify/busboy@2.1.1: @@ -1542,26 +1558,14 @@ packages: engines: {node: '>=14'} dev: false - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.5 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.3: - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + /@humanwhocodes/retry@0.3.0: + resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + engines: {node: '>=18.18'} dev: true /@img/sharp-darwin-arm64@0.33.4: @@ -2091,8 +2095,8 @@ packages: resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} dev: false - /@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.5.2): - resolution: {integrity: sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==} + /@typescript-eslint/parser@7.14.1(eslint@9.5.0)(typescript@5.5.2): + resolution: {integrity: sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -2101,12 +2105,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 7.13.1 - '@typescript-eslint/types': 7.13.1 - '@typescript-eslint/typescript-estree': 7.13.1(typescript@5.5.2) - '@typescript-eslint/visitor-keys': 7.13.1 + '@typescript-eslint/scope-manager': 7.14.1 + '@typescript-eslint/types': 7.14.1 + '@typescript-eslint/typescript-estree': 7.14.1(typescript@5.5.2) + '@typescript-eslint/visitor-keys': 7.14.1 debug: 4.3.5 - eslint: 8.57.0 + eslint: 9.5.0 typescript: 5.5.2 transitivePeerDependencies: - supports-color @@ -2120,11 +2124,24 @@ packages: '@typescript-eslint/visitor-keys': 7.13.1 dev: true + /@typescript-eslint/scope-manager@7.14.1: + resolution: {integrity: sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.14.1 + '@typescript-eslint/visitor-keys': 7.14.1 + dev: true + /@typescript-eslint/types@7.13.1: resolution: {integrity: sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==} engines: {node: ^18.18.0 || >=20.0.0} dev: true + /@typescript-eslint/types@7.14.1: + resolution: {integrity: sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==} + engines: {node: ^18.18.0 || >=20.0.0} + dev: true + /@typescript-eslint/typescript-estree@7.13.1(typescript@5.5.2): resolution: {integrity: sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==} engines: {node: ^18.18.0 || >=20.0.0} @@ -2147,6 +2164,28 @@ packages: - supports-color dev: true + /@typescript-eslint/typescript-estree@7.14.1(typescript@5.5.2): + resolution: {integrity: sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 7.14.1 + '@typescript-eslint/visitor-keys': 7.14.1 + debug: 4.3.5 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.4 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.5.2) + typescript: 5.5.2 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/visitor-keys@7.13.1: resolution: {integrity: sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==} engines: {node: ^18.18.0 || >=20.0.0} @@ -2155,8 +2194,17 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@typescript-eslint/visitor-keys@7.14.1: + resolution: {integrity: sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.14.1 + eslint-visitor-keys: 3.4.3 + dev: true + /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: false /@vitejs/plugin-react@4.3.1(vite@5.3.1): resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==} @@ -2982,13 +3030,6 @@ packages: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dev: false - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - /dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} dependencies: @@ -3326,28 +3367,28 @@ packages: engines: {node: '>=12'} dev: false - /eslint-compat-utils@0.5.1(eslint@8.57.0): + /eslint-compat-utils@0.5.1(eslint@9.5.0): resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} engines: {node: '>=12'} peerDependencies: eslint: '>=6.0.0' dependencies: - eslint: 8.57.0 + eslint: 9.5.0 semver: 7.6.2 dev: true - /eslint-plugin-astro@1.2.2(eslint@8.57.0)(typescript@5.5.2): + /eslint-plugin-astro@1.2.2(eslint@9.5.0)(typescript@5.5.2): resolution: {integrity: sha512-3UUWo/gwk/YhurYpFKgLJswV33kR9zhtzXk+u2g3WE5Px07wDtWSR3PoyPadHERA4g/9TCCGjsimU/TZyUKxow==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.57.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0) '@jridgewell/sourcemap-codec': 1.4.15 '@typescript-eslint/types': 7.13.1 astro-eslint-parser: 1.0.2(typescript@5.5.2) - eslint: 8.57.0 - eslint-compat-utils: 0.5.1(eslint@8.57.0) + eslint: 9.5.0 + eslint-compat-utils: 0.5.1(eslint@9.5.0) globals: 15.6.0 postcss: 8.4.38 postcss-selector-parser: 6.1.0 @@ -3356,7 +3397,7 @@ packages: - typescript dev: true - /eslint-plugin-jsx-a11y@6.9.0(eslint@8.57.0): + /eslint-plugin-jsx-a11y@6.9.0(eslint@9.5.0): resolution: {integrity: sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==} engines: {node: '>=4.0'} peerDependencies: @@ -3371,7 +3412,7 @@ packages: damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 es-iterator-helpers: 1.0.19 - eslint: 8.57.0 + eslint: 9.5.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -3381,14 +3422,6 @@ packages: string.prototype.includes: 2.0.0 dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - /eslint-scope@8.0.1: resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3407,41 +3440,37 @@ packages: engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: true - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint@9.5.0: + resolution: {integrity: sha512-+NAOZFrW/jFTS3dASCGBxX1pkFD0/fsO+hfAkJ4TyYKwgsXZbqzrw+seCYFCcPCYXvnD67tAnglU7GQTz6kcVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0) '@eslint-community/regexpp': 4.10.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/config-array': 0.16.0 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.5.0 '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.0 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.5 - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.0.1 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 @@ -3463,15 +3492,6 @@ packages: eslint-visitor-keys: 4.0.0 dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.12.0 - acorn-jsx: 5.3.2(acorn@8.12.0) - eslint-visitor-keys: 3.4.3 - dev: true - /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -3578,11 +3598,11 @@ packages: resolution: {integrity: sha512-lMEyR3lSThlkK69+f/16OEyuii743iJGcZ6aIUKT5qYH9lGi7ENTYwuxh5NWWYSO6qs57we01nLxncW8kegJlw==} dev: false - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + /file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 dev: true /fill-range@7.1.1: @@ -3613,13 +3633,12 @@ packages: pkg-dir: 4.2.0 dev: false - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + /flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} dependencies: flatted: 3.3.1 keyv: 4.5.4 - rimraf: 3.0.2 dev: true /flatted@3.3.1: @@ -3637,10 +3656,6 @@ packages: is-callable: 1.2.7 dev: true - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - /fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -3741,28 +3756,14 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: false - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} dev: false - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 + /globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} dev: true /globals@15.6.0: @@ -3808,10 +3809,6 @@ packages: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: false - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true - /gray-matter@4.0.3: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} @@ -4024,18 +4021,6 @@ packages: engines: {node: '>=0.8.19'} dev: true - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - /internal-slot@1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} @@ -5030,12 +5015,6 @@ packages: es-object-atoms: 1.0.0 dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -5157,11 +5136,6 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -5536,14 +5510,6 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - /rollup-plugin-inject@3.0.2: resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. @@ -6030,11 +5996,6 @@ packages: prelude-ls: 1.2.1 dev: true - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - /type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} @@ -6659,10 +6620,6 @@ packages: strip-ansi: 7.1.0 dev: false - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - /ws@8.17.1: resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} diff --git a/tests/404.spec.ts b/tests/404.spec.ts deleted file mode 100644 index 29f69d3..0000000 --- a/tests/404.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -import AxeBuilder from "@axe-core/playwright"; -import { test, expect } from "@playwright/test"; - -test.describe("404", () => { - test.beforeEach(async ({ page }) => { - await page.goto("/404"); - }); - - test("should not have any automatically detectable accessibility issues", async ({ - page, - }, testInfo) => { - const accessibilityScanResults = await new AxeBuilder({ page }).analyze(); - - await testInfo.attach("accessibility-scan-results", { - body: JSON.stringify(accessibilityScanResults, null, 2), - contentType: "application/json", - }); - - expect(accessibilityScanResults.violations).toEqual([]); - }); -}); diff --git a/tests/accessibility.spec.ts b/tests/accessibility.spec.ts new file mode 100644 index 0000000..4e64c11 --- /dev/null +++ b/tests/accessibility.spec.ts @@ -0,0 +1,34 @@ +import AxeBuilder from "@axe-core/playwright"; +import { test, expect } from "@playwright/test"; + +const paths = [ + "/", + "/404", + "/about", + "/blog", + "/brand-assets", + "/press", + "/privacy", + "/terms", +]; + +test.describe("all pages", () => { + for (const path of paths) { + test(`${path} page should not have any automatically detectable accessibility issues`, async ({ + page, + }, testInfo) => { + await page.goto(path); + + const accessibilityScanResults = await new AxeBuilder({ + page, + }).analyze(); + + await testInfo.attach("accessibility-scan-results", { + body: JSON.stringify(accessibilityScanResults, null, 2), + contentType: "application/json", + }); + + expect(accessibilityScanResults.violations).toHaveLength(0); + }); + } +}); diff --git a/tests/blog.spec.ts b/tests/blog.spec.ts deleted file mode 100644 index b29dddf..0000000 --- a/tests/blog.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -import AxeBuilder from "@axe-core/playwright"; -import { test, expect } from "@playwright/test"; - -test.describe("blog", () => { - test.beforeEach(async ({ page }) => { - await page.goto("/blog"); - }); - - test("should not have any automatically detectable accessibility issues", async ({ - page, - }, testInfo) => { - const accessibilityScanResults = await new AxeBuilder({ page }).analyze(); - - await testInfo.attach("accessibility-scan-results", { - body: JSON.stringify(accessibilityScanResults, null, 2), - contentType: "application/json", - }); - - expect(accessibilityScanResults.violations).toEqual([]); - }); -}); diff --git a/tests/brand-assets.spec.ts b/tests/brand-assets.spec.ts deleted file mode 100644 index 65e23be..0000000 --- a/tests/brand-assets.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -import AxeBuilder from "@axe-core/playwright"; -import { test, expect } from "@playwright/test"; - -test.describe("brand assets", () => { - test.beforeEach(async ({ page }) => { - await page.goto("/brand-assets"); - }); - - test("should not have any automatically detectable accessibility issues", async ({ - page, - }, testInfo) => { - const accessibilityScanResults = await new AxeBuilder({ page }).analyze(); - - await testInfo.attach("accessibility-scan-results", { - body: JSON.stringify(accessibilityScanResults, null, 2), - contentType: "application/json", - }); - - expect(accessibilityScanResults.violations).toEqual([]); - }); -}); diff --git a/tests/chat.spec.ts b/tests/chat.spec.ts index 392a28e..9178dff 100644 --- a/tests/chat.spec.ts +++ b/tests/chat.spec.ts @@ -1,11 +1,8 @@ import { test, expect } from "@playwright/test"; test.describe("chat", () => { - test.beforeEach(async ({ page }) => { - await page.goto("/chat"); - }); - test("should redirect to Discord invite", async ({ page }) => { + await page.goto("/chat"); expect(page.url()).toContain("discord.com"); }); }); diff --git a/tests/index.spec.ts b/tests/index.spec.ts deleted file mode 100644 index b96f5aa..0000000 --- a/tests/index.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -import AxeBuilder from "@axe-core/playwright"; -import { test, expect } from "@playwright/test"; - -test.describe("homepage", () => { - test.beforeEach(async ({ page }) => { - await page.goto("/"); - }); - - test("should not have any automatically detectable accessibility issues", async ({ - page, - }, testInfo) => { - const accessibilityScanResults = await new AxeBuilder({ page }).analyze(); - - await testInfo.attach("accessibility-scan-results", { - body: JSON.stringify(accessibilityScanResults, null, 2), - contentType: "application/json", - }); - - expect(accessibilityScanResults.violations).toEqual([]); - }); -}); diff --git a/tests/press.spec.ts b/tests/press.spec.ts deleted file mode 100644 index b4c521e..0000000 --- a/tests/press.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -import AxeBuilder from "@axe-core/playwright"; -import { test, expect } from "@playwright/test"; - -test.describe("press", () => { - test.beforeEach(async ({ page }) => { - await page.goto("/press"); - }); - - test("should not have any automatically detectable accessibility issues", async ({ - page, - }, testInfo) => { - const accessibilityScanResults = await new AxeBuilder({ page }).analyze(); - - await testInfo.attach("accessibility-scan-results", { - body: JSON.stringify(accessibilityScanResults, null, 2), - contentType: "application/json", - }); - - expect(accessibilityScanResults.violations).toEqual([]); - }); -});