why-hydration 0.1.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/LICENSE +21 -0
- package/README.md +394 -0
- package/dist/chunk-EPJM3LH3.cjs +717 -0
- package/dist/chunk-EPJM3LH3.cjs.map +1 -0
- package/dist/chunk-FV3PEJQE.js +42 -0
- package/dist/chunk-FV3PEJQE.js.map +1 -0
- package/dist/chunk-HYG6GVWO.js +16 -0
- package/dist/chunk-HYG6GVWO.js.map +1 -0
- package/dist/chunk-LNVWRW65.js +700 -0
- package/dist/chunk-LNVWRW65.js.map +1 -0
- package/dist/chunk-OGQEPU7G.cjs +49 -0
- package/dist/chunk-OGQEPU7G.cjs.map +1 -0
- package/dist/chunk-PVXOK7GJ.js +418 -0
- package/dist/chunk-PVXOK7GJ.js.map +1 -0
- package/dist/chunk-QGAEURQY.cjs +38 -0
- package/dist/chunk-QGAEURQY.cjs.map +1 -0
- package/dist/chunk-R6344ZUK.cjs +441 -0
- package/dist/chunk-R6344ZUK.cjs.map +1 -0
- package/dist/index.cjs +97 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +65 -0
- package/dist/index.d.ts +65 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/next/index.cjs +23 -0
- package/dist/next/index.cjs.map +1 -0
- package/dist/next/index.d.cts +4 -0
- package/dist/next/index.d.ts +4 -0
- package/dist/next/index.js +6 -0
- package/dist/next/index.js.map +1 -0
- package/dist/next/script.cjs +13 -0
- package/dist/next/script.cjs.map +1 -0
- package/dist/next/script.d.cts +9 -0
- package/dist/next/script.d.ts +9 -0
- package/dist/next/script.js +4 -0
- package/dist/next/script.js.map +1 -0
- package/dist/react.cjs +18 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.d.cts +38 -0
- package/dist/react.d.ts +38 -0
- package/dist/react.js +5 -0
- package/dist/react.js.map +1 -0
- package/dist/types-DTlltJb9.d.cts +53 -0
- package/dist/types-DTlltJb9.d.ts +53 -0
- package/package.json +134 -0
|
@@ -0,0 +1 @@
|
|
|
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":["getServerHtmlForRoot"],"mappings":"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","file":"chunk-EPJM3LH3.cjs","sourcesContent":["export const isDev: boolean =\n typeof process !== 'undefined' &&\n process.env != null &&\n process.env.NODE_ENV !== 'production';\n","import type { Divergence } from './types';\n\nconst IGNORED_ATTRIBUTES = new Set<string>(['data-reactroot']);\n\nexport function parseServerHtml(html: string, rootTagName: string): Element {\n const container = document.createElement(rootTagName || 'div');\n container.innerHTML = html;\n return container;\n}\n\nexport function diffTrees(\n serverRoot: Element,\n clientRoot: Element,\n basePath = tagPath(clientRoot),\n): Divergence | null {\n return diffChildren(serverRoot, clientRoot, basePath);\n}\n\nexport function diffSnapshotAgainstDom(\n serverHtml: string,\n clientRoot: Element,\n): Divergence | null {\n const serverRoot = parseServerHtml(serverHtml, clientRoot.tagName);\n return diffTrees(serverRoot, clientRoot);\n}\n\nfunction diffChildren(\n serverParent: Node,\n clientParent: Node,\n parentPath: string,\n): Divergence | null {\n const serverChildren = meaningfulChildNodes(serverParent);\n const clientChildren = meaningfulChildNodes(clientParent);\n const max = Math.max(serverChildren.length, clientChildren.length);\n\n for (let i = 0; i < max; i++) {\n const serverNode = serverChildren[i] ?? null;\n const clientNode = clientChildren[i] ?? null;\n const path = childPath(parentPath, (clientNode ?? serverNode) as Node, i);\n\n if (serverNode && !clientNode) {\n return {\n kind: 'node-removed',\n path,\n tagName: elementTag(serverNode),\n parentTagName: elementTag(clientParent),\n server: serialize(serverNode),\n client: null,\n element: asElement(clientParent),\n };\n }\n if (!serverNode && clientNode) {\n return {\n kind: 'node-added',\n path,\n tagName: elementTag(clientNode),\n parentTagName: elementTag(clientParent),\n server: null,\n client: serialize(clientNode),\n element: asElement(clientNode),\n };\n }\n if (!serverNode || !clientNode) continue;\n\n const divergence = diffNode(\n serverNode,\n clientNode,\n path,\n elementTag(clientParent),\n );\n if (divergence) return divergence;\n }\n return null;\n}\n\nfunction diffNode(\n serverNode: Node,\n clientNode: Node,\n path: string,\n parentTag: string | undefined,\n): Divergence | null {\n if (serverNode.nodeType !== clientNode.nodeType) {\n return {\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 }\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 return {\n kind: 'text',\n path,\n parentTagName: parentTag,\n server: serverText,\n client: clientText,\n element: asElement(clientNode.parentNode),\n };\n }\n return null;\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 return {\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 }\n\n const attrDivergence = diffAttributes(serverEl, clientEl, path, parentTag);\n if (attrDivergence) return attrDivergence;\n\n return diffChildren(serverEl, clientEl, path);\n }\n\n return null;\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 value\n .split(';')\n .map((s) => s.trim())\n .filter(Boolean)\n .sort()\n .join(';');\n }\n return value;\n}\n\nconst NOISE_TAGS = new Set<string>([\n 'SCRIPT',\n 'STYLE',\n 'LINK',\n 'TEMPLATE',\n 'NOSCRIPT',\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 return false;\n}\n\nfunction meaningfulChildNodes(parent: Node): Node[] {\n const children = Array.from(parent.childNodes);\n const hasElement = children.some(\n (n) => n.nodeType === Node.ELEMENT_NODE && !isNoiseElement(n),\n );\n return children.filter((node) => {\n if (isNoiseElement(node)) return false;\n if (node.nodeType !== Node.TEXT_NODE) return true;\n const text = node.textContent ?? '';\n if (text.trim() !== '') return true;\n return !hasElement;\n });\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 tag = (node as Element).tagName.toLowerCase();\n return `${parentPath} > ${tag}: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\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(value.trim());\n}\n\nexport function toTimestamp(value: string): number | null {\n const v = value.trim();\n if (!v) return null;\n if (/^\\d{10,13}$/.test(v)) {\n const n = Number(v);\n return v.length === 10 ? n * 1000 : n;\n }\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\nexport function isSameNumberDifferentSeparators(a: string, b: string): boolean {\n const digitsOnly = (s: string) => s.replace(/[^\\d]/g, '');\n const da = digitsOnly(a);\n const db = digitsOnly(b);\n if (!da || da !== db) return false;\n const hasSep = (s: string) => /[.,\\s\\u00a0\\u2009]/.test(s.trim());\n return (hasSep(a) || hasSep(b)) && a.trim() !== b.trim();\n}\n\nexport function isSameDateDifferentOrder(a: string, b: string): boolean {\n const partsA = a.trim().match(/^(\\d{1,4})[/.-](\\d{1,2})[/.-](\\d{1,4})$/);\n const partsB = b.trim().match(/^(\\d{1,4})[/.-](\\d{1,2})[/.-](\\d{1,4})$/);\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 hasArabicIndicDigits,\n hasLatinDigits,\n isExtensionAttribute,\n isInvalidNesting,\n isRandomLike,\n isSameDateDifferentOrder,\n isSameNumberDifferentSeparators,\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\nconst nonDeterministic: Classifier = (d) => {\n if (d.kind !== 'text' && d.kind !== 'attribute') 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 (d.kind !== 'text' && d.kind !== 'attribute') 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 (d.kind !== 'text' && d.kind !== 'attribute') return null;\n if (!bothDiffer(d)) return null;\n const { server, client } = d;\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 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 const atRoot = /^(html|body)\\b/.test(d.path) && d.server == null;\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 return null;\n};\n\nexport const BUILT_IN_RULES: readonly Classifier[] = [\n nonDeterministic,\n dateTime,\n localeFormat,\n browserOnlyApi,\n viewportBranching,\n invalidNesting,\n whitespaceMinification,\n thirdPartyDomMutation,\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 return value.length > max ? `${value.slice(0, max)}…` : value;\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\nexport function signatureOf(report: HydrationReport): string {\n return [\n report.node.kind,\n report.node.path,\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 addSink(sink: ReportSink): () => void {\n this.sinks.add(sink);\n return () => this.sinks.delete(sink);\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) {\n try {\n sink(report);\n } catch {\n /* a failing sink must not stop the others */\n }\n }\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 not match/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\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 return first.replace(/%[sco]/g, () => String(rest[i++] ?? '')).trim();\n }\n return args.map((a) => (typeof a === 'string' ? a : String(a))).join(' ');\n}\n\nexport function parseHydrationMessage(message: string): Divergence | null {\n if (!isHydrationMessage(message)) return null;\n\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 nesting =\n /<(\\w+)>\\s*cannot (?:appear as a|be a) (?:child|descendant) of <?(\\w+)>?/i.exec(\n message,\n );\n if (nesting || /validateDOMNesting/i.test(message)) {\n return {\n kind: 'structure',\n path: 'body',\n tagName: nesting ? nesting[1]?.toUpperCase() : undefined,\n parentTagName: nesting ? nesting[2]?.toUpperCase() : undefined,\n server: null,\n client: 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","import { diffSnapshotAgainstDom } from './diff';\nimport { parseHydrationMessage } from './react-message';\nimport { getServerHtmlForRoot } from './snapshot';\nimport type { DetectionContext } from './types';\nimport type { ReportCollector } from './report';\n\nexport function inspectRoot(\n root: Element,\n collector: ReportCollector,\n context: DetectionContext = {},\n): boolean {\n const serverHtml = getServerHtmlForRoot(root);\n if (serverHtml == null) return false;\n const divergence = diffSnapshotAgainstDom(serverHtml, root);\n if (!divergence) return false;\n if (context.reactMessage && !divergence.reactMessage) {\n divergence.reactMessage = context.reactMessage;\n }\n return collector.report(divergence, context) != null;\n}\n\nexport function reportFromMessage(\n message: string,\n collector: ReportCollector,\n context: DetectionContext = {},\n): boolean {\n const divergence = parseHydrationMessage(message);\n if (!divergence) return false;\n return (\n collector.report(divergence, {\n ...context,\n reactMessage: message,\n }) != null\n );\n}\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// src/core/snapshot.ts
|
|
2
|
+
var DEFAULT_SNAPSHOT_SELECTORS = ["#root", "#__next", "body"];
|
|
3
|
+
var SNAPSHOT_KEY = "__WHY_HYDRATION_SNAPSHOT__";
|
|
4
|
+
function getSnapshotScriptSource(selectors = DEFAULT_SNAPSHOT_SELECTORS) {
|
|
5
|
+
const serialized = JSON.stringify(selectors).replace(/</g, "\\u003c");
|
|
6
|
+
return `(function(){var K=${JSON.stringify(SNAPSHOT_KEY)};if(typeof window==="undefined"||window[K])return;var S=${serialized};function cap(){if(window[K])return;var r={};for(var i=0;i<S.length;i++){var el=document.querySelector(S[i]);if(el)r[S[i]]=el.innerHTML;}window[K]={version:1,capturedAt:Date.now(),roots:r};}if(document.readyState!=="loading"){cap();}else{document.addEventListener("readystatechange",function(){if(document.readyState==="interactive")cap();});document.addEventListener("DOMContentLoaded",cap);}})();`;
|
|
7
|
+
}
|
|
8
|
+
function readSnapshot() {
|
|
9
|
+
if (typeof window === "undefined") return void 0;
|
|
10
|
+
return window[SNAPSHOT_KEY];
|
|
11
|
+
}
|
|
12
|
+
function getServerHtmlForRoot(root) {
|
|
13
|
+
const snapshot = readSnapshot();
|
|
14
|
+
if (!snapshot) return void 0;
|
|
15
|
+
for (const selector of Object.keys(snapshot.roots)) {
|
|
16
|
+
try {
|
|
17
|
+
if (root.matches(selector) || root === document.querySelector(selector)) {
|
|
18
|
+
return snapshot.roots[selector];
|
|
19
|
+
}
|
|
20
|
+
} catch {
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return void 0;
|
|
24
|
+
}
|
|
25
|
+
function captureSnapshotNow(selectors = DEFAULT_SNAPSHOT_SELECTORS) {
|
|
26
|
+
if (typeof window === "undefined" || typeof document === "undefined") {
|
|
27
|
+
return void 0;
|
|
28
|
+
}
|
|
29
|
+
if (window[SNAPSHOT_KEY]) return window[SNAPSHOT_KEY];
|
|
30
|
+
const roots = {};
|
|
31
|
+
for (const selector of selectors) {
|
|
32
|
+
const el = document.querySelector(selector);
|
|
33
|
+
if (el) roots[selector] = el.innerHTML;
|
|
34
|
+
}
|
|
35
|
+
const snapshot = { version: 1, capturedAt: Date.now(), roots };
|
|
36
|
+
window[SNAPSHOT_KEY] = snapshot;
|
|
37
|
+
return snapshot;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export { DEFAULT_SNAPSHOT_SELECTORS, SNAPSHOT_KEY, captureSnapshotNow, getServerHtmlForRoot, getSnapshotScriptSource, readSnapshot };
|
|
41
|
+
//# sourceMappingURL=chunk-FV3PEJQE.js.map
|
|
42
|
+
//# sourceMappingURL=chunk-FV3PEJQE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/snapshot.ts"],"names":[],"mappings":";AAAO,IAAM,0BAAA,GAA6B,CAAC,OAAA,EAAS,SAAA,EAAW,MAAM;AAE9D,IAAM,YAAA,GAAe;AAcrB,SAAS,uBAAA,CACd,YAA+B,0BAAA,EACvB;AACR,EAAA,MAAM,aAAa,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA,CAAE,OAAA,CAAQ,MAAM,SAAS,CAAA;AACpE,EAAA,OAAO,qBAAqB,IAAA,CAAK,SAAA,CAAU,YAAY,CAAC,2DAA2D,UAAU,CAAA,8YAAA,CAAA;AAC/H;AAEO,SAAS,YAAA,GAAqC;AACnD,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,MAAA;AAC1C,EAAA,OAAO,OAAO,YAAY,CAAA;AAC5B;AAEO,SAAS,qBAAqB,IAAA,EAAmC;AACtE,EAAA,MAAM,WAAW,YAAA,EAAa;AAC9B,EAAA,IAAI,CAAC,UAAU,OAAO,MAAA;AACtB,EAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,EAAG;AAClD,IAAA,IAAI;AACF,MAAA,IAAI,IAAA,CAAK,QAAQ,QAAQ,CAAA,IAAK,SAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA,EAAG;AACvE,QAAA,OAAO,QAAA,CAAS,MAAM,QAAQ,CAAA;AAAA,MAChC;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,kBAAA,CACd,YAA+B,0BAAA,EACT;AACtB,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,OAAO,aAAa,WAAA,EAAa;AACpE,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAA,CAAO,YAAY,CAAA,EAAG,OAAO,OAAO,YAAY,CAAA;AACpD,EAAA,MAAM,QAAgC,EAAC;AACvC,EAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,IAAA,MAAM,EAAA,GAAK,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC1C,IAAA,IAAI,EAAA,EAAI,KAAA,CAAM,QAAQ,CAAA,GAAI,EAAA,CAAG,SAAA;AAAA,EAC/B;AACA,EAAA,MAAM,QAAA,GAAqB,EAAE,OAAA,EAAS,CAAA,EAAG,YAAY,IAAA,CAAK,GAAA,IAAO,KAAA,EAAM;AACvE,EAAA,MAAA,CAAO,YAAY,CAAA,GAAI,QAAA;AACvB,EAAA,OAAO,QAAA;AACT","file":"chunk-FV3PEJQE.js","sourcesContent":["export const DEFAULT_SNAPSHOT_SELECTORS = ['#root', '#__next', 'body'];\n\nexport const SNAPSHOT_KEY = '__WHY_HYDRATION_SNAPSHOT__';\n\nexport interface Snapshot {\n version: 1;\n capturedAt: number;\n roots: Record<string, string>;\n}\n\ndeclare global {\n interface Window {\n [SNAPSHOT_KEY]?: Snapshot;\n }\n}\n\nexport function getSnapshotScriptSource(\n selectors: readonly string[] = DEFAULT_SNAPSHOT_SELECTORS,\n): string {\n const serialized = JSON.stringify(selectors).replace(/</g, '\\\\u003c');\n return `(function(){var K=${JSON.stringify(SNAPSHOT_KEY)};if(typeof window===\"undefined\"||window[K])return;var S=${serialized};function cap(){if(window[K])return;var r={};for(var i=0;i<S.length;i++){var el=document.querySelector(S[i]);if(el)r[S[i]]=el.innerHTML;}window[K]={version:1,capturedAt:Date.now(),roots:r};}if(document.readyState!==\"loading\"){cap();}else{document.addEventListener(\"readystatechange\",function(){if(document.readyState===\"interactive\")cap();});document.addEventListener(\"DOMContentLoaded\",cap);}})();`;\n}\n\nexport function readSnapshot(): Snapshot | undefined {\n if (typeof window === 'undefined') return undefined;\n return window[SNAPSHOT_KEY];\n}\n\nexport function getServerHtmlForRoot(root: Element): string | undefined {\n const snapshot = readSnapshot();\n if (!snapshot) return undefined;\n for (const selector of Object.keys(snapshot.roots)) {\n try {\n if (root.matches(selector) || root === document.querySelector(selector)) {\n return snapshot.roots[selector];\n }\n } catch {\n /* invalid selector */\n }\n }\n return undefined;\n}\n\nexport function captureSnapshotNow(\n selectors: readonly string[] = DEFAULT_SNAPSHOT_SELECTORS,\n): Snapshot | undefined {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return undefined;\n }\n if (window[SNAPSHOT_KEY]) return window[SNAPSHOT_KEY];\n const roots: Record<string, string> = {};\n for (const selector of selectors) {\n const el = document.querySelector(selector);\n if (el) roots[selector] = el.innerHTML;\n }\n const snapshot: Snapshot = { version: 1, capturedAt: Date.now(), roots };\n window[SNAPSHOT_KEY] = snapshot;\n return snapshot;\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { getSnapshotScriptSource } from './chunk-FV3PEJQE.js';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
function HydrationSnapshotScript(props = {}) {
|
|
5
|
+
if (process.env.NODE_ENV === "production") return null;
|
|
6
|
+
const source = getSnapshotScriptSource(props.selectors);
|
|
7
|
+
return React.createElement("script", {
|
|
8
|
+
nonce: props.nonce,
|
|
9
|
+
suppressHydrationWarning: true,
|
|
10
|
+
dangerouslySetInnerHTML: { __html: source }
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export { HydrationSnapshotScript };
|
|
15
|
+
//# sourceMappingURL=chunk-HYG6GVWO.js.map
|
|
16
|
+
//# sourceMappingURL=chunk-HYG6GVWO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/next/script.tsx"],"names":[],"mappings":";;;AAQO,SAAS,uBAAA,CACd,KAAA,GAAsC,EAAC,EACZ;AAC3B,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc,OAAO,IAAA;AAClD,EAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,KAAA,CAAM,SAAS,CAAA;AACtD,EAAA,OAAa,oBAAc,QAAA,EAAU;AAAA,IACnC,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,wBAAA,EAA0B,IAAA;AAAA,IAC1B,uBAAA,EAAyB,EAAE,MAAA,EAAQ,MAAA;AAAO,GAC3C,CAAA;AACH","file":"chunk-HYG6GVWO.js","sourcesContent":["import * as React from 'react';\nimport { getSnapshotScriptSource } from '../core/snapshot';\n\nexport interface HydrationSnapshotScriptProps {\n selectors?: string[];\n nonce?: string;\n}\n\nexport function HydrationSnapshotScript(\n props: HydrationSnapshotScriptProps = {},\n): React.ReactElement | null {\n if (process.env.NODE_ENV === 'production') return null;\n const source = getSnapshotScriptSource(props.selectors);\n return React.createElement('script', {\n nonce: props.nonce,\n suppressHydrationWarning: true,\n dangerouslySetInnerHTML: { __html: source },\n });\n}\n"]}
|