diff --git a/packages/docusaurus-plugin-content-blog/package.json b/packages/docusaurus-plugin-content-blog/package.json index 49035a007edb..20f993ebfc08 100644 --- a/packages/docusaurus-plugin-content-blog/package.json +++ b/packages/docusaurus-plugin-content-blog/package.json @@ -42,11 +42,11 @@ "@docusaurus/utils-validation": "3.10.1", "cheerio": "^1.2.0", "combine-promises": "^1.1.0", - "feed": "^4.2.2", + "feed": "^5.2.1", "fs-extra": "^11.2.0", "lodash": "^4.17.21", "schema-dts": "^1.1.2", - "srcset": "^4.0.0", + "srcset": "^5.0.3", "tslib": "^2.6.0", "unist-util-visit": "^5.1.0", "utility-types": "^3.10.0", diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/__fixtures__/website/build-snap/blog/rss.xml b/packages/docusaurus-plugin-content-blog/src/__tests__/__fixtures__/website/build-snap/blog/rss.xml index 56635fe7c76d..8d1ef67169ef 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/__fixtures__/website/build-snap/blog/rss.xml +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/__fixtures__/website/build-snap/blog/rss.xml @@ -12,7 +12,7 @@ <![CDATA[test links]]> https://docusaurus.io/myBaseUrl/blog/blog-with-links - https://docusaurus.io/myBaseUrl/blog/blog-with-links + https://docusaurus.io/myBaseUrl/blog/blog-with-links Sun, 23 Jul 2023 00:00:00 GMT absolute full url

@@ -29,7 +29,7 @@ <![CDATA[MDX Blog Sample with require calls]]> https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post - https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post + https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post Sat, 06 Mar 2021 00:00:00 GMT Test MDX with require calls

@@ -42,7 +42,7 @@ <![CDATA[Full Blog Sample]]> https://docusaurus.io/myBaseUrl/blog/mdx-blog-post - https://docusaurus.io/myBaseUrl/blog/mdx-blog-post + https://docusaurus.io/myBaseUrl/blog/mdx-blog-post Fri, 05 Mar 2021 00:00:00 GMT HTML Heading 1 @@ -72,7 +72,7 @@ <![CDATA[Complex Slug]]> https://docusaurus.io/myBaseUrl/blog/hey/my super path/héllô - https://docusaurus.io/myBaseUrl/blog/hey/my super path/héllô + https://docusaurus.io/myBaseUrl/blog/hey/my super path/héllô Sun, 16 Aug 2020 00:00:00 GMT complex url slug

]]>
@@ -82,21 +82,22 @@ <![CDATA[Simple Slug]]> https://docusaurus.io/myBaseUrl/blog/simple/slug - https://docusaurus.io/myBaseUrl/blog/simple/slug + https://docusaurus.io/myBaseUrl/blog/simple/slug Sat, 15 Aug 2020 00:00:00 GMT simple url slug

]]>
+ Sébastien Lorber
<![CDATA[some heading]]> https://docusaurus.io/myBaseUrl/blog/heading-as-title - https://docusaurus.io/myBaseUrl/blog/heading-as-title + https://docusaurus.io/myBaseUrl/blog/heading-as-title Wed, 02 Jan 2019 00:00:00 GMT <![CDATA[date-matter]]> https://docusaurus.io/myBaseUrl/blog/date-matter - https://docusaurus.io/myBaseUrl/blog/date-matter + https://docusaurus.io/myBaseUrl/blog/date-matter Tue, 01 Jan 2019 00:00:00 GMT date inside front matter

]]>
@@ -105,10 +106,11 @@ <![CDATA[Happy 1st Birthday Slash! (translated)]]> https://docusaurus.io/myBaseUrl/blog/2018/12/14/Happy-First-Birthday-Slash - https://docusaurus.io/myBaseUrl/blog/2018/12/14/Happy-First-Birthday-Slash + https://docusaurus.io/myBaseUrl/blog/2018/12/14/Happy-First-Birthday-Slash Fri, 14 Dec 2018 00:00:00 GMT Happy birthday! (translated)

]]>
+ Yangshun Tay (translated) lorber.sebastien@gmail.com (Sébastien Lorber (translated)) inlineTag Global Tag label (en) diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/__snapshots__/feed.test.ts.snap b/packages/docusaurus-plugin-content-blog/src/__tests__/__snapshots__/feed.test.ts.snap index 578fe5ee3d69..9c88f034df50 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/__snapshots__/feed.test.ts.snap +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/__snapshots__/feed.test.ts.snap @@ -1342,7 +1342,7 @@ exports[`rss > filters to the first two entries 1`] = ` <![CDATA[test links]]> https://docusaurus.io/myBaseUrl/blog/blog-with-links - https://docusaurus.io/myBaseUrl/blog/blog-with-links + https://docusaurus.io/myBaseUrl/blog/blog-with-links Sun, 23 Jul 2023 00:00:00 GMT absolute full url

@@ -1359,7 +1359,7 @@ exports[`rss > filters to the first two entries 1`] = ` <![CDATA[MDX Blog Sample with require calls]]> https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post - https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post + https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post Sat, 06 Mar 2021 00:00:00 GMT Test MDX with require calls

@@ -1390,7 +1390,7 @@ exports[`rss > filters to the first two entries using limit 1`] = ` <![CDATA[test links]]> https://docusaurus.io/myBaseUrl/blog/blog-with-links - https://docusaurus.io/myBaseUrl/blog/blog-with-links + https://docusaurus.io/myBaseUrl/blog/blog-with-links Sun, 23 Jul 2023 00:00:00 GMT absolute full url

@@ -1407,7 +1407,7 @@ exports[`rss > filters to the first two entries using limit 1`] = ` <![CDATA[MDX Blog Sample with require calls]]> https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post - https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post + https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post Sat, 06 Mar 2021 00:00:00 GMT Test MDX with require calls

@@ -1501,7 +1501,7 @@ exports[`rss > has custom xslt files for feed 1`] = ` <![CDATA[test links]]> https://docusaurus.io/myBaseUrl/blog/blog-with-links - https://docusaurus.io/myBaseUrl/blog/blog-with-links + https://docusaurus.io/myBaseUrl/blog/blog-with-links Sun, 23 Jul 2023 00:00:00 GMT absolute full url

@@ -1518,7 +1518,7 @@ exports[`rss > has custom xslt files for feed 1`] = ` <![CDATA[MDX Blog Sample with require calls]]> https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post - https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post + https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post Sat, 06 Mar 2021 00:00:00 GMT Test MDX with require calls

@@ -1531,7 +1531,7 @@ exports[`rss > has custom xslt files for feed 1`] = ` <![CDATA[Full Blog Sample]]> https://docusaurus.io/myBaseUrl/blog/mdx-blog-post - https://docusaurus.io/myBaseUrl/blog/mdx-blog-post + https://docusaurus.io/myBaseUrl/blog/mdx-blog-post Fri, 05 Mar 2021 00:00:00 GMT HTML Heading 1 @@ -1561,7 +1561,7 @@ exports[`rss > has custom xslt files for feed 1`] = ` <![CDATA[Complex Slug]]> https://docusaurus.io/myBaseUrl/blog/hey/my super path/héllô - https://docusaurus.io/myBaseUrl/blog/hey/my super path/héllô + https://docusaurus.io/myBaseUrl/blog/hey/my super path/héllô Sun, 16 Aug 2020 00:00:00 GMT complex url slug

]]>
@@ -1571,21 +1571,22 @@ exports[`rss > has custom xslt files for feed 1`] = ` <![CDATA[Simple Slug]]> https://docusaurus.io/myBaseUrl/blog/simple/slug - https://docusaurus.io/myBaseUrl/blog/simple/slug + https://docusaurus.io/myBaseUrl/blog/simple/slug Sat, 15 Aug 2020 00:00:00 GMT simple url slug

]]>
+ Sébastien Lorber
<![CDATA[some heading]]> https://docusaurus.io/myBaseUrl/blog/heading-as-title - https://docusaurus.io/myBaseUrl/blog/heading-as-title + https://docusaurus.io/myBaseUrl/blog/heading-as-title Wed, 02 Jan 2019 00:00:00 GMT <![CDATA[date-matter]]> https://docusaurus.io/myBaseUrl/blog/date-matter - https://docusaurus.io/myBaseUrl/blog/date-matter + https://docusaurus.io/myBaseUrl/blog/date-matter Tue, 01 Jan 2019 00:00:00 GMT date inside front matter

]]>
@@ -1594,10 +1595,11 @@ exports[`rss > has custom xslt files for feed 1`] = ` <![CDATA[Happy 1st Birthday Slash! (translated)]]> https://docusaurus.io/myBaseUrl/blog/2018/12/14/Happy-First-Birthday-Slash - https://docusaurus.io/myBaseUrl/blog/2018/12/14/Happy-First-Birthday-Slash + https://docusaurus.io/myBaseUrl/blog/2018/12/14/Happy-First-Birthday-Slash Fri, 14 Dec 2018 00:00:00 GMT Happy birthday! (translated)

]]>
+ Yangshun Tay (translated) lorber.sebastien@gmail.com (Sébastien Lorber (translated)) inlineTag Global Tag label (en) @@ -1624,7 +1626,7 @@ exports[`rss > has feed item for each post - with trailing slash 1`] = ` <![CDATA[test links]]> https://docusaurus.io/myBaseUrl/blog/blog-with-links/ - https://docusaurus.io/myBaseUrl/blog/blog-with-links/ + https://docusaurus.io/myBaseUrl/blog/blog-with-links/ Sun, 23 Jul 2023 00:00:00 GMT absolute full url

@@ -1641,7 +1643,7 @@ exports[`rss > has feed item for each post - with trailing slash 1`] = ` <![CDATA[MDX Blog Sample with require calls]]> https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post/ - https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post/ + https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post/ Sat, 06 Mar 2021 00:00:00 GMT Test MDX with require calls

@@ -1654,7 +1656,7 @@ exports[`rss > has feed item for each post - with trailing slash 1`] = ` <![CDATA[Full Blog Sample]]> https://docusaurus.io/myBaseUrl/blog/mdx-blog-post/ - https://docusaurus.io/myBaseUrl/blog/mdx-blog-post/ + https://docusaurus.io/myBaseUrl/blog/mdx-blog-post/ Fri, 05 Mar 2021 00:00:00 GMT HTML Heading 1 @@ -1684,7 +1686,7 @@ exports[`rss > has feed item for each post - with trailing slash 1`] = ` <![CDATA[Complex Slug]]> https://docusaurus.io/myBaseUrl/blog/hey/my super path/héllô/ - https://docusaurus.io/myBaseUrl/blog/hey/my super path/héllô/ + https://docusaurus.io/myBaseUrl/blog/hey/my super path/héllô/ Sun, 16 Aug 2020 00:00:00 GMT complex url slug

]]>
@@ -1694,21 +1696,22 @@ exports[`rss > has feed item for each post - with trailing slash 1`] = ` <![CDATA[Simple Slug]]> https://docusaurus.io/myBaseUrl/blog/simple/slug/ - https://docusaurus.io/myBaseUrl/blog/simple/slug/ + https://docusaurus.io/myBaseUrl/blog/simple/slug/ Sat, 15 Aug 2020 00:00:00 GMT simple url slug

]]>
+ Sébastien Lorber
<![CDATA[some heading]]> https://docusaurus.io/myBaseUrl/blog/heading-as-title/ - https://docusaurus.io/myBaseUrl/blog/heading-as-title/ + https://docusaurus.io/myBaseUrl/blog/heading-as-title/ Wed, 02 Jan 2019 00:00:00 GMT <![CDATA[date-matter]]> https://docusaurus.io/myBaseUrl/blog/date-matter/ - https://docusaurus.io/myBaseUrl/blog/date-matter/ + https://docusaurus.io/myBaseUrl/blog/date-matter/ Tue, 01 Jan 2019 00:00:00 GMT date inside front matter

]]>
@@ -1717,10 +1720,11 @@ exports[`rss > has feed item for each post - with trailing slash 1`] = ` <![CDATA[Happy 1st Birthday Slash! (translated)]]> https://docusaurus.io/myBaseUrl/blog/2018/12/14/Happy-First-Birthday-Slash/ - https://docusaurus.io/myBaseUrl/blog/2018/12/14/Happy-First-Birthday-Slash/ + https://docusaurus.io/myBaseUrl/blog/2018/12/14/Happy-First-Birthday-Slash/ Fri, 14 Dec 2018 00:00:00 GMT Happy birthday! (translated)

]]>
+ Yangshun Tay (translated) lorber.sebastien@gmail.com (Sébastien Lorber (translated)) inlineTag Global Tag label (en) @@ -1746,7 +1750,7 @@ exports[`rss > has feed item for each post 1`] = ` <![CDATA[test links]]> https://docusaurus.io/myBaseUrl/blog/blog-with-links - https://docusaurus.io/myBaseUrl/blog/blog-with-links + https://docusaurus.io/myBaseUrl/blog/blog-with-links Sun, 23 Jul 2023 00:00:00 GMT absolute full url

@@ -1763,7 +1767,7 @@ exports[`rss > has feed item for each post 1`] = ` <![CDATA[MDX Blog Sample with require calls]]> https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post - https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post + https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post Sat, 06 Mar 2021 00:00:00 GMT Test MDX with require calls

@@ -1776,7 +1780,7 @@ exports[`rss > has feed item for each post 1`] = ` <![CDATA[Full Blog Sample]]> https://docusaurus.io/myBaseUrl/blog/mdx-blog-post - https://docusaurus.io/myBaseUrl/blog/mdx-blog-post + https://docusaurus.io/myBaseUrl/blog/mdx-blog-post Fri, 05 Mar 2021 00:00:00 GMT HTML Heading 1 @@ -1806,7 +1810,7 @@ exports[`rss > has feed item for each post 1`] = ` <![CDATA[Complex Slug]]> https://docusaurus.io/myBaseUrl/blog/hey/my super path/héllô - https://docusaurus.io/myBaseUrl/blog/hey/my super path/héllô + https://docusaurus.io/myBaseUrl/blog/hey/my super path/héllô Sun, 16 Aug 2020 00:00:00 GMT complex url slug

]]>
@@ -1816,21 +1820,22 @@ exports[`rss > has feed item for each post 1`] = ` <![CDATA[Simple Slug]]> https://docusaurus.io/myBaseUrl/blog/simple/slug - https://docusaurus.io/myBaseUrl/blog/simple/slug + https://docusaurus.io/myBaseUrl/blog/simple/slug Sat, 15 Aug 2020 00:00:00 GMT simple url slug

]]>
+ Sébastien Lorber
<![CDATA[some heading]]> https://docusaurus.io/myBaseUrl/blog/heading-as-title - https://docusaurus.io/myBaseUrl/blog/heading-as-title + https://docusaurus.io/myBaseUrl/blog/heading-as-title Wed, 02 Jan 2019 00:00:00 GMT <![CDATA[date-matter]]> https://docusaurus.io/myBaseUrl/blog/date-matter - https://docusaurus.io/myBaseUrl/blog/date-matter + https://docusaurus.io/myBaseUrl/blog/date-matter Tue, 01 Jan 2019 00:00:00 GMT date inside front matter

]]>
@@ -1839,10 +1844,11 @@ exports[`rss > has feed item for each post 1`] = ` <![CDATA[Happy 1st Birthday Slash! (translated)]]> https://docusaurus.io/myBaseUrl/blog/2018/12/14/Happy-First-Birthday-Slash - https://docusaurus.io/myBaseUrl/blog/2018/12/14/Happy-First-Birthday-Slash + https://docusaurus.io/myBaseUrl/blog/2018/12/14/Happy-First-Birthday-Slash Fri, 14 Dec 2018 00:00:00 GMT Happy birthday! (translated)

]]>
+ Yangshun Tay (translated) lorber.sebastien@gmail.com (Sébastien Lorber (translated)) inlineTag Global Tag label (en) @@ -1931,7 +1937,7 @@ exports[`rss > has xslt files for feed 1`] = ` <![CDATA[test links]]> https://docusaurus.io/myBaseUrl/blog/blog-with-links - https://docusaurus.io/myBaseUrl/blog/blog-with-links + https://docusaurus.io/myBaseUrl/blog/blog-with-links Sun, 23 Jul 2023 00:00:00 GMT absolute full url

@@ -1948,7 +1954,7 @@ exports[`rss > has xslt files for feed 1`] = ` <![CDATA[MDX Blog Sample with require calls]]> https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post - https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post + https://docusaurus.io/myBaseUrl/blog/mdx-require-blog-post Sat, 06 Mar 2021 00:00:00 GMT Test MDX with require calls

@@ -1961,7 +1967,7 @@ exports[`rss > has xslt files for feed 1`] = ` <![CDATA[Full Blog Sample]]> https://docusaurus.io/myBaseUrl/blog/mdx-blog-post - https://docusaurus.io/myBaseUrl/blog/mdx-blog-post + https://docusaurus.io/myBaseUrl/blog/mdx-blog-post Fri, 05 Mar 2021 00:00:00 GMT HTML Heading 1 @@ -1991,7 +1997,7 @@ exports[`rss > has xslt files for feed 1`] = ` <![CDATA[Complex Slug]]> https://docusaurus.io/myBaseUrl/blog/hey/my super path/héllô - https://docusaurus.io/myBaseUrl/blog/hey/my super path/héllô + https://docusaurus.io/myBaseUrl/blog/hey/my super path/héllô Sun, 16 Aug 2020 00:00:00 GMT complex url slug

]]>
@@ -2001,21 +2007,22 @@ exports[`rss > has xslt files for feed 1`] = ` <![CDATA[Simple Slug]]> https://docusaurus.io/myBaseUrl/blog/simple/slug - https://docusaurus.io/myBaseUrl/blog/simple/slug + https://docusaurus.io/myBaseUrl/blog/simple/slug Sat, 15 Aug 2020 00:00:00 GMT simple url slug

]]>
+ Sébastien Lorber
<![CDATA[some heading]]> https://docusaurus.io/myBaseUrl/blog/heading-as-title - https://docusaurus.io/myBaseUrl/blog/heading-as-title + https://docusaurus.io/myBaseUrl/blog/heading-as-title Wed, 02 Jan 2019 00:00:00 GMT <![CDATA[date-matter]]> https://docusaurus.io/myBaseUrl/blog/date-matter - https://docusaurus.io/myBaseUrl/blog/date-matter + https://docusaurus.io/myBaseUrl/blog/date-matter Tue, 01 Jan 2019 00:00:00 GMT date inside front matter

]]>
@@ -2024,10 +2031,11 @@ exports[`rss > has xslt files for feed 1`] = ` <![CDATA[Happy 1st Birthday Slash! (translated)]]> https://docusaurus.io/myBaseUrl/blog/2018/12/14/Happy-First-Birthday-Slash - https://docusaurus.io/myBaseUrl/blog/2018/12/14/Happy-First-Birthday-Slash + https://docusaurus.io/myBaseUrl/blog/2018/12/14/Happy-First-Birthday-Slash Fri, 14 Dec 2018 00:00:00 GMT Happy birthday! (translated)

]]>
+ Yangshun Tay (translated) lorber.sebastien@gmail.com (Sébastien Lorber (translated)) inlineTag Global Tag label (en) diff --git a/packages/docusaurus-plugin-content-blog/src/feed.ts b/packages/docusaurus-plugin-content-blog/src/feed.ts index 0a1bfe4e7a89..6cf30895e224 100644 --- a/packages/docusaurus-plugin-content-blog/src/feed.ts +++ b/packages/docusaurus-plugin-content-blog/src/feed.ts @@ -8,7 +8,7 @@ import path from 'path'; import fs from 'fs-extra'; import {Feed, type Author as FeedAuthor} from 'feed'; -import * as srcset from 'srcset'; +import {parseSrcset, stringifySrcset} from 'srcset'; import { getDataFilePath, normalizeUrl, @@ -153,8 +153,8 @@ async function defaultCreateFeedItems({ elm.attribs.src = toAbsoluteUrl(src); } if (srcsetAttr) { - elm.attribs.srcset = srcset.stringify( - srcset.parse(srcsetAttr).map((props) => ({ + elm.attribs.srcset = stringifySrcset( + parseSrcset(srcsetAttr).map((props) => ({ ...props, url: toAbsoluteUrl(props.url), })), diff --git a/packages/docusaurus/src/client/preload.ts b/packages/docusaurus/src/client/preload.ts index 1411581742fc..08f7c81cad9f 100644 --- a/packages/docusaurus/src/client/preload.ts +++ b/packages/docusaurus/src/client/preload.ts @@ -17,9 +17,9 @@ import {matchRoutes} from 'react-router-config'; * @returns Promise object represents whether pathname has been preloaded */ export default function preload(pathname: string): Promise { - const matches = Array.from(new Set([pathname, decodeURI(pathname)])) - .map((p) => matchRoutes(routes, p)) - .flat(); + const matches = Array.from(new Set([pathname, decodeURI(pathname)])).flatMap( + (p) => matchRoutes(routes, p), + ); return Promise.all(matches.map((match) => match.route.component.preload?.())); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c17cde0dc4c0..361afbedf1fa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -261,7 +261,7 @@ importers: version: link:../../../docusaurus-preset-classic '@mdx-js/react': specifier: ^3.1.1 - version: 3.1.1(@types/react@19.2.14)(react@19.2.6) + version: 3.1.1(@types/react@19.2.17)(react@19.2.6) clsx: specifier: ^2.0.0 version: 2.1.1 @@ -486,7 +486,7 @@ importers: version: 4.7.11 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.14) + version: 19.2.3(@types/react@19.2.17) '@types/react-router-config': specifier: ^5.0.7 version: 5.0.11 @@ -943,8 +943,8 @@ importers: specifier: ^1.1.0 version: 1.2.0 feed: - specifier: ^4.2.2 - version: 4.2.2 + specifier: ^5.2.1 + version: 5.2.1 fs-extra: specifier: ^11.2.0 version: 11.3.5 @@ -961,8 +961,8 @@ importers: specifier: ^1.1.2 version: 1.1.5 srcset: - specifier: ^4.0.0 - version: 4.0.0 + specifier: ^5.0.3 + version: 5.0.3 tslib: specifier: ^2.6.0 version: 2.8.1 @@ -1023,7 +1023,7 @@ importers: version: 11.3.5 js-yaml: specifier: ^4.1.0 - version: 4.1.1 + version: 4.2.0 lodash: specifier: ^4.17.21 version: 4.18.1 @@ -1562,7 +1562,7 @@ importers: version: link:../docusaurus-utils-validation '@mdx-js/react': specifier: ^3.1.1 - version: 3.1.1(@types/react@19.2.14)(react@19.2.6) + version: 3.1.1(@types/react@19.2.17)(react@19.2.6) clsx: specifier: ^2.0.0 version: 2.1.1 @@ -1769,7 +1769,7 @@ importers: version: 1.19.8(@algolia/client-search@5.52.1)(algoliasearch@5.52.1)(search-insights@2.17.3) '@docsearch/react': specifier: ^4.6.3 - version: 4.6.3(@algolia/client-search@5.52.1)(@types/react@19.2.15)(algoliasearch@5.52.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(search-insights@2.17.3) + version: 4.6.3(@algolia/client-search@5.52.1)(@types/react@19.2.17)(algoliasearch@5.52.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(search-insights@2.17.3) '@docusaurus/core': specifier: 3.10.1 version: link:../docusaurus @@ -1936,7 +1936,7 @@ importers: version: 2.7.0 js-yaml: specifier: ^4.1.0 - version: 4.1.1 + version: 4.2.0 lodash: specifier: ^4.17.21 version: 4.18.1 @@ -1979,7 +1979,7 @@ importers: version: 4.0.10 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.14) + version: 19.2.3(@types/react@19.2.17) dedent: specifier: ^0.7.0 version: 0.7.0 @@ -2012,7 +2012,7 @@ importers: version: 18.2.1 js-yaml: specifier: ^4.1.0 - version: 4.1.1 + version: 4.2.0 lodash: specifier: ^4.17.21 version: 4.18.1 @@ -4391,6 +4391,12 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@napi-rs/wasm-runtime@1.1.5': + resolution: {integrity: sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + '@netlify/functions@1.6.0': resolution: {integrity: sha512-6G92AlcpFrQG72XU8YH8pg94eDnq7+Q0YJhb8x4qNpdGsvuzvrfHWBmqFGp/Yshmv4wex9lpsTRZOocdrA2erQ==} engines: {node: '>=14.0.0'} @@ -5967,8 +5973,8 @@ packages: '@types/react@19.2.14': resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} - '@types/react@19.2.15': - resolution: {integrity: sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==} + '@types/react@19.2.17': + resolution: {integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -8337,9 +8343,9 @@ packages: picomatch: optional: true - feed@4.2.2: - resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} - engines: {node: '>=0.4.0'} + feed@5.2.1: + resolution: {integrity: sha512-jTynzYPWs9ALjro0GW8j7sv9y7cJBeOdD4Y88kVqYy/eyusIX3g+499JiTDIlD9Ge/unebx57T4Uzo6vpYvMtA==} + engines: {node: '>=20', pnpm: '>=10'} figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} @@ -9428,6 +9434,10 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true + js-yaml@4.2.0: + resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} + hasBin: true + jsdoc-type-pratt-parser@7.2.0: resolution: {integrity: sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==} engines: {node: '>=20.0.0'} @@ -11434,8 +11444,8 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-is@19.2.6: - resolution: {integrity: sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==} + react-is@19.2.7: + resolution: {integrity: sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==} react-json-view-lite@2.5.0: resolution: {integrity: sha512-tk7o7QG9oYyELWHL8xiMQ8x4WzjCzbWNyig3uexmkLb54r8jO0yH3WCWx8UZS0c49eSA4QUmG5caiRJ8fAn58g==} @@ -12148,9 +12158,9 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - srcset@4.0.0: - resolution: {integrity: sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==} - engines: {node: '>=12'} + srcset@5.0.3: + resolution: {integrity: sha512-AZswtOXIsu0LeHdo6YY7d0r2pCH2Rl1D8ae1utvXUX4GxG3RggsVUAOFX1r8RI4YHFMYb4g89+UBPBv3mNUU2g==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} ssri@12.0.0: resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} @@ -12569,6 +12579,10 @@ packages: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + tinypool@2.1.0: resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} engines: {node: ^20.0.0 || >=22.0.0} @@ -15075,21 +15089,21 @@ snapshots: '@discoveryjs/json-ext@0.6.3': {} - '@docsearch/core@4.6.3(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@docsearch/core@4.6.3(@types/react@19.2.17)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': optionalDependencies: - '@types/react': 19.2.15 + '@types/react': 19.2.17 react: 19.2.6 react-dom: 19.2.6(react@19.2.6) '@docsearch/css@4.6.3': {} - '@docsearch/react@4.6.3(@algolia/client-search@5.52.1)(@types/react@19.2.15)(algoliasearch@5.52.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(search-insights@2.17.3)': + '@docsearch/react@4.6.3(@algolia/client-search@5.52.1)(@types/react@19.2.17)(algoliasearch@5.52.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(search-insights@2.17.3)': dependencies: '@algolia/autocomplete-core': 1.19.2(@algolia/client-search@5.52.1)(algoliasearch@5.52.1)(search-insights@2.17.3) - '@docsearch/core': 4.6.3(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@docsearch/core': 4.6.3(@types/react@19.2.17)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@docsearch/css': 4.6.3 optionalDependencies: - '@types/react': 19.2.15 + '@types/react': 19.2.17 react: 19.2.6 react-dom: 19.2.6(react@19.2.6) search-insights: 2.17.3 @@ -15168,7 +15182,7 @@ snapshots: globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.1 + js-yaml: 4.2.0 minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -15918,6 +15932,12 @@ snapshots: '@types/react': 19.2.14 react: 19.2.6 + '@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.6)': + dependencies: + '@types/mdx': 2.0.13 + '@types/react': 19.2.17 + react: 19.2.6 + '@mermaid-js/layout-elk@0.1.9(mermaid@11.15.0)': dependencies: d3: 7.9.0 @@ -15973,6 +15993,13 @@ snapshots: '@tybys/wasm-util': 0.10.2 optional: true + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 + optional: true + '@netlify/functions@1.6.0': dependencies: is-promise: 4.0.0 @@ -16510,7 +16537,7 @@ snapshots: dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@rolldown/binding-win32-arm64-msvc@1.0.2': @@ -17534,6 +17561,11 @@ snapshots: '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: '@types/react': 19.2.14 + optional: true + + '@types/react-dom@19.2.3(@types/react@19.2.17)': + dependencies: + '@types/react': 19.2.17 '@types/react-router-config@5.0.11': dependencies: @@ -17556,10 +17588,9 @@ snapshots: dependencies: csstype: 3.2.3 - '@types/react@19.2.15': + '@types/react@19.2.17': dependencies: csstype: 3.2.3 - optional: true '@types/resolve@1.20.2': {} @@ -19005,7 +19036,7 @@ snapshots: cosmiconfig@8.3.6(typescript@6.0.3): dependencies: import-fresh: 3.3.1 - js-yaml: 4.1.1 + js-yaml: 4.2.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: @@ -19024,7 +19055,7 @@ snapshots: dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 - js-yaml: 4.1.1 + js-yaml: 4.2.0 parse-json: 5.2.0 optionalDependencies: typescript: 6.0.3 @@ -20315,7 +20346,7 @@ snapshots: optionalDependencies: picomatch: 4.0.4 - feed@4.2.2: + feed@5.2.1: dependencies: xml-js: 1.6.11 @@ -21540,6 +21571,10 @@ snapshots: dependencies: argparse: 2.0.1 + js-yaml@4.2.0: + dependencies: + argparse: 2.0.1 + jsdoc-type-pratt-parser@7.2.0: {} jsdom@25.0.1: @@ -24054,7 +24089,7 @@ snapshots: '@jest/schemas': 30.4.1 ansi-styles: 5.2.0 react-is-18: react-is@18.3.1 - react-is-19: react-is@19.2.6 + react-is-19: react-is@19.2.7 pretty-time@1.1.0: {} @@ -24208,7 +24243,7 @@ snapshots: react-is@18.3.1: {} - react-is@19.2.6: {} + react-is@19.2.7: {} react-json-view-lite@2.5.0(react@19.2.6): dependencies: @@ -25195,7 +25230,7 @@ snapshots: sprintf-js@1.0.3: {} - srcset@4.0.0: {} + srcset@5.0.3: {} ssri@12.0.0: dependencies: @@ -25702,6 +25737,11 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + tinypool@2.1.0: {} tinyrainbow@3.1.0: {} @@ -26135,7 +26175,7 @@ snapshots: picomatch: 4.0.4 postcss: 8.5.15 rolldown: 1.0.2 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 optionalDependencies: '@types/node': 25.9.1 fsevents: 2.3.3 diff --git a/website/docs/docusaurus-core.mdx b/website/docs/docusaurus-core.mdx index aa2e6882ed67..9acdec1cd2f7 100644 --- a/website/docs/docusaurus-core.mdx +++ b/website/docs/docusaurus-core.mdx @@ -409,13 +409,24 @@ The `siteConfig` object only contains **serializable values** (values that are p ### `useIsBrowser` {/* #useIsBrowser */} -Returns `true` when the React app has successfully hydrated in the browser. +Returns `true` after initial hydration completes in the browser. :::warning -Use this hook instead of `typeof windows !== 'undefined'` in React rendering logic. +Use this hook instead of `typeof window !== 'undefined'` in React rendering logic. -The first client-side render output (in the browser) **must be exactly the same** as the server-side render output (Node.js). Not following this rule can lead to unexpected hydration behaviors, as described in [The Perils of Rehydration](https://www.joshwcomeau.com/react/the-perils-of-rehydration/). +The initial render output must be consistent between server and client — components should not depend on browser-only state during the initial render. See [The Perils of Rehydration](https://www.joshwcomeau.com/react/the-perils-of-rehydration/). + +`useIsBrowser()` and `typeof window !== 'undefined'` serve different purposes: + +- **`useIsBrowser()`** — tracks hydration state. Use it to gate UI behavior that should only activate after initial hydration. +- **`typeof window !== 'undefined'`** — detects the runtime environment. Use it when you need to check DOM availability outside of React rendering logic. + +| Context | `useIsBrowser()` | `typeof window !== 'undefined'` | +| --- | --- | --- | +| Node.js / SSR | `false` | `false` | +| During initial client render | `false` | `true` (DOM is available) | +| After initial hydration | `true` | `true` | ::: @@ -426,10 +437,8 @@ import React from 'react'; import useIsBrowser from '@docusaurus/useIsBrowser'; const MyComponent = () => { - // highlight-start const isBrowser = useIsBrowser(); - // highlight-end - return
{isBrowser ? 'Client' : 'Server'}
; + return
{isBrowser ? 'Browser' : 'Server'}
; }; ```