From 3d3c661d57041bd08764314dfa5ee847240b0824 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Tue, 19 Sep 2023 15:29:41 +0200 Subject: [PATCH] feat(frontent-app-api): prevent root extension replacement Signed-off-by: Camila Belo --- packages/frontend-app-api/src/wiring/parameters.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/frontend-app-api/src/wiring/parameters.ts b/packages/frontend-app-api/src/wiring/parameters.ts index 1b2831aaca..acde9d9ec0 100644 --- a/packages/frontend-app-api/src/wiring/parameters.ts +++ b/packages/frontend-app-api/src/wiring/parameters.ts @@ -188,6 +188,14 @@ export interface ExtensionInstanceParameters { config?: unknown; } +function preventRootExtensionOverride(id: string) { + if (id === 'root') { + throw new Error( + 'There is a root extension in the app config file and root extensions are not configurable', + ); + } +} + /** @internal */ export function mergeExtensionParameters(options: { sources: BackstagePlugin[]; @@ -220,8 +228,10 @@ export function mergeExtensionParameters(options: { ]; for (const overrideParam of parameters) { + const extensionId = overrideParam.id; + preventRootExtensionOverride(extensionId); const existingIndex = overrides.findIndex( - e => e.extension.id === overrideParam.id, + e => e.extension.id === extensionId, ); if (existingIndex !== -1) { const existing = overrides[existingIndex]; @@ -243,7 +253,7 @@ export function mergeExtensionParameters(options: { } } } else { - throw new Error(`Extension ${overrideParam.id} does not exist`); + throw new Error(`Extension ${extensionId} does not exist`); } }