mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-31 12:22:14 +03:00
* fix(dashboard): strip browser-extension attrs before hydration Browser extensions (Bitdefender's bis_skin_checked, Grammarly's data-gr-ext-installed, LanguageTool's data-lt-installed) inject attributes into the DOM after SSR but before React hydrates, causing "attributes didn't match" hydration errors in the dev console. The <html> and <body> tags already have suppressHydrationWarning, but React only applies it one level deep — it doesn't propagate to Next.js internal elements like the <div hidden> metadata boundary where the mismatch actually surfaces. Add a synchronous pre-hydration cleanup script in <head> that: 1. Strips known extension attributes from document.documentElement 2. Observes for late injections via MutationObserver 3. Auto-disconnects after 5s (well past typical hydration) Verified: curl /login confirms the script is present in the served HTML with all target attributes (bis_skin_checked, data-google-query-id, data-gr-ext-installed, data-lt-installed) and the MutationObserver. Typecheck and lint clean. * test(dashboard): guard the pre-hydration extension-attr strip script Add a regression test mirroring the existing tests/unit/dashboard/crypto-randomuuid-polyfill.test.ts pattern: readFileSync src/app/layout.tsx and assert the full known browser-extension attribute list (bis_skin_checked, data-google-query-id, data-new-gr-c-s-check-loaded, data-gr-ext-installed, data-lt-installed, data-lt-tmp-id), the MutationObserver wiring (attributeFilter + 5s auto-disconnect), and the synchronous initial strip against document.documentElement all stay present in layout.tsx. Verified fail-then-pass: the assertions fail against the pre-fix tree (no such script present) and pass once the pre-hydration script is present, so a future layout.tsx refactor can no longer silently drop this script and reintroduce the hydration-mismatch warnings extension users were seeing. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com> --------- Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>