From 95d1300adad99e00e54d411dc5c5a5b7b5d37405 Mon Sep 17 00:00:00 2001 From: Julius Krumbiegel Date: Tue, 9 Sep 2025 12:21:05 +0200 Subject: [PATCH 1/2] don't overwrite but merge keys for pandoc --- src/command/render/pandoc.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/command/render/pandoc.ts b/src/command/render/pandoc.ts index 91b4371db40..15f939c6eed 100644 --- a/src/command/render/pandoc.ts +++ b/src/command/render/pandoc.ts @@ -1147,8 +1147,22 @@ export async function runPandoc( if (key === kFieldCategories && projectIsWebsite(options.project)) { continue; } - // perform the override - pandocMetadata[key] = engineMetadata[key]; + + if ( + (typeof pandocMetadata[key] === "object" && + typeof engineMetadata[key] === "object") || + (Array.isArray(pandocMetadata[key]) && + Array.isArray(engineMetadata[key])) + ) { + // Merge objects and arrays instead of replacing + pandocMetadata[key] = mergeConfigs( + pandocMetadata[key], + engineMetadata[key], + ); + } else { + // Replace values otherwise + pandocMetadata[key] = engineMetadata[key]; + } } } From efed3d3b94749bfc00a3e1105e25ad857f8740df Mon Sep 17 00:00:00 2001 From: Julius Krumbiegel Date: Tue, 9 Sep 2025 13:38:16 +0200 Subject: [PATCH 2/2] simplify and fix array bug by calling merge on temp objects instead --- src/command/render/pandoc.ts | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/src/command/render/pandoc.ts b/src/command/render/pandoc.ts index 15f939c6eed..40a577cfad0 100644 --- a/src/command/render/pandoc.ts +++ b/src/command/render/pandoc.ts @@ -1148,21 +1148,12 @@ export async function runPandoc( continue; } - if ( - (typeof pandocMetadata[key] === "object" && - typeof engineMetadata[key] === "object") || - (Array.isArray(pandocMetadata[key]) && - Array.isArray(engineMetadata[key])) - ) { - // Merge objects and arrays instead of replacing - pandocMetadata[key] = mergeConfigs( - pandocMetadata[key], - engineMetadata[key], - ); - } else { - // Replace values otherwise - pandocMetadata[key] = engineMetadata[key]; - } + // to handle all possible objects correctly when merging, + // we call mergeConfigs on temporary objects so the structure + // matches what that function expects + const a = { content: pandocMetadata[key] }; + const b = { content: engineMetadata[key] }; + pandocMetadata[key] = mergeConfigs(a, b).content; } }