why-hydration 0.1.5 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +116 -0
- package/README.md +155 -35
- package/dist/chunk-CER5NQRR.js +1333 -0
- package/dist/chunk-CER5NQRR.js.map +1 -0
- package/dist/{chunk-AS5DZZHI.js → chunk-KP4S6CRL.js} +560 -230
- package/dist/chunk-KP4S6CRL.js.map +1 -0
- package/dist/{chunk-AT6A77X3.cjs → chunk-QFHUKJ5K.cjs} +568 -229
- package/dist/chunk-QFHUKJ5K.cjs.map +1 -0
- package/dist/chunk-RWMRFTQ4.cjs +1356 -0
- package/dist/chunk-RWMRFTQ4.cjs.map +1 -0
- package/dist/index.cjs +25 -17
- package/dist/index.d.cts +37 -6
- package/dist/index.d.ts +37 -6
- package/dist/index.js +1 -1
- package/dist/next/index.cjs +4 -4
- package/dist/next/index.d.cts +1 -1
- package/dist/next/index.d.ts +1 -1
- package/dist/next/index.js +2 -2
- package/dist/react.cjs +4 -4
- package/dist/react.d.cts +24 -3
- package/dist/react.d.ts +24 -3
- package/dist/react.js +2 -2
- package/dist/{types-6wTih14e.d.cts → types-C14vcpBO.d.cts} +9 -0
- package/dist/{types-6wTih14e.d.ts → types-C14vcpBO.d.ts} +9 -0
- package/package.json +22 -4
- package/dist/chunk-3I6F4K4L.js +0 -642
- package/dist/chunk-3I6F4K4L.js.map +0 -1
- package/dist/chunk-AS5DZZHI.js.map +0 -1
- package/dist/chunk-AT6A77X3.cjs.map +0 -1
- package/dist/chunk-OFVFNPE6.cjs +0 -665
- package/dist/chunk-OFVFNPE6.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/env.ts","../src/core/diff.ts","../src/core/classify/detectors.ts","../src/core/classify/rules.ts","../src/core/classify/index.ts","../src/core/report.ts","../src/core/react-message.ts","../src/core/inspect.ts"],"names":["path","pairs","i","j","getServerHtmlForRoot"],"mappings":"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","file":"chunk-AT6A77X3.cjs","sourcesContent":["/**\n * Whether the dev-only detection machinery is allowed to run.\n *\n * Production is opt-OUT here, not opt-in, and that distinction matters. The\n * public entries already gate the entire dev implementation behind an inline\n * `process.env.NODE_ENV === 'production'` check that bundlers fold to a\n * constant and tree-shake, so a production build never reaches this module at\n * all — `npm run size` measures the result at 99 B.\n *\n * What is left is the browser case where a bundler substitutes\n * `process.env.NODE_ENV` but never defines `process` itself. Vite, Rollup and\n * esbuild all do exactly that, which compiled a `typeof process !== 'undefined'`\n * guard down to `false` and silently disabled the inspector for every one of\n * them — no overlay, no console output, no error. Treating a missing `process`\n * as \"not production\" is the only reading that keeps those setups working.\n */\nfunction readNodeEnv(): string | undefined {\n try {\n // Deliberately a plain member expression: bundlers that substitute\n // `process.env.NODE_ENV` only match this exact shape, so writing it any\n // other way (optional chaining, a destructure) would defeat the folding.\n return process.env.NODE_ENV;\n } catch {\n // `process` is not defined in this bundle. Absence is not evidence of\n // production.\n return undefined;\n }\n}\n\nexport const isDev: boolean = readNodeEnv() !== 'production';\n","import type { Divergence } from './types';\n\nconst IGNORED_ATTRIBUTES = new Set<string>(['data-reactroot']);\n\n/**\n * Parse captured server markup into a detached document, so re-materializing it\n * for the diff never fetches the images, iframes or media it references.\n * `rootTagName` preserves the HTML parsing context (e.g. rows in a `<tbody>`).\n */\nexport function parseServerHtml(html: string, rootTagName: string): Element {\n const doc = document.implementation.createHTMLDocument('');\n const container = doc.createElement(rootTagName || 'div');\n container.innerHTML = html;\n return container;\n}\n\n/**\n * Collect *every* divergence between the server snapshot and the live DOM, in a\n * deterministic order, deduped-by-value upstream. Children are aligned with an\n * LCS (by tag+id) so a node the client injects mid-tree (a portal, toast, ad,\n * or Suspense-resolved subtree) is treated as an insertion instead of shifting\n * every sibling and cascading into false positives.\n */\nexport function collectDivergences(\n serverRoot: Element,\n clientRoot: Element,\n limit = 60,\n): Divergence[] {\n const out: Divergence[] = [];\n collectChildren(serverRoot, clientRoot, tagPath(clientRoot), out, limit);\n return out;\n}\n\nexport function collectSnapshotAgainstDom(\n serverHtml: string,\n clientRoot: Element,\n limit = 60,\n): Divergence[] {\n const serverRoot = parseServerHtml(serverHtml, clientRoot.tagName);\n return collectDivergences(serverRoot, clientRoot, limit);\n}\n\n// Back-compat single-divergence helpers (used by tests / message-less paths).\nexport function diffTrees(\n serverRoot: Element,\n clientRoot: Element,\n): Divergence | null {\n return collectDivergences(serverRoot, clientRoot, 1)[0] ?? null;\n}\n\nexport function diffSnapshotAgainstDom(\n serverHtml: string,\n clientRoot: Element,\n): Divergence | null {\n return collectSnapshotAgainstDom(serverHtml, clientRoot, 1)[0] ?? null;\n}\n\nfunction collectChildren(\n serverParent: Node,\n clientParent: Node,\n parentPath: string,\n out: Divergence[],\n limit: number,\n): void {\n if (out.length >= limit) return;\n const serverChildren = meaningfulChildNodes(serverParent);\n const clientChildren = meaningfulChildNodes(clientParent);\n const parentPending = hasPendingSuspense(serverParent);\n const parentTag = elementTag(clientParent);\n const pairs = alignChildren(serverChildren, clientChildren);\n\n let index = 0;\n for (let k = 0; k < pairs.length; k++) {\n if (out.length >= limit) return;\n const [serverNode, clientNode] = pairs[k]!;\n\n // Coalesce an adjacent delete+insert into one `structure` swap (e.g. server\n // <b>, client <i> at the same slot), so one logical change isn't two reports.\n if (serverNode && !clientNode && k + 1 < pairs.length) {\n const [nextServer, nextClient] = pairs[k + 1]!;\n if (!nextServer && nextClient && !isInjectedContainer(nextClient)) {\n const path = childPath(parentPath, nextClient, index);\n index += 1;\n k += 1;\n out.push({\n kind: 'structure',\n path,\n tagName: elementTag(nextClient),\n parentTagName: parentTag,\n server: serialize(serverNode),\n client: serialize(nextClient),\n element: asElement(nextClient),\n });\n continue;\n }\n }\n\n const anchor = clientNode ?? serverNode;\n if (!anchor) continue;\n const path = childPath(parentPath, anchor, index);\n index += 1;\n\n if (serverNode && !clientNode) {\n // Server rendered a node the client dropped — a real structural mismatch.\n out.push({\n kind: 'node-removed',\n path,\n tagName: elementTag(serverNode),\n parentTagName: parentTag,\n server: serialize(serverNode),\n client: null,\n element: asElement(clientParent),\n });\n } else if (!serverNode && clientNode) {\n // Client rendered an extra node. Skip injections (portals, toasts, ads,\n // modals) and Suspense-resolved content — those are not the dev's bug.\n if (isInjectedContainer(clientNode)) continue;\n if (clientNode.nodeType === Node.ELEMENT_NODE && parentPending) continue;\n out.push({\n kind: 'node-added',\n path,\n tagName: elementTag(clientNode),\n parentTagName: parentTag,\n server: null,\n client: serialize(clientNode),\n element: asElement(clientNode),\n });\n } else if (serverNode && clientNode) {\n collectNode(serverNode, clientNode, path, parentTag, out, limit);\n }\n }\n}\n\nfunction collectNode(\n serverNode: Node,\n clientNode: Node,\n path: string,\n parentTag: string | undefined,\n out: Divergence[],\n limit: number,\n): void {\n if (serverNode.nodeType !== clientNode.nodeType) {\n out.push({\n kind: 'structure',\n path,\n tagName: elementTag(clientNode),\n parentTagName: parentTag,\n server: serialize(serverNode),\n client: serialize(clientNode),\n element: asElement(clientNode),\n });\n return;\n }\n\n if (\n serverNode.nodeType === Node.TEXT_NODE ||\n serverNode.nodeType === Node.COMMENT_NODE\n ) {\n const serverText = serverNode.textContent ?? '';\n const clientText = clientNode.textContent ?? '';\n if (serverText !== clientText) {\n out.push({\n kind: 'text',\n path,\n parentTagName: parentTag,\n server: serverText,\n client: clientText,\n element: asElement(clientNode.parentNode),\n });\n }\n return;\n }\n\n if (serverNode.nodeType === Node.ELEMENT_NODE) {\n const serverEl = serverNode as Element;\n const clientEl = clientNode as Element;\n\n if (serverEl.tagName !== clientEl.tagName) {\n out.push({\n kind: 'structure',\n path,\n tagName: clientEl.tagName,\n parentTagName: parentTag,\n server: serialize(serverEl),\n client: serialize(clientEl),\n element: clientEl,\n });\n return;\n }\n\n const attrDivergence = diffAttributes(serverEl, clientEl, path, parentTag);\n if (attrDivergence) out.push(attrDivergence);\n\n collectChildren(serverEl, clientEl, path, out, limit);\n }\n}\n\nfunction diffAttributes(\n serverEl: Element,\n clientEl: Element,\n path: string,\n parentTag: string | undefined,\n): Divergence | null {\n const names = new Set<string>();\n for (const a of Array.from(serverEl.attributes)) names.add(a.name);\n for (const a of Array.from(clientEl.attributes)) names.add(a.name);\n\n for (const name of names) {\n if (IGNORED_ATTRIBUTES.has(name)) continue;\n const serverValue = serverEl.getAttribute(name);\n const clientValue = clientEl.getAttribute(name);\n if (normalizeAttr(name, serverValue) === normalizeAttr(name, clientValue)) {\n continue;\n }\n return {\n kind: 'attribute',\n path,\n tagName: clientEl.tagName,\n parentTagName: parentTag,\n attribute: name,\n server: serverValue,\n client: clientValue,\n element: clientEl,\n };\n }\n return null;\n}\n\nfunction normalizeAttr(name: string, value: string | null): string | null {\n if (value == null) return null;\n if (name === 'class') {\n return value.trim().split(/\\s+/).filter(Boolean).sort().join(' ');\n }\n if (name === 'style') {\n return normalizeStyle(value);\n }\n return value;\n}\n\n// Canonicalize an inline style through the CSSOM so React's raw serialization\n// (`color:#0f172a`) compares equal to the browser-normalized live value\n// (`color: rgb(15, 23, 42);`), order-independent.\nfunction normalizeStyle(value: string): string {\n if (typeof document !== 'undefined') {\n try {\n const el = document.createElement('div');\n el.style.cssText = value;\n const decls: string[] = [];\n for (let i = 0; i < el.style.length; i++) {\n const prop = el.style.item(i);\n decls.push(`${prop}:${el.style.getPropertyValue(prop)}`);\n }\n return decls.sort().join(';');\n } catch {\n /* fall through to string normalization */\n }\n }\n return value\n .split(';')\n .map((s) => s.trim())\n .filter(Boolean)\n .sort()\n .join(';');\n}\n\n// ---- alignment ------------------------------------------------------------\n\nfunction nodeKey(node: Node): string {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as Element;\n return el.id ? `${el.tagName}#${el.id}` : el.tagName;\n }\n if (node.nodeType === Node.TEXT_NODE) return '#text';\n return '#other';\n}\n\n// Align two child lists by an LCS on their keys, so inserted/removed nodes are\n// identified rather than shifting the whole comparison. Falls back to index\n// pairing for very large lists (keeps it O(n) there).\nfunction alignChildren(\n server: Node[],\n client: Node[],\n): Array<[Node | null, Node | null]> {\n const m = server.length;\n const n = client.length;\n if (m === 0 || n === 0 || m > 200 || n > 200 || m * n > 10000) {\n const pairs: Array<[Node | null, Node | null]> = [];\n const max = Math.max(m, n);\n for (let i = 0; i < max; i++) {\n pairs.push([server[i] ?? null, client[i] ?? null]);\n }\n return pairs;\n }\n const sk = server.map(nodeKey);\n const ck = client.map(nodeKey);\n const dp: number[][] = Array.from({ length: m + 1 }, () =>\n new Array(n + 1).fill(0),\n );\n for (let i = m - 1; i >= 0; i--) {\n for (let j = n - 1; j >= 0; j--) {\n dp[i]![j] =\n sk[i] === ck[j]\n ? dp[i + 1]![j + 1]! + 1\n : Math.max(dp[i + 1]![j]!, dp[i]![j + 1]!);\n }\n }\n const pairs: Array<[Node | null, Node | null]> = [];\n let i = 0;\n let j = 0;\n while (i < m && j < n) {\n if (sk[i] === ck[j]) {\n pairs.push([server[i]!, client[j]!]);\n i++;\n j++;\n } else if (dp[i + 1]![j]! >= dp[i]![j + 1]!) {\n pairs.push([server[i]!, null]);\n i++;\n } else {\n pairs.push([null, client[j]!]);\n j++;\n }\n }\n while (i < m) pairs.push([server[i++]!, null]);\n while (j < n) pairs.push([null, client[j++]!]);\n return pairs;\n}\n\n// ---- noise / injection / suspense ----------------------------------------\n\nconst NOISE_TAGS = new Set<string>([\n 'SCRIPT',\n 'STYLE',\n 'LINK',\n 'TEMPLATE',\n 'NOSCRIPT',\n]);\n\nconst TRACKER_MARKER =\n /googlefc|adsbygoogle|google_ads|googletag|__tcfapi|onetrust|optanon|cookiebot|usercentrics|didomi|quantcast|grammarly|gtm|hotjar|fullstory|intercom|drift|zendesk|livechat|tawk|hubspot|turnstile|recaptcha/i;\n\n// Elements client-side scripts/libraries mount that the server never rendered:\n// toasts, modals, portals, overlays, tooltips, consent banners, chat widgets.\nconst INJECTED_MARKER =\n /toastify|toast|modal|portal|overlay|backdrop|drawer|dialog|popover|popper|tooltip|snackbar|notification|consent|gdpr|cookie-?(?:banner|consent)|intercom|drift|crisp|tawk|zendesk|onetrust|usercentrics/i;\n\nfunction isThirdPartyNoiseElement(el: Element): boolean {\n const identity = `${el.getAttribute('name') ?? ''} ${el.id} ${\n typeof el.className === 'string' ? el.className : ''\n }`;\n if (TRACKER_MARKER.test(identity)) return true;\n if (el.tagName === 'IFRAME') {\n const src = el.getAttribute('src') ?? '';\n const style = (el.getAttribute('style') ?? '').toLowerCase();\n const hidden =\n /display\\s*:\\s*none/.test(style) ||\n /visibility\\s*:\\s*hidden/.test(style) ||\n /(?:left|top)\\s*:\\s*-\\d{3,}px/.test(style) ||\n /(?:width|height)\\s*:\\s*0(?:px)?\\b/.test(style) ||\n el.hasAttribute('hidden') ||\n el.getAttribute('aria-hidden') === 'true';\n if (src === 'about:blank' || hidden) return true;\n }\n return false;\n}\n\n// A client-only node that is a portal / toast / overlay / third-party widget —\n// never part of the app's hydration, so it must not be reported.\nfunction isInjectedContainer(node: Node): boolean {\n if (node.nodeType !== Node.ELEMENT_NODE) return false;\n const el = node as Element;\n if (isNoiseElement(el)) return true;\n const cls = typeof el.className === 'string' ? el.className : '';\n if (INJECTED_MARKER.test(`${el.id} ${cls}`)) return true;\n if (el.hasAttribute('aria-live')) return true;\n const role = el.getAttribute('role');\n if (role && /^(dialog|alertdialog|tooltip|status|alert)$/.test(role.trim())) {\n return true;\n }\n if (el.tagName.includes('-PORTAL') || el.tagName.includes('-OVERLAY')) {\n return true;\n }\n for (const attr of Array.from(el.attributes)) {\n if (/portal|radix|headlessui|floating-ui/i.test(attr.name)) return true;\n }\n return false;\n}\n\nfunction isNoiseElement(node: Node): boolean {\n if (node.nodeType !== Node.ELEMENT_NODE) return false;\n const el = node as Element;\n if (el.hasAttribute('data-why-hydration')) return true;\n if (NOISE_TAGS.has(el.tagName)) return true;\n if (el.tagName.includes('-ROUTE-ANNOUNCER')) return true;\n if (isThirdPartyNoiseElement(el)) return true;\n return false;\n}\n\n// True when a parent's server children include a *pending* Suspense boundary\n// (`<!--$?-->`), i.e. the server streamed a fallback that the client resolves to\n// different content. Those differences are expected, not bugs.\nfunction hasPendingSuspense(parent: Node): boolean {\n for (const n of Array.from(parent.childNodes)) {\n if (n.nodeType === Node.COMMENT_NODE && (n.nodeValue ?? '').startsWith('$?')) {\n return true;\n }\n }\n return false;\n}\n\nfunction meaningfulChildNodes(parent: Node): Node[] {\n const raw = Array.from(parent.childNodes);\n const hasElement = raw.some(\n (n) => n.nodeType === Node.ELEMENT_NODE && !isNoiseElement(n),\n );\n const result: Node[] = [];\n const boundaryStack: string[] = [];\n for (const node of raw) {\n if (node.nodeType === Node.COMMENT_NODE) {\n const data = node.nodeValue ?? '';\n if (data === '$?' || data === '$' || data === '$!') boundaryStack.push(data);\n else if (data === '/$') boundaryStack.pop();\n continue; // React/RSC markers are never real content.\n }\n // Skip fallback content inside a pending Suspense boundary.\n if (boundaryStack.includes('$?')) continue;\n if (isNoiseElement(node)) continue;\n if (node.nodeType !== Node.TEXT_NODE) {\n result.push(node);\n continue;\n }\n const text = node.textContent ?? '';\n if (text.trim() !== '' || !hasElement) result.push(node);\n }\n return result;\n}\n\nfunction serialize(node: Node): string {\n if (node.nodeType === Node.ELEMENT_NODE) {\n return (node as Element).outerHTML;\n }\n return node.textContent ?? '';\n}\n\nfunction asElement(node: Node | null | undefined): Element | null {\n if (!node) return null;\n return node.nodeType === Node.ELEMENT_NODE ? (node as Element) : null;\n}\n\nfunction elementTag(node: Node): string | undefined {\n return node.nodeType === Node.ELEMENT_NODE\n ? (node as Element).tagName\n : undefined;\n}\n\nfunction tagPath(el: Element): string {\n return el.tagName.toLowerCase();\n}\n\nfunction childPath(parentPath: string, node: Node, index: number): string {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as Element;\n const tag = el.tagName.toLowerCase();\n const id = el.id ? `#${el.id}` : '';\n return `${parentPath} > ${tag}${id}:nth-child(${index + 1})`;\n }\n if (node.nodeType === Node.COMMENT_NODE) {\n return `${parentPath} > #comment[${index}]`;\n }\n return `${parentPath} > #text[${index}]`;\n}\n","const UUID_RE =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\nconst REACT_ID_RE = /^:[rR][0-9a-z]*:$/;\nconst HEX_TOKEN_RE = /^[0-9a-f]{16,}$/i;\nconst RANDOM_DECIMAL_RE = /^0?\\.\\d{6,}$/;\nconst NANOID_RE = /^[A-Za-z0-9_-]{10,}$/;\n\nconst ARABIC_INDIC_DIGITS = /[٠-٩۰-۹]/;\nconst LATIN_DIGITS = /[0-9]/;\n\n/**\n * Bidirectional control characters: LRM, RLM, ALM and the isolate family.\n *\n * `Intl` wraps numbers and date fields in these when formatting for an RTL\n * locale, and *which* ones it emits differs between ICU versions — so Node and\n * the browser routinely format the same date into strings that differ only by\n * invisible marks. That is a genuine hydration mismatch whose diff is literally\n * invisible, which is exactly the case a developer cannot debug by eye.\n */\nconst BIDI_CONTROLS = /[-]/g;\n\nexport function stripBidiControls(value: string): string {\n return value.replace(BIDI_CONTROLS, '');\n}\n\n/** True when two values render identically once the invisible marks are gone. */\nexport function differsOnlyByBidiControls(a: string, b: string): boolean {\n const sa = stripBidiControls(a);\n const sb = stripBidiControls(b);\n return a !== b && sa === sb && sa.trim() !== '';\n}\n\n/**\n * Fold Arabic-Indic (٠-٩) and Extended/Persian (۰-۹) digits, plus the Arabic\n * thousands (٬) and decimal (٫) separators, onto their Latin equivalents, and\n * drop bidi controls.\n *\n * Every numeric/date/time shape test below is written in terms of `\\d`, so\n * without this an app that renders Arabic-Indic digits on *both* sides gets no\n * classification at all — the script-mismatch rule only fires when the two\n * sides use different scripts. Normalisation is the identity function on Latin\n * input, so it leaves every existing LTR path byte-identical.\n */\nexport function normalizeNumerals(value: string): string {\n return stripBidiControls(value).replace(/[٠-٩۰-۹٫٬]/g, (ch) => {\n if (ch === '٫') return '.';\n if (ch === '٬') return ',';\n const code = ch.charCodeAt(0);\n const zero = code >= 0x06f0 ? 0x06f0 : 0x0660;\n return String(code - zero);\n });\n}\n\nexport function isRandomLike(value: string): boolean {\n const v = value.trim();\n if (!v) return false;\n if (UUID_RE.test(v)) return true;\n if (REACT_ID_RE.test(v)) return true;\n if (HEX_TOKEN_RE.test(v)) return true;\n if (RANDOM_DECIMAL_RE.test(v)) return true;\n if (NANOID_RE.test(v) && /[A-Za-z]/.test(v) && /[0-9]/.test(v)) return true;\n return false;\n}\n\nexport function looksLikeTime(value: string): boolean {\n return /\\b\\d{1,2}:\\d{2}(?::\\d{2})?(?:\\s?[AaPp][Mm])?\\b/.test(\n normalizeNumerals(value).trim(),\n );\n}\n\n/**\n * Structural date shapes.\n *\n * `Date.parse` cannot be used as a *detector*: V8 accepts almost anything.\n * `Date.parse('100')` is the year 100, `Date.parse('server-0')` is the year\n * 2000, and `Date.parse('item 5')` is a date in May. Trusting it meant ordinary\n * text and ordinary numbers — a price, a stock count, an id like `row-3` — were\n * diagnosed as \"the clock moved between server and client render\", which is\n * more misleading than no diagnosis at all. So a value must look like a date\n * *by shape* before `Date.parse` is consulted at all.\n */\nconst ISO_DATE = /^\\d{4}-\\d{1,2}(?:-\\d{1,2})?(?:[T ]\\d{1,2}:\\d{2}(?::\\d{2})?)?/;\nconst NUMERIC_DATE = /^\\d{1,4}[/.-]\\d{1,2}[/.-]\\d{1,4}$/;\nconst TIME_OF_DAY = /^\\d{1,2}:\\d{2}(?::\\d{2})?(?:\\s?[AaPp]\\.?[Mm]\\.?)?$/;\nconst MONTH_NAME =\n /\\b(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)[a-z]*\\b/i;\n\nfunction looksLikeDate(v: string): boolean {\n return (\n ISO_DATE.test(v) ||\n NUMERIC_DATE.test(v) ||\n TIME_OF_DAY.test(v) ||\n (MONTH_NAME.test(v) && /\\d/.test(v))\n );\n}\n\nexport function toTimestamp(value: string): number | null {\n const v = value.trim();\n if (!v) return null;\n // Epoch seconds/millis are unambiguous and stay matched explicitly.\n if (/^\\d{10,13}$/.test(v)) {\n const n = Number(v);\n return v.length === 10 ? n * 1000 : n;\n }\n if (!looksLikeDate(v)) return null;\n const parsed = Date.parse(v);\n if (!Number.isNaN(parsed)) return parsed;\n if (looksLikeTime(v)) {\n const anchored = Date.parse(`1970-01-01 ${v}`);\n if (!Number.isNaN(anchored)) return anchored;\n }\n return null;\n}\n\nexport function hasArabicIndicDigits(value: string): boolean {\n return ARABIC_INDIC_DIGITS.test(value);\n}\n\nexport function hasLatinDigits(value: string): boolean {\n return LATIN_DIGITS.test(value);\n}\n\n// A value made only of digits, separators and an optional sign \\u2014 i.e. it\n// actually looks like a formatted number. Guards against class lists, ids, and\n// arbitrary text that merely contain digits (e.g. \"radius-8 border p-8\").\nconst NUMERIC_LIKE = /^[+-]?[\\d.,\\s\\u00a0\\u2009]+$/;\n\nexport function isSameNumberDifferentSeparators(a: string, b: string): boolean {\n const at = normalizeNumerals(a).trim();\n const bt = normalizeNumerals(b).trim();\n if (!NUMERIC_LIKE.test(at) || !NUMERIC_LIKE.test(bt)) return false;\n const digitsOnly = (s: string) => s.replace(/\\D/g, '');\n const da = digitsOnly(at);\n const db = digitsOnly(bt);\n if (!da || da !== db) return false;\n const hasSep = (s: string) => /[.,\\s\\u00a0\\u2009]/.test(s);\n // The \"actually different\" test is on the RAW values: `\\u0661\\u0662\\u0663\\u0664\\u066b\\u0665\\u0666` and\n // `\\u0661\\u0662\\u0663\\u0664.\\u0665\\u0666` fold to the same string but are two different renderings of the\n // same number, which is precisely the mismatch being classified.\n return (hasSep(at) || hasSep(bt)) && a.trim() !== b.trim();\n}\n\n// Attributes whose value is human-facing content that can carry locale/date/\n// random formatting. Structural attributes (class, style, id, href\\u2026) are not.\nconst CONTENT_ATTRIBUTES = new Set<string>([\n 'value',\n 'placeholder',\n 'title',\n 'alt',\n 'label',\n 'aria-label',\n 'aria-valuetext',\n 'content',\n 'datetime',\n]);\n\nexport function isContentAttribute(name: string): boolean {\n return CONTENT_ATTRIBUTES.has(name.toLowerCase());\n}\n\n// Markers of third-party scripts / consent / analytics / chat widgets that\n// inject nodes after the server render (not part of the app's hydration).\nconst THIRD_PARTY_MARKERS =\n /googlefc|adsbygoogle|google_ads|googletag|__tcfapi|onetrust|optanon|cookiebot|usercentrics|iubenda|didomi|quantcast|grammarly|data-gramm|gtm-|_hjsettings|hotjar|fullstory|intercom|drift|zendesk|livechat|tawk|hubspot|turnstile|recaptcha/i;\n\n// True when a *node-added / node-removed* divergence is almost certainly a\n// third-party injection rather than the developer's own hydration mismatch.\nexport function looksLikeThirdPartyNode(\n html: string | null,\n tagName: string | undefined,\n): boolean {\n const tag = (tagName ?? '').toUpperCase();\n if (tag === 'IFRAME' || tag === 'EMBED' || tag === 'OBJECT') return true;\n const h = (html ?? '').toLowerCase();\n if (!h) return false;\n return THIRD_PARTY_MARKERS.test(h) || h.includes('about:blank');\n}\n\nconst DATE_PARTS_RE = /^(\\d{1,4})[/.-](\\d{1,2})[/.-](\\d{1,4})$/;\n\nexport function isSameDateDifferentOrder(a: string, b: string): boolean {\n const partsA = normalizeNumerals(a).trim().match(DATE_PARTS_RE);\n const partsB = normalizeNumerals(b).trim().match(DATE_PARTS_RE);\n if (!partsA || !partsB) return false;\n const setA = [partsA[1], partsA[2], partsA[3]].sort().join('|');\n const setB = [partsB[1], partsB[2], partsB[3]].sort().join('|');\n return setA === setB && a.trim() !== b.trim();\n}\n\nexport const EXTENSION_ATTRIBUTES = new Set<string>([\n 'cz-shortcut-listen',\n 'data-gramm',\n 'data-gramm_editor',\n 'data-gramm_id',\n 'data-gr-c-s-loaded',\n 'data-lt-installed',\n 'data-new-gr-c-s-check-loaded',\n 'data-new-gr-c-s-loaded',\n 'spellcheck-extension',\n 'bis_register',\n '__processed_by_react_dev_tools',\n]);\n\nexport function isExtensionAttribute(name: string): boolean {\n const n = name.toLowerCase();\n if (EXTENSION_ATTRIBUTES.has(n)) return true;\n return (\n n.startsWith('data-gr-') ||\n n.startsWith('data-gramm') ||\n n.startsWith('__bis') ||\n n.startsWith('bis_')\n );\n}\n\nconst BLOCK_TAGS = new Set([\n 'DIV',\n 'P',\n 'SECTION',\n 'ARTICLE',\n 'UL',\n 'OL',\n 'LI',\n 'TABLE',\n 'HEADER',\n 'FOOTER',\n 'MAIN',\n 'ASIDE',\n 'NAV',\n 'H1',\n 'H2',\n 'H3',\n 'H4',\n 'H5',\n 'H6',\n 'FORM',\n 'BLOCKQUOTE',\n 'PRE',\n 'HR',\n]);\n\nexport function isInvalidNesting(\n parentTag: string | undefined,\n childTag: string | undefined,\n): boolean {\n if (!parentTag || !childTag) return false;\n const p = parentTag.toUpperCase();\n const c = childTag.toUpperCase();\n if (p === 'P' && BLOCK_TAGS.has(c)) return true;\n if (p === 'A' && c === 'A') return true;\n if (p === 'BUTTON' && (c === 'BUTTON' || c === 'A')) return true;\n if ((p === 'TABLE' || p === 'THEAD' || p === 'TBODY') && c === 'DIV') {\n return true;\n }\n return false;\n}\n\nexport function messageIndicatesInvalidNesting(message?: string): boolean {\n if (!message) return false;\n return (\n /validateDOMNesting/i.test(message) ||\n /cannot (?:be a|contain).*(?:descendant|child)/i.test(message) ||\n /cannot appear as a (?:child|descendant)/i.test(message)\n );\n}\n","import type { Cause, Classifier, Divergence } from '../types';\nimport {\n differsOnlyByBidiControls,\n hasArabicIndicDigits,\n hasLatinDigits,\n isContentAttribute,\n isExtensionAttribute,\n isInvalidNesting,\n isRandomLike,\n isSameDateDifferentOrder,\n isSameNumberDifferentSeparators,\n looksLikeThirdPartyNode,\n looksLikeTime,\n messageIndicatesInvalidNesting,\n toTimestamp,\n} from './detectors';\n\nexport const DOCS_BASE =\n 'https://github.com/razan-aboushi/why-hydration#cause-';\n\nfunction docs(category: string): string {\n return `${DOCS_BASE}${category}`;\n}\n\nfunction bothDiffer(d: Divergence): d is Divergence & {\n server: string;\n client: string;\n} {\n return (\n d.server != null && d.client != null && d.server.trim() !== d.client.trim()\n );\n}\n\n// The value-formatting rules (random / date / locale) only make sense for\n// human-facing text: text nodes and content-like attributes. Applied to\n// `class`/`style`/`id`/etc. they false-match (e.g. a class list with digits\n// looks like \"the same number with different separators\").\nfunction isValueDivergence(d: Divergence): boolean {\n if (d.kind === 'text') return true;\n if (d.kind === 'attribute' && d.attribute) {\n return isContentAttribute(d.attribute);\n }\n return false;\n}\n\nconst nonDeterministic: Classifier = (d) => {\n if (!isValueDivergence(d)) return null;\n if (!bothDiffer(d)) return null;\n if (!isRandomLike(d.server) || !isRandomLike(d.client)) return null;\n return {\n category: 'non-deterministic-value',\n confidence: 0.9,\n explanation:\n 'The server and client rendered different random-looking values ' +\n '(an id, token, or Math.random() output). Anything non-deterministic ' +\n 'in render produces a different value on each side.',\n suggestion:\n 'Use React `useId()` for ids. For random values, generate them after ' +\n 'mount (in `useEffect`) or pass a value down from the server so both ' +\n 'sides agree. Never call `Math.random()`/`crypto` during render.',\n docsUrl: docs('non-deterministic-value'),\n };\n};\n\nconst dateTime: Classifier = (d) => {\n if (!isValueDivergence(d)) return null;\n if (!bothDiffer(d)) return null;\n const serverTs = toTimestamp(d.server);\n const clientTs = toTimestamp(d.client);\n const bothTimes = looksLikeTime(d.server) && looksLikeTime(d.client);\n if (serverTs == null || clientTs == null) {\n if (!bothTimes) return null;\n }\n const delta =\n serverTs != null && clientTs != null ? Math.abs(serverTs - clientTs) : 0;\n const smallDelta = delta > 0 && delta < 24 * 60 * 60 * 1000;\n return {\n category: 'date-time',\n confidence: smallDelta || bothTimes ? 0.85 : 0.7,\n explanation:\n 'The values are dates/times that differ between server render and ' +\n 'client render — the clock moved (or the timezone differs) between the ' +\n 'two environments.',\n suggestion:\n 'Render the current time after mount, or pass a single server ' +\n 'timestamp down and format it identically on both sides. Pin an ' +\n 'explicit timezone when formatting.',\n docsUrl: docs('date-time'),\n };\n};\n\nconst localeFormat: Classifier = (d) => {\n if (!isValueDivergence(d)) return null;\n if (!bothDiffer(d)) return null;\n const { server, client } = d;\n\n // Checked first: the two values look identical in the console and in the\n // overlay, so nothing further down could explain the diff to the developer.\n if (differsOnlyByBidiControls(server, client)) {\n return {\n category: 'locale-format',\n confidence: 0.88,\n explanation:\n 'The values differ only by invisible bidirectional control marks ' +\n '(LRM/RLM/isolates). `Intl` adds these around numbers and dates in ' +\n 'RTL locales, and different ICU versions — Node vs the browser — ' +\n 'emit different ones for the same input.',\n suggestion:\n 'Format the value in one place and pass the string down, or pin the ' +\n 'same locale and timezone on both sides. If the marks are harmless, ' +\n 'add `suppressHydrationWarning` to the element.',\n docsUrl: docs('locale-format'),\n };\n }\n\n const scriptMismatch =\n (hasArabicIndicDigits(server) && hasLatinDigits(client)) ||\n (hasLatinDigits(server) && hasArabicIndicDigits(client));\n if (scriptMismatch) {\n return {\n category: 'locale-format',\n confidence: 0.92,\n explanation:\n 'The same value was formatted with different digit scripts ' +\n '(Arabic-Indic ٠١٢ vs Latin 012). The server and client resolved to ' +\n 'different locales.',\n suggestion:\n 'Pass an explicit `locale` (and timezone) to `Intl.NumberFormat` / ' +\n '`toLocaleString` on both server and client, or format the value ' +\n 'after mount so only the client locale is ever used.',\n docsUrl: docs('locale-format'),\n };\n }\n\n if (isSameNumberDifferentSeparators(server, client)) {\n return {\n category: 'locale-format',\n confidence: 0.82,\n explanation:\n 'The same number was formatted with different grouping/decimal ' +\n 'separators between server and client (e.g. 1,234.56 vs 1.234,56).',\n suggestion:\n 'Pass an explicit locale to `Intl.NumberFormat`/`toLocaleString` on ' +\n 'both sides so the separators match.',\n docsUrl: docs('locale-format'),\n };\n }\n\n if (isSameDateDifferentOrder(server, client)) {\n return {\n category: 'locale-format',\n confidence: 0.75,\n explanation:\n 'The same date was rendered in a different field order ' +\n '(MM/DD vs DD/MM) between server and client.',\n suggestion:\n 'Format dates with an explicit locale and timezone via `Intl` on ' +\n 'both sides.',\n docsUrl: docs('locale-format'),\n };\n }\n return null;\n};\n\nconst browserOnlyApi: Classifier = (d) => {\n const serverEmpty = d.server == null || d.server.trim() === '';\n const clientHasContent = d.client != null && d.client.trim() !== '';\n const shape =\n (d.kind === 'text' || d.kind === 'node-added') &&\n serverEmpty &&\n clientHasContent;\n if (!shape) return null;\n return {\n category: 'browser-only-api',\n confidence: 0.75,\n explanation:\n 'The client rendered content the server left empty — the signature of ' +\n 'reading a browser-only API (`window`, `document`, `localStorage`, ' +\n '`navigator`, `matchMedia`) during render.',\n suggestion:\n 'Gate browser-only reads behind a mounted flag or `useEffect`, or use ' +\n '`useSyncExternalStore` with a server snapshot so the first client ' +\n 'render matches the server.',\n docsUrl: docs('browser-only-api'),\n };\n};\n\nconst viewportBranching: Classifier = (d) => {\n const structural =\n d.kind === 'structure' ||\n d.kind === 'node-added' ||\n d.kind === 'node-removed';\n if (!structural) return null;\n if (\n isInvalidNesting(d.parentTagName, d.tagName) ||\n messageIndicatesInvalidNesting(d.reactMessage)\n ) {\n return null;\n }\n // A bare \"hydration failed\" message parses to a structure divergence with no\n // values and no tags. There is nothing there to attribute to a viewport\n // branch, so leave it unknown rather than inventing a 60%-confident cause.\n if (d.server == null && d.client == null && !d.tagName) return null;\n return {\n category: 'viewport-branching',\n confidence: 0.6,\n explanation:\n 'A whole subtree was added, removed, or swapped between server and ' +\n 'client — typically a JavaScript width/viewport check that branches ' +\n 'the tree at first render.',\n suggestion:\n 'Render both branches and switch between them with CSS media queries at ' +\n 'first paint instead of branching in JavaScript, or defer the ' +\n 'JS-driven branch until after mount.',\n docsUrl: docs('viewport-branching'),\n };\n};\n\nconst invalidNesting: Classifier = (d) => {\n const byMessage = messageIndicatesInvalidNesting(d.reactMessage);\n const byShape = isInvalidNesting(d.parentTagName, d.tagName);\n if (!byMessage && !byShape) return null;\n return {\n category: 'invalid-html-nesting',\n confidence: byMessage ? 0.9 : 0.72,\n explanation:\n 'A node was moved or ejected because the markup is invalid HTML ' +\n '(e.g. a `<div>` inside a `<p>`, or nested `<a>`). The browser repairs ' +\n 'the server DOM, so it no longer matches what React expects.',\n suggestion:\n 'Fix the markup validity: block elements cannot live inside `<p>`, ' +\n 'anchors cannot nest, etc. Replace the invalid parent with a `<div>` or ' +\n 'restructure the tree.',\n docsUrl: docs('invalid-html-nesting'),\n };\n};\n\nconst whitespaceMinification: Classifier = (d) => {\n if (d.kind !== 'text') return null;\n if (d.server == null || d.client == null) return null;\n if (d.server === d.client) return null;\n const collapse = (s: string) => s.replace(/\\s+/g, ' ').trim();\n if (collapse(d.server) !== collapse(d.client)) return null;\n return {\n category: 'whitespace-minification',\n confidence: 0.7,\n explanation:\n 'The mismatch is whitespace-only — the text is identical apart from ' +\n 'spaces/newlines. An HTML minifier likely collapsed whitespace around ' +\n 'the hydration root differently from React.',\n suggestion:\n 'Check your HTML minifier settings (e.g. `conservativeCollapse`) around ' +\n 'the app root, or avoid minifying whitespace inside hydrated markup.',\n docsUrl: docs('whitespace-minification'),\n };\n};\n\nconst thirdPartyDomMutation: Classifier = (d) => {\n if (d.kind === 'attribute' && d.attribute) {\n if (isExtensionAttribute(d.attribute)) {\n return {\n category: 'third-party-dom-mutation',\n confidence: 0.88,\n explanation:\n `The attribute \\`${d.attribute}\\` was injected by a browser ` +\n 'extension or third-party script (e.g. Grammarly, ColorZilla) ' +\n 'before hydration, so the client DOM no longer matches the server.',\n suggestion:\n 'This is usually harmless. Add `suppressHydrationWarning` to the ' +\n 'affected element, or defer third-party script init until after ' +\n 'hydration.',\n docsUrl: docs('third-party-dom-mutation'),\n };\n }\n // Only when the diff actually resolved the <html>/<body> element. A\n // divergence parsed from a React message carries `body` as a placeholder\n // path, not a real location, so it must not be pinned to the root — every\n // client-only attribute anywhere on the page would look third-party.\n const el = d.element;\n const atRoot =\n d.server == null && el != null && /^(?:HTML|BODY)$/.test(el.tagName);\n if (atRoot) {\n return {\n category: 'third-party-dom-mutation',\n confidence: 0.6,\n explanation:\n `An attribute (\\`${d.attribute}\\`) appeared on a root element that ` +\n 'the server never sent — a hallmark of an extension or early ' +\n 'third-party script mutating the DOM.',\n suggestion:\n 'Add `suppressHydrationWarning` to the root element, or defer the ' +\n 'third-party script until after hydration.',\n docsUrl: docs('third-party-dom-mutation'),\n };\n }\n }\n\n // An injected node (iframe/embed, or a known ads/consent/analytics/chat\n // marker) the server never rendered — not part of the app's hydration.\n if (\n (d.kind === 'node-added' || d.kind === 'node-removed') &&\n looksLikeThirdPartyNode(d.client ?? d.server, d.tagName)\n ) {\n const tag = (d.tagName ?? 'element').toLowerCase();\n return {\n category: 'third-party-dom-mutation',\n confidence: 0.7,\n explanation:\n `A <${tag}> was injected by a third-party script or browser extension ` +\n '(ads, consent, analytics, chat) after the server render. It is not ' +\n \"part of your app's hydration, so this is usually harmless noise.\",\n suggestion:\n 'If React warns about it, add `suppressHydrationWarning` to the ' +\n 'nearest server-rendered wrapper, or load the third-party script after ' +\n 'hydration (e.g. Next.js `<Script strategy=\"afterInteractive\">`).',\n docsUrl: docs('third-party-dom-mutation'),\n };\n }\n return null;\n};\n\n// Class / style / generic attribute mismatch that no value rule explained.\n// This is where the `forceHide` class-toggle case lands, with the exact tokens.\nconst attributeMismatch: Classifier = (d) => {\n if (d.kind !== 'attribute' || !d.attribute) return null;\n const attr = d.attribute.toLowerCase();\n const server = d.server ?? '';\n const client = d.client ?? '';\n\n if (attr === 'class' || attr === 'classname') {\n const serverSet = new Set(server.split(/\\s+/).filter(Boolean));\n const clientSet = new Set(client.split(/\\s+/).filter(Boolean));\n const added = [...clientSet].filter((c) => !serverSet.has(c));\n const removed = [...serverSet].filter((c) => !clientSet.has(c));\n const parts: string[] = [];\n if (added.length) parts.push(`added on client: ${added.join(', ')}`);\n if (removed.length) parts.push(`removed on client: ${removed.join(', ')}`);\n const detail = parts.length ? ` (${parts.join('; ')})` : '';\n return {\n category: 'attribute-mismatch',\n confidence: 0.8,\n explanation:\n `The \\`class\\` differs between server and client${detail}. A class was ` +\n 'applied conditionally on the client — commonly a viewport, media-query, ' +\n 'theme, or feature-flag check that runs during the first render.',\n suggestion:\n 'Render the same className on the server and the first client paint. ' +\n 'Move client-only conditions into `useEffect`/a mounted flag, or drive ' +\n 'the visual change with CSS media queries instead of a JS class toggle.',\n docsUrl: docs('attribute-mismatch'),\n };\n }\n\n if (attr === 'style') {\n return {\n category: 'attribute-mismatch',\n confidence: 0.75,\n explanation:\n 'The inline `style` differs between server and client — an inline ' +\n 'style was computed from client-only state (viewport size, theme, ' +\n 'scroll position) during render.',\n suggestion:\n 'Compute the style after mount (`useEffect`) so the first client render ' +\n 'matches the server, or move it to a CSS class / media query.',\n docsUrl: docs('attribute-mismatch'),\n };\n }\n\n return {\n category: 'attribute-mismatch',\n confidence: 0.6,\n explanation:\n `The \\`${d.attribute}\\` attribute differs between server (\\`${server}\\`) ` +\n `and client (\\`${client}\\`) — its value was derived from something that ` +\n 'differs between the server and the first client render.',\n suggestion:\n 'Make the attribute deterministic across server and client, or set it ' +\n 'after mount so the first client render matches the server HTML.',\n docsUrl: docs('attribute-mismatch'),\n };\n};\n\nexport const BUILT_IN_RULES: readonly Classifier[] = [\n nonDeterministic,\n dateTime,\n localeFormat,\n // Third-party runs before browser-only/viewport so an injected iframe is\n // labelled correctly instead of \"browser-only API\" or \"viewport branching\".\n thirdPartyDomMutation,\n browserOnlyApi,\n viewportBranching,\n invalidNesting,\n whitespaceMinification,\n // Catch-all for class/style/generic attribute diffs — after the specific\n // rules so extension attributes and content values are handled first.\n attributeMismatch,\n];\n\nexport const UNKNOWN_CAUSE: Cause = {\n category: 'unknown',\n confidence: 0,\n explanation:\n 'A hydration mismatch was detected but could not be matched to a known ' +\n 'cause. Inspect the server vs client values above.',\n suggestion:\n 'Compare the server and client values. Common causes are ' +\n 'non-deterministic values, dates/locales, and browser-only APIs used ' +\n 'during render.',\n docsUrl: docs('unknown'),\n};\n","import type { Cause, Classifier, Divergence } from '../types';\nimport { BUILT_IN_RULES, UNKNOWN_CAUSE } from './rules';\n\nexport const CONFIDENCE_THRESHOLD = 0.5;\n\nexport interface ClassifyOptions {\n extra?: readonly Classifier[];\n threshold?: number;\n}\n\nexport function classify(\n divergence: Divergence,\n options: ClassifyOptions = {},\n): Cause {\n const threshold = options.threshold ?? CONFIDENCE_THRESHOLD;\n const rules: readonly Classifier[] = [\n ...(options.extra ?? []),\n ...BUILT_IN_RULES,\n ];\n\n for (const rule of rules) {\n let result: Cause | null = null;\n try {\n result = rule(divergence);\n } catch {\n result = null;\n }\n if (result && result.confidence >= threshold) {\n return result;\n }\n }\n return UNKNOWN_CAUSE;\n}\n\nexport { BUILT_IN_RULES, UNKNOWN_CAUSE } from './rules';\n","import { classify, type ClassifyOptions } from './classify';\nimport type {\n Cause,\n DetectionContext,\n Divergence,\n HydrationReport,\n} from './types';\n\nexport type ReportSink = (report: HydrationReport) => void;\n\nlet counter = 0;\n\nfunction nextId(): string {\n counter += 1;\n return `wh_${Date.now().toString(36)}_${counter}`;\n}\n\nfunction truncate(value: string | null, max = 300): string | null {\n if (value == null) return null;\n if (value.length <= max) return value;\n // Never cut between the halves of a surrogate pair. A lone surrogate is not\n // valid text: it renders as a replacement character in the overlay and can\n // break JSON round-tripping in a user's `onReport` sink. Arabic itself is\n // BMP, but emoji in product copy is not.\n const last = value.charCodeAt(max - 1);\n const end = last >= 0xd800 && last <= 0xdbff ? max - 1 : max;\n return `${value.slice(0, end)}…`;\n}\n\nexport function buildReport(\n divergence: Divergence,\n cause: Cause,\n context: DetectionContext = {},\n): HydrationReport {\n return {\n id: nextId(),\n timestamp: Date.now(),\n component: context.component,\n componentStack: context.componentStack,\n location: context.location,\n node: {\n path: divergence.path,\n tagName: divergence.tagName,\n attribute: divergence.attribute,\n kind: divergence.kind,\n },\n server: truncate(divergence.server),\n client: truncate(divergence.client),\n cause,\n raw: context.reactMessage\n ? { reactMessage: context.reactMessage }\n : undefined,\n };\n}\n\n// Deduplicate by the *values* of the mismatch, not the DOM path. The same\n// mismatch is often reported twice — once from React's console message (path\n// `body`) and once from the DOM diff (a precise selector path) — and those must\n// collapse into one report.\nexport function signatureOf(report: HydrationReport): string {\n return [\n report.node.kind,\n report.node.attribute ?? '',\n report.cause.category,\n report.server ?? '',\n report.client ?? '',\n ].join('|');\n}\n\nexport interface CollectorOptions extends ClassifyOptions {\n maxReports?: number;\n ignore?: (divergence: Divergence) => boolean;\n}\n\nexport class ReportCollector {\n private readonly seen = new Set<string>();\n private readonly sinks = new Set<ReportSink>();\n private readonly reports: HydrationReport[] = [];\n private readonly maxReports: number;\n private readonly options: CollectorOptions;\n\n constructor(options: CollectorOptions = {}) {\n this.options = options;\n this.maxReports = options.maxReports ?? 25;\n }\n\n /**\n * Register a sink. Pass `replay` for sinks that render *state* (the overlay)\n * rather than react to *events* (`onReport`, the console): they need the\n * reports collected before they were attached, which matters when a sink is\n * re-attached after a stop/start cycle.\n */\n addSink(sink: ReportSink, options: { replay?: boolean } = {}): () => void {\n this.sinks.add(sink);\n if (options.replay) {\n for (const report of this.reports) this.emit(sink, report);\n }\n return () => this.sinks.delete(sink);\n }\n\n private emit(sink: ReportSink, report: HydrationReport): void {\n try {\n sink(report);\n } catch {\n /* a failing sink must not stop the others */\n }\n }\n\n getReports(): readonly HydrationReport[] {\n return this.reports;\n }\n\n get isFull(): boolean {\n return this.reports.length >= this.maxReports;\n }\n\n report(\n divergence: Divergence,\n context: DetectionContext = {},\n ): HydrationReport | null {\n if (this.isFull) return null;\n if (this.options.ignore?.(divergence)) return null;\n\n const cause = classify(divergence, {\n extra: this.options.extra,\n threshold: this.options.threshold,\n });\n const report = buildReport(divergence, cause, context);\n const signature = signatureOf(report);\n if (this.seen.has(signature)) return null;\n\n this.seen.add(signature);\n this.reports.push(report);\n for (const sink of this.sinks) this.emit(sink, report);\n return report;\n }\n\n reset(): void {\n this.seen.clear();\n this.reports.length = 0;\n }\n}\n","import type { Divergence } from './types';\n\nexport function isHydrationMessage(message: string): boolean {\n return (\n /hydrat/i.test(message) ||\n /did(?:n't| not) match/i.test(message) ||\n /won't be patched up/i.test(message) ||\n /hydration-mismatch/i.test(message) ||\n /server (?:HTML|rendered)/i.test(message) ||\n /validateDOMNesting/i.test(message) ||\n /Text content does not match/i.test(message)\n );\n}\n\nfunction stringify(v: unknown): string {\n return typeof v === 'string' ? v : String(v);\n}\n\nexport function formatConsoleArgs(args: readonly unknown[]): string {\n if (args.length === 0) return '';\n const [first, ...rest] = args;\n if (typeof first === 'string' && /%[sco]/.test(first)) {\n let i = 0;\n const expanded = first.replace(/%[sco]/g, () => stringify(rest[i++] ?? ''));\n const leftover = rest.slice(i).map(stringify).filter(Boolean);\n return [expanded, ...leftover].join('\\n').trim();\n }\n return args.map(stringify).join(' ');\n}\n\n// Next.js / React internal components we never want to name as the culprit.\nfunction isInternalComponent(name: string): boolean {\n return (\n /^(Inner|Outer|Segment|Client|Server|Redirect|Error|Loading|HTTPAccess|RenderFrom|ScrollAndFocus|Metadata|Outlet|ViewTransition|NotFound|Hot|DevRoot|App)$/.test(\n name,\n ) ||\n /^(Inner|Outer|Segment|Client|Server|Redirect|Error|Loading|HTTPAccess|RenderFrom|ScrollAndFocus|Metadata|Outlet|ViewTransition|NotFound|Hot|DevRoot)[A-Z]/.test(\n name,\n ) ||\n /(Boundary|Router|Handler|Provider|Context|Root|Node)$/.test(name) ||\n name === 'Fragment' ||\n name === 'Suspense'\n );\n}\n\n/** The nearest user component named in a React hydration diff tree. */\nexport function extractComponentFromMessage(\n message: string,\n): string | undefined {\n const names: string[] = [];\n const re = /<([A-Z][A-Za-z0-9_]*)\\b/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(message)) !== null) {\n const name = m[1];\n if (name && !isInternalComponent(name)) names.push(name);\n }\n return names.length ? names[names.length - 1] : undefined;\n}\n\nconst ATTR_RE = /^([\\w:-]+)=(?:\"([\\s\\S]*)\"|\\{([\\s\\S]*)\\})$/;\n\n/**\n * Modern React (18.3+/19) prints hydration mismatches as a JSX diff tree with\n * `+` (client) and `-` (server) lines. This extracts the changed attribute or\n * text and both values.\n */\nfunction parseModernDiff(message: string): Divergence | null {\n const plus: string[] = [];\n const minus: string[] = [];\n for (const raw of message.split('\\n')) {\n const line = raw.trim();\n const p = /^\\+\\s+(.+)$/.exec(line);\n const mn = /^-\\s+(.+)$/.exec(line);\n if (p && p[1]) plus.push(p[1].trim());\n else if (mn && mn[1]) minus.push(mn[1].trim());\n }\n if (plus.length === 0 && minus.length === 0) return null;\n\n // Prefer a matching attribute pair (same attribute on + and -).\n for (const p of plus) {\n const pm = ATTR_RE.exec(p);\n if (!pm) continue;\n const name = pm[1];\n const clientValue = pm[2] ?? pm[3] ?? '';\n const matched = minus.find((mm) => {\n const parsed = ATTR_RE.exec(mm);\n return parsed && parsed[1] === name;\n });\n if (matched) {\n const parsed = ATTR_RE.exec(matched);\n const serverValue = parsed ? (parsed[2] ?? parsed[3] ?? '') : '';\n return {\n kind: 'attribute',\n path: 'body',\n attribute: name,\n server: serverValue,\n client: clientValue,\n reactMessage: message,\n };\n }\n }\n\n // Otherwise a text/content change: pick the non-attribute lines.\n const client = plus.find((p) => !ATTR_RE.test(p)) ?? null;\n const server = minus.find((m) => !ATTR_RE.test(m)) ?? null;\n if (client !== null || server !== null) {\n return {\n kind: 'text',\n path: 'body',\n server,\n client,\n reactMessage: message,\n };\n }\n return null;\n}\n\nexport function parseHydrationMessage(message: string): Divergence | null {\n if (!isHydrationMessage(message)) return null;\n\n // Invalid nesting is reported as its own message in every React version.\n const nesting =\n /<(\\w+)>\\s*cannot (?:appear as a|be a|contain a) (?:child|descendant)/i.exec(\n message,\n );\n if (nesting || /validateDOMNesting/i.test(message)) {\n const pair =\n /<(\\w+)>\\s*cannot (?:appear as a|be a) (?:child|descendant) of <?(\\w+)>?/i.exec(\n message,\n );\n return {\n kind: 'structure',\n path: 'body',\n tagName: pair ? pair[1]?.toUpperCase() : undefined,\n parentTagName: pair ? pair[2]?.toUpperCase() : undefined,\n server: null,\n client: null,\n reactMessage: message,\n };\n }\n\n // Modern diff-tree format (React 18.3+/19).\n const modern = parseModernDiff(message);\n if (modern) return modern;\n\n // Legacy explicit formats (React <18.3).\n const text =\n /Text content (?:did not match|does not match)[^:]*Server:\\s*\"?(.*?)\"?\\s+Client:\\s*\"?(.*?)\"?\\s*$/i.exec(\n message,\n );\n if (text) {\n return {\n kind: 'text',\n path: 'body',\n server: text[1] ?? null,\n client: text[2] ?? null,\n reactMessage: message,\n };\n }\n\n const prop =\n /Prop [`'\"]([^`'\"]+)[`'\"] did not match\\.?\\s*Server:\\s*\"?(.*?)\"?\\s+Client:\\s*\"?(.*?)\"?\\s*$/i.exec(\n message,\n );\n if (prop) {\n return {\n kind: 'attribute',\n path: 'body',\n attribute: prop[1],\n server: prop[2] ?? null,\n client: prop[3] ?? null,\n reactMessage: message,\n };\n }\n\n const expected =\n /Expected server HTML to contain a matching <(\\w+)>(?: in <(\\w+)>)?/i.exec(\n message,\n );\n if (expected) {\n return {\n kind: 'node-added',\n path: 'body',\n tagName: expected[1]?.toUpperCase(),\n parentTagName: expected[2]?.toUpperCase(),\n server: null,\n client: `<${expected[1]?.toLowerCase()}>`,\n reactMessage: message,\n };\n }\n const notExpected =\n /Did not expect server HTML to contain(?: the text node)?(?: a)? <?(\\w+)>?/i.exec(\n message,\n );\n if (notExpected) {\n return {\n kind: 'node-removed',\n path: 'body',\n tagName: notExpected[1]?.toUpperCase(),\n server: `<${notExpected[1]?.toLowerCase()}>`,\n client: null,\n reactMessage: message,\n };\n }\n\n return {\n kind: 'structure',\n path: 'body',\n server: null,\n client: null,\n reactMessage: message,\n };\n}\n\n/**\n * Extract EVERY divergence a single React hydration message describes. A modern\n * diff tree can list several changed attributes/text nodes at once; class/style\n * mismatches are only visible here (React doesn't patch attributes into the DOM),\n * so we must not stop at the first.\n */\nexport function parseAllHydrationDivergences(message: string): Divergence[] {\n if (!isHydrationMessage(message)) return [];\n\n const fallback = (): Divergence[] => {\n const single = parseHydrationMessage(message);\n return single ? [single] : [];\n };\n\n const plus: string[] = [];\n const minus: string[] = [];\n for (const raw of message.split('\\n')) {\n const line = raw.trim();\n const p = /^\\+\\s+(.+)$/.exec(line);\n const mn = /^-\\s+(.+)$/.exec(line);\n if (p && p[1]) plus.push(p[1].trim());\n else if (mn && mn[1]) minus.push(mn[1].trim());\n }\n if (plus.length === 0 && minus.length === 0) return fallback();\n\n const out: Divergence[] = [];\n const attrPlus = plus.filter((p) => ATTR_RE.test(p));\n const attrMinus = minus.filter((m) => ATTR_RE.test(m));\n const usedMinus = new Set<number>();\n\n const attribute = (\n name: string,\n server: string | null,\n client: string | null,\n ): Divergence => ({\n kind: 'attribute',\n path: 'body',\n attribute: name,\n server,\n client,\n reactMessage: message,\n });\n\n for (const line of attrPlus) {\n const name = attrName(line);\n if (!name) continue;\n const idx = attrMinus.findIndex(\n (m, k) => !usedMinus.has(k) && attrName(m) === name,\n );\n if (idx >= 0) usedMinus.add(idx);\n // No `-` counterpart means the server never rendered the attribute at all.\n const server = idx >= 0 ? attrValue(attrMinus[idx]!) : null;\n out.push(attribute(name, server, attrValue(line)));\n }\n\n // `-` lines left unpaired: the attribute exists only in the server HTML.\n // Without this they would be dropped entirely — the text pass below filters\n // attribute lines out, so nothing else would ever report them.\n attrMinus.forEach((line, k) => {\n if (usedMinus.has(k)) return;\n const name = attrName(line);\n if (name) out.push(attribute(name, attrValue(line), null));\n });\n\n const textPlus = plus.filter((p) => !ATTR_RE.test(p));\n const textMinus = minus.filter((m) => !ATTR_RE.test(m));\n const len = Math.max(textPlus.length, textMinus.length);\n for (let i = 0; i < len; i++) {\n const client = textPlus[i] ?? null;\n const server = textMinus[i] ?? null;\n if (client !== null || server !== null) {\n out.push({\n kind: 'text',\n path: 'body',\n server,\n client,\n reactMessage: message,\n });\n }\n }\n\n return out.length ? out : fallback();\n}\n\nfunction attrName(line: string): string | undefined {\n return ATTR_RE.exec(line)?.[1];\n}\n\nfunction attrValue(line: string): string {\n const parsed = ATTR_RE.exec(line);\n return parsed ? (parsed[2] ?? parsed[3] ?? '') : '';\n}\n","import { collectDivergences, parseServerHtml } from './diff';\nimport {\n extractComponentFromMessage,\n parseAllHydrationDivergences,\n} from './react-message';\nimport { getServerHtmlForRoot } from './snapshot';\nimport type { DetectionContext, Divergence } from './types';\nimport type { ReportCollector } from './report';\n\n// Diff the server snapshot against a live root and report EVERY divergence\n// (deduped by value in the collector). Returns how many new reports were made.\n//\n// A divergence found here is classified purely on its own shape. React's\n// console message describes ONE node, so copying it onto every node the diff\n// finds would let an unrelated warning (say a `validateDOMNesting` complaint\n// elsewhere on the page) drive their classification.\nexport function inspectRoot(\n root: Element,\n collector: ReportCollector,\n context: DetectionContext = {},\n enrich?: (divergence: Divergence) => DetectionContext,\n): number {\n const serverHtml = getServerHtmlForRoot(root);\n if (serverHtml == null) return 0;\n const divergences = collectDivergences(serverTreeFor(root, serverHtml), root);\n let reported = 0;\n for (const divergence of divergences) {\n const enriched = enrich ? enrich(divergence) : {};\n if (collector.report(divergence, { ...context, ...enriched }) != null) {\n reported += 1;\n }\n }\n return reported;\n}\n\n/**\n * Re-materialising the captured markup is the expensive half of a diff pass —\n * it is a full HTML parse of the server render — and the settling window runs\n * several passes against markup that by definition never changes. Cache the\n * parsed tree per root; the diff only ever reads it, so one detached copy can\n * serve every pass instead of allocating (and discarding) one each time.\n *\n * Keyed on the HTML too, so a re-captured snapshot re-parses rather than\n * silently diffing against stale markup. The WeakMap lets a root that leaves\n * the document take its parsed tree with it.\n */\nconst serverTrees = new WeakMap<Element, { html: string; tree: Element }>();\n\nfunction serverTreeFor(root: Element, html: string): Element {\n const cached = serverTrees.get(root);\n if (cached && cached.html === html) return cached.tree;\n const tree = parseServerHtml(html, root.tagName);\n serverTrees.set(root, { html, tree });\n return tree;\n}\n\n// Report every divergence a React hydration message describes. Deduped by value\n// in the collector, so it's safe to call alongside the DOM diff and repeatedly.\nexport function reportFromMessage(\n message: string,\n collector: ReportCollector,\n context: DetectionContext = {},\n): number {\n const divergences = parseAllHydrationDivergences(message);\n const component = extractComponentFromMessage(message) ?? context.component;\n let reported = 0;\n for (const divergence of divergences) {\n if (\n collector.report(divergence, {\n ...context,\n component,\n reactMessage: message,\n }) != null\n ) {\n reported += 1;\n }\n }\n return reported;\n}\n"]}
|