mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-11 22:02:16 +00:00
The rule only matched stock-hue-plus-step utilities, letting three colour escapes through CI: raw dracula-* utilities, hex/rgb/hsl/oklch literals in colour-shaped JS props (the Recharts color/stroke/fill blind spot behind the four hex chart colours just fixed), and Tailwind arbitrary-value colours (bg-[#...]). Add all three as selectable checks. color-props and arbitrary-value run at error; the dracula check ships as a warning under a second registration (healthlog/no-dracula-utility) because ~250 legacy sites predate the token system — the light-theme overrides keep them readable, and the check moves to error once the semantic sweep retires them (staged plan in the rule header). Exempt: global-error.tsx (renders without the stylesheet), the themeColor viewport metadata (matched by ancestry, not by file), test files. Add a RuleTester suite covering all four detectors and the exemptions.
72 lines
3.4 KiB
JavaScript
72 lines
3.4 KiB
JavaScript
import { defineConfig, globalIgnores } from "eslint/config";
|
|
import nextVitals from "eslint-config-next/core-web-vitals";
|
|
import nextTs from "eslint-config-next/typescript";
|
|
import healthlogPlugin from "./eslint-plugins/healthlog/index.js";
|
|
|
|
const eslintConfig = defineConfig([
|
|
...nextVitals,
|
|
...nextTs,
|
|
// Override default ignores of eslint-config-next.
|
|
globalIgnores([
|
|
// Default ignores of eslint-config-next:
|
|
".next/**",
|
|
"out/**",
|
|
"build/**",
|
|
"next-env.d.ts",
|
|
// v1.4.41 — ignore local tool worktrees so a worktree on an older
|
|
// commit can't poison `pnpm lint` locally.
|
|
// CI never sees this path; the rule is for the dev environment.
|
|
".claude/**",
|
|
// The project-local ESLint rule plugin is CommonJS (require/module
|
|
// .exports) by ESLint convention; it is not application source and
|
|
// is not linted by the app's TypeScript ruleset.
|
|
"eslint-plugins/**",
|
|
]),
|
|
// v1.4.41 — custom rule that flags any bare-array
|
|
// `queryKey: [ … ]` / `mutationKey: [ … ]` declaration inside the
|
|
// files the queryKeys factory currently guards. Promotes the earlier
|
|
// v1.4.40 test-guard substitute to a real ESLint rule so IDE + CI
|
|
// both fail fast on a factory bypass. See
|
|
// `eslint-plugins/healthlog/queryKey-factory.js` for the
|
|
// whitelist + rationale.
|
|
{
|
|
plugins: { healthlog: healthlogPlugin },
|
|
rules: {
|
|
"healthlog/queryKey-factory": "error",
|
|
// v1.5.6 — every outbound fetch under src/lib + src/app must route
|
|
// through the safeFetch wrapper (manual-redirect + timeout, and the
|
|
// requirePublicHost connect-time pin). The wrapper internals and
|
|
// test files are exempt; see the rule file for the allowlist.
|
|
"healthlog/safe-fetch-required": "error",
|
|
// v1.16.4 — same-origin `/api/...` calls in the client surface
|
|
// (src/components + src/app) must route through the typed apiFetch
|
|
// wrapper (`src/lib/api/api-fetch.ts`): one `.ok` check, one
|
|
// envelope unwrap, one ApiError shape. Wrapper internals and test
|
|
// files are exempt; see the rule file for the allowlist.
|
|
"healthlog/api-fetch-required": "error",
|
|
// v1.26.0 — the design-consistency wave locked the app's colour
|
|
// vocabulary onto semantic tokens. Raw Tailwind palette utilities
|
|
// (`text-amber-500`, `bg-green-500`, `dark:text-red-400`, …) under
|
|
// src/components + src/app are banned so the tokenised palette can't
|
|
// regress. v1.27.x extends the rule with two further error-level
|
|
// checks: colour-shaped JS props carrying a raw `#hex`/`rgb(`/`hsl(`/
|
|
// `oklch(` literal (the Recharts `color`/`stroke`/`fill` blind spot),
|
|
// and Tailwind arbitrary-value colours (`bg-[#…]`).
|
|
// `src/app/global-error.tsx` (renders without the token stylesheet),
|
|
// the `themeColor` viewport metadata, and test files are exempt; see
|
|
// the rule file.
|
|
"healthlog/no-raw-palette-color": [
|
|
"error",
|
|
{ checks: ["palette", "color-props", "arbitrary-value"] },
|
|
],
|
|
// Staged: raw `*-dracula-*` utilities warn for now — ~250 legacy
|
|
// sites predate the token system and the light-theme overrides in
|
|
// globals.css keep them readable. Moves to error once the semantic
|
|
// sweep has retired the legacy sites (see the rule header).
|
|
"healthlog/no-dracula-utility": ["warn", { checks: ["dracula"] }],
|
|
},
|
|
},
|
|
]);
|
|
|
|
export default eslintConfig;
|