From 3cebe71ec0a4c477514afdd467036a97254ea948 Mon Sep 17 00:00:00 2001
From: dovholuknf <46322585+dovholuknf@users.noreply.github.com>
Date: Tue, 12 May 2026 22:24:28 -0400
Subject: [PATCH 1/2] update dependencies to 3.10
---
unified-doc/build-docs.ps1 | 2 +-
unified-doc/docusaurus.config.ts | 55 ++++++++++++++++++++++++++++----
unified-doc/yarn.lock | 52 ++++++++++++++++++++++--------
3 files changed, 89 insertions(+), 20 deletions(-)
diff --git a/unified-doc/build-docs.ps1 b/unified-doc/build-docs.ps1
index 149c9f1..1a54a1c 100644
--- a/unified-doc/build-docs.ps1
+++ b/unified-doc/build-docs.ps1
@@ -25,7 +25,7 @@
[CmdletBinding()]
param(
# Branch to clone for each remote repo
- [string]$ZitiDocBranch = "main",
+ [string]$ZitiDocBranch = "docusaurus-3.10",
[string]$ZrokBranch = "main",
[string]$FrontdoorBranch = "develop",
[string]$SelfhostedBranch = "main",
diff --git a/unified-doc/docusaurus.config.ts b/unified-doc/docusaurus.config.ts
index ce8671f..1ddffda 100644
--- a/unified-doc/docusaurus.config.ts
+++ b/unified-doc/docusaurus.config.ts
@@ -134,6 +134,31 @@ console.log(" hotjar app : " + cfg.hotjar.id);
console.log('REMARK_MAPPINGS:', JSON.stringify(REMARK_MAPPINGS, null, 2));
+// Promotes the %%HEADING_ID:slug%% marker (emitted by the site-level preprocessor
+// for .mdx files that originally used `## Heading {#slug}` syntax) into the
+// heading's real `id` attribute. This is the AST-stage counterpart to the
+// preprocessor: together they replace Docusaurus's built-in {#id} handling for
+// .mdx files (which doesn't survive MDX micromark tokenization under
+// future.v4 / 3.10+), while producing real heading IDs that Docusaurus's anchor
+// validator can see.
+function remarkPromoteHeadingId() {
+ const {visit} = require('unist-util-visit');
+ return (tree: any) => {
+ visit(tree, 'heading', (node: any) => {
+ const last = node.children[node.children.length - 1];
+ if (!last || last.type !== 'text') return;
+ const m = last.value.match(/^(.*?)\s*xHIDx([a-zA-Z][\w-]*)xHIDx\s*$/s);
+ if (!m) return;
+ last.value = m[1].replace(/\s+$/, '');
+ if (last.value === '') node.children.pop();
+ node.data = node.data || {};
+ node.data.id = m[2];
+ node.data.hProperties = node.data.hProperties || {};
+ node.data.hProperties.id = m[2];
+ });
+ };
+}
+
function extendDocsPlugins(plugin: PluginConfig): PluginConfig {
if (!Array.isArray(plugin)) return plugin;
@@ -141,6 +166,7 @@ function extendDocsPlugins(plugin: PluginConfig): PluginConfig {
config.beforeDefaultRemarkPlugins = [
...(config.beforeDefaultRemarkPlugins || []),
+ remarkPromoteHeadingId,
remarkGithubAdmonitionsToDirectives,
];
@@ -150,12 +176,6 @@ function extendDocsPlugins(plugin: PluginConfig): PluginConfig {
[remarkCodeSections, { logLevel: LogLevel.Silent }],
];
- // Force per-file detection: .md uses CommonMark, .mdx uses strict MDX.
- // Overrides whatever the imported plugin config from _remotes/ set, so
- // upstream content with {#heading-ids} or raw parses
- // correctly under future.v4 / Docusaurus 3.10+.
- config.format = 'detect';
-
return [pluginName, config];
}
@@ -238,6 +258,29 @@ const config: Config = {
// Important under future.v4 -- without this, .md files get MDX-parsed and
// upstream content from _remotes/ breaks.
format: 'detect',
+ // Source-level rewrites for .mdx files from upstream remotes that use
+ // CommonMark-only syntax (HTML comments, `{#id}` heading anchors). Runs
+ // before MDX micromark tokenization, so we can transform without forking
+ // upstream content. Only .mdx files are touched; .md files already parse
+ // as CommonMark under format:'detect'.
+ preprocessor: ({filePath, fileContent}) => {
+ if (!filePath.endsWith('.mdx')) return fileContent;
+ let out = fileContent;
+ // -> {/* ... */} (works for single- and multi-line)
+ out = out.replace(//g, (_m, body) => `{/*${body}*/}`);
+ // `## Heading {#id}` -> `## Heading xHIDxidxHIDx`. MDX strict mode
+ // treats `{` as a JSX expression start so the original syntax fails;
+ // the marker is plain alphanumeric text (no `:` or `%`, which MDX
+ // splits text nodes on) that survives micromark tokenization, and is
+ // then promoted to a real heading `id` by remarkPromoteHeadingId.
+ // The result is an actual
that Docusaurus's anchor
+ // validator sees.
+ out = out.replace(
+ /^(#{1,6}[ \t]+.+?)[ \t]*\{#([a-zA-Z][\w-]*)\}[ \t]*$/gm,
+ '$1 xHIDx$2xHIDx'
+ );
+ return out;
+ },
},
staticDirectories: [
'static',
diff --git a/unified-doc/yarn.lock b/unified-doc/yarn.lock
index 11d61fb..ca9a075 100644
--- a/unified-doc/yarn.lock
+++ b/unified-doc/yarn.lock
@@ -1841,7 +1841,7 @@
webpack "^5.95.0"
webpackbar "^7.0.0"
-"@docusaurus/core@3.10.1", "@docusaurus/core@^3.10.0":
+"@docusaurus/core@3.10.1", "@docusaurus/core@^3.10.1":
version "3.10.1"
resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.10.1.tgz#3f8bdb97451b4df14f2a3b39ab0186366fbf8fbe"
integrity sha512-3pf2fXXw0eVk8WnC3T4LIigRDupcpvngpKo9Vy7mYyBhuddc0klDUuZAIfzMoK6z05pdlk6EFC/vBSX43+1O5w==
@@ -1899,7 +1899,7 @@
postcss-sort-media-queries "^5.2.0"
tslib "^2.6.0"
-"@docusaurus/faster@^3.10.0":
+"@docusaurus/faster@^3.10.1":
version "3.10.1"
resolved "https://registry.yarnpkg.com/@docusaurus/faster/-/faster-3.10.1.tgz#a63d89ae980c98e1eeab3ff15ee083f7c20ed353"
integrity sha512-XTZhE5C1gZ/DaYYMlSk02dwP5vhpQON5QHVz1s3892mSESAywgWanURpXEDAvt4GvGuq7s+XP8rTWHZvfaJmdQ==
@@ -1953,7 +1953,7 @@
vfile "^6.0.1"
webpack "^5.88.1"
-"@docusaurus/module-type-aliases@3.10.1", "@docusaurus/module-type-aliases@^3.10.0":
+"@docusaurus/module-type-aliases@3.10.1", "@docusaurus/module-type-aliases@^3.10.1":
version "3.10.1"
resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.10.1.tgz#22d39177c296786eb6e0d940699cd590cc93ca77"
integrity sha512-YoOZKUdGlp8xSYhuAkGdSo5Ydkbq4V4eK3sD8v0a2hloxCWdQbNBhkc+Ko9QyjpESc0BYcIGM5iHVAy5hdFV6w==
@@ -1966,7 +1966,7 @@
react-helmet-async "npm:@slorber/react-helmet-async@1.3.0"
react-loadable "npm:@docusaurus/react-loadable@6.0.0"
-"@docusaurus/plugin-client-redirects@^3.10.0":
+"@docusaurus/plugin-client-redirects@^3.10.1":
version "3.10.1"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.10.1.tgz#e22ed20e5837b7c3a28258e3d1816c4239c82b36"
integrity sha512-LHgd+YDvkhfOHMAE6XtUng3DQNzVM765RqVRrMJgHtzAvfopQhY6ieprqjxDVBdv21cLma6I0jHr+YCZH8fL9A==
@@ -2127,7 +2127,7 @@
tslib "^2.6.0"
webpack "^5.88.1"
-"@docusaurus/preset-classic@^3.10.0":
+"@docusaurus/preset-classic@^3.10.1":
version "3.10.1"
resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.10.1.tgz#faf330d96aedc9083a59bec09d966ae4dfc8b2fb"
integrity sha512-YO/FL8v1zmbxoTso6mjMz/RDjhaTJxb1UpFFTDdY5847LLDCeyYiYlrhyTbgN1RIN3xnkLKZ9Lj1x8hUzI4JOg==
@@ -2198,7 +2198,7 @@
tslib "^2.6.0"
utility-types "^3.10.0"
-"@docusaurus/theme-mermaid@^3.10.0":
+"@docusaurus/theme-mermaid@^3.10.1":
version "3.10.1"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-mermaid/-/theme-mermaid-3.10.1.tgz#dada9c50c780524d246906234ace8a35446f26fc"
integrity sha512-2gxpmln8Pc4EN1oWzshQEx2HTs67jk14v7MmgqGs8ZU7Nm8oihg+fTouof2u4vN8DtB3Fln4cDJu4UprSX1S3Q==
@@ -2211,7 +2211,7 @@
mermaid ">=11.6.0"
tslib "^2.6.0"
-"@docusaurus/theme-search-algolia@3.10.1", "@docusaurus/theme-search-algolia@^3.10.0":
+"@docusaurus/theme-search-algolia@3.10.1", "@docusaurus/theme-search-algolia@^3.10.1":
version "3.10.1"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.10.1.tgz#6f422058711629ce8d7c2f17e1e54efa075c626e"
integrity sha512-OTaARARVZj2GvkJQjB+1jOIxntRaXea+G+fMsNqrZBAU1O1vJKDW22R7kECOHW27oJCLFN9HKaZeRrfAUyviug==
@@ -2242,12 +2242,12 @@
fs-extra "^11.1.1"
tslib "^2.6.0"
-"@docusaurus/tsconfig@^3.10.0":
+"@docusaurus/tsconfig@^3.10.1":
version "3.10.1"
resolved "https://registry.yarnpkg.com/@docusaurus/tsconfig/-/tsconfig-3.10.1.tgz#1db31b4a4a5c914bdffa80070a35b6365d34f2e8"
integrity sha512-rYvB7yqkdqWIpAbDzQljGfM4cDBkLTbhmagZBEcsyj6oPUsz47lmW2pYdN1j+7sGFgltbAmQH62xfbrij4Eh6Q==
-"@docusaurus/types@3.10.1", "@docusaurus/types@^3.10.0":
+"@docusaurus/types@3.10.1", "@docusaurus/types@^3.10.1":
version "3.10.1"
resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.10.1.tgz#d42837938ae43ca2be0ca47e63e00476b5eb94be"
integrity sha512-XYMK8k1szDCFMw2V+Xyen0g7Kee1sP3dtFnl7vkGkZOkeAJ/oPDQPL8iz4HBKOo/cwU8QeV6onVjMqtP+tFzsw==
@@ -2841,6 +2841,23 @@
micromark-util-character "^1.1.0"
micromark-util-symbol "^1.0.1"
+"@solid-primitives/refs@^1.0.5":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@solid-primitives/refs/-/refs-1.1.3.tgz#9330120f0788daef9964ceccddd7a7c304c286b5"
+ integrity sha512-aam02fjNKpBteewF/UliPSQCVJsIIGOLEWQOh+ll6R/QePzBOOBMcC4G+5jTaO75JuUS1d/14Q1YXT3X0Ow6iA==
+ dependencies:
+ "@solid-primitives/utils" "^6.4.0"
+
+"@solid-primitives/transition-group@^1.0.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@solid-primitives/transition-group/-/transition-group-1.1.2.tgz#be9af05871a7ca6323277f9782f4aeb20cb7f73f"
+ integrity sha512-gnHS0OmcdjeoHN9n7Khu8KNrOlRc8a2weETDt2YT6o1zeW/XtUC6Db3Q9pkMU/9cCKdEmN4b0a/41MKAHRhzWA==
+
+"@solid-primitives/utils@^6.4.0":
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/@solid-primitives/utils/-/utils-6.4.0.tgz#45257521d258cffd563b40d62163058af75496ae"
+ integrity sha512-AeGTBg8Wtkh/0s+evyLtP8piQoS4wyqqQaAFs2HJcFMMjYAtUgo+ZPduRXLjPlqKVc2ejeR544oeqpbn8Egn8A==
+
"@svgr/babel-plugin-add-jsx-attribute@8.0.0":
version "8.0.0"
resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22"
@@ -4147,13 +4164,14 @@ array-union@^2.1.0:
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
-asciinema-player@^3.10.0:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/asciinema-player/-/asciinema-player-3.10.0.tgz#6b4b74b6ce85906b9930f0cf0dc71cf89e50e202"
- integrity sha512-shoOK6F606nDKZxDVM7JuGSCAyWLePoGRFNlV+FqiP5Sqvyn0BlE7wlbjZyd2X4P1iRhv/HKfVNtnQIxmgphRA==
+asciinema-player@^3.10.1:
+ version "3.15.1"
+ resolved "https://registry.yarnpkg.com/asciinema-player/-/asciinema-player-3.15.1.tgz#3facad2782330f4c843f9fdbbf339be405d0bfea"
+ integrity sha512-agVYeNlPxthLyAb92l9AS7ypW0uhesqOuQzyR58Q4Sj+MvesQztZBgx86lHqNJkB8rQ6EP0LeA9czGytQUBpYw==
dependencies:
"@babel/runtime" "^7.21.0"
solid-js "^1.3.0"
+ solid-transition-group "^0.2.3"
ast-types@^0.13.4:
version "0.13.4"
@@ -11056,6 +11074,14 @@ solid-js@^1.3.0:
seroval "~1.3.0"
seroval-plugins "~1.3.0"
+solid-transition-group@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/solid-transition-group/-/solid-transition-group-0.2.3.tgz#ef441d9e4620cddc4d29cdbc958b09f94db515c4"
+ integrity sha512-iB72c9N5Kz9ykRqIXl0lQohOau4t0dhel9kjwFvx81UZJbVwaChMuBuyhiZmK24b8aKEK0w3uFM96ZxzcyZGdg==
+ dependencies:
+ "@solid-primitives/refs" "^1.0.5"
+ "@solid-primitives/transition-group" "^1.0.2"
+
sort-css-media-queries@2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz#aa33cf4a08e0225059448b6c40eddbf9f1c8334c"
From 5169e60b1b9e475c33a63f1eea8534ac03d7c76f Mon Sep 17 00:00:00 2001
From: dovholuknf <46322585+dovholuknf@users.noreply.github.com>
Date: Tue, 12 May 2026 22:35:56 -0400
Subject: [PATCH 2/2] oops, meant to use main
---
unified-doc/build-docs.ps1 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/unified-doc/build-docs.ps1 b/unified-doc/build-docs.ps1
index 1a54a1c..149c9f1 100644
--- a/unified-doc/build-docs.ps1
+++ b/unified-doc/build-docs.ps1
@@ -25,7 +25,7 @@
[CmdletBinding()]
param(
# Branch to clone for each remote repo
- [string]$ZitiDocBranch = "docusaurus-3.10",
+ [string]$ZitiDocBranch = "main",
[string]$ZrokBranch = "main",
[string]$FrontdoorBranch = "develop",
[string]$SelfhostedBranch = "main",