From 16b8988fa71ce01d63024d27b9a492a8e953ad65 Mon Sep 17 00:00:00 2001 From: vcoppe Date: Fri, 17 Apr 2026 22:10:30 +0200 Subject: [PATCH] fix layer filtering, must allow unknown intermediary keys --- website/src/lib/logic/settings.ts | 43 ++++++++++++++++++------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/website/src/lib/logic/settings.ts b/website/src/lib/logic/settings.ts index facbba2f1..4f808e945 100644 --- a/website/src/lib/logic/settings.ts +++ b/website/src/lib/logic/settings.ts @@ -162,24 +162,31 @@ function getLayerValidator(allowed: Record, fallback: string) { function filterLayerTree(t: LayerTreeType, allowed: LayerTreeType | undefined): LayerTreeType { const filtered: LayerTreeType = {}; - if (!allowed) return filtered; - Object.keys(allowed).forEach((key) => { - const allowedVal = allowed[key]; - if (typeof allowedVal === 'boolean') { - filtered[key] = typeof t?.[key] === 'boolean' ? t[key] : allowedVal; - } else { - filtered[key] = filterLayerTree( - typeof t?.[key] === 'object' ? (t[key] as LayerTreeType) : {}, - allowedVal - ); - } - }); - Object.entries(t ?? {}).forEach(([key, value]) => { - if ( - !Object.hasOwn(filtered, key) && - (key.startsWith('custom-') || key.startsWith('extension-')) - ) { - filtered[key] = value; + if (allowed) { + Object.entries(allowed).forEach(([key, value]) => { + if (Object.hasOwn(t, key)) { + if (typeof value === 'boolean') { + filtered[key] = t[key]; + } else if (typeof value === 'object') { + filtered[key] = filterLayerTree( + typeof t[key] === 'object' ? t[key] : {}, + value + ); + } + } else { + filtered[key] = value; + } + }); + } + Object.entries(t).forEach(([key, value]) => { + if (!Object.hasOwn(filtered, key)) { + if (typeof value === 'boolean') { + if (key.startsWith('custom-') || key.startsWith('extension-')) { + filtered[key] = value; + } + } else if (typeof value === 'object') { + filtered[key] = filterLayerTree(value, undefined); + } } }); return filtered;