582355a1f2
CI on PR #13 failed at `pnpm lint --max-warnings 0`. Four findings, all new-in-N16 react-strict checks: * ThemeToggle.tsx — "Calling setState synchronously within an effect" Rewrites the theme reader to use `useSyncExternalStore` with a `MutationObserver` on `<html data-theme>`. SSR snapshot stays "light" (matches the root layout); the head script and the toggle just write the attribute, the observer pushes the change into React. Drops the `mounted` flag because the icon now mirrors the DOM truthfully. * WorkflowEditor.tsx — "Cannot access refs during render" `stateRef.current = { pan, zoom }` was a direct ref-mutation in the component body so the global mousemove handler could read the latest viewport without re-subscribing. Moves the mirror into a `useEffect` keyed on `[pan, zoom]` — same semantics, satisfies the rule. * MockWorker.tsx — drops an unused `eslint-disable-next-line no-console` (the `no-console` rule isn't enabled). * public/mockServiceWorker.js — auto-generated by `msw init`; adds it to the eslint flat-config `ignores` so the lint pass never crosses it. Local: `pnpm lint` + `pnpm typecheck` both clean. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
21 lines
519 B
JavaScript
21 lines
519 B
JavaScript
// eslint-config-next v16 ships flat-config exports natively; no FlatCompat shim.
|
|
import nextWebVitals from "eslint-config-next/core-web-vitals";
|
|
import nextTypescript from "eslint-config-next/typescript";
|
|
|
|
const config = [
|
|
...nextWebVitals,
|
|
...nextTypescript,
|
|
{
|
|
ignores: [
|
|
".next/**",
|
|
"node_modules/**",
|
|
"coverage/**",
|
|
"next-env.d.ts",
|
|
// Auto-generated by `msw init` — patched on every MSW upgrade.
|
|
"public/mockServiceWorker.js",
|
|
],
|
|
},
|
|
];
|
|
|
|
export default config;
|