diff --git a/.changeset/polite-shoes-allow.md b/.changeset/polite-shoes-allow.md new file mode 100644 index 0000000000..b7e06bce6f --- /dev/null +++ b/.changeset/polite-shoes-allow.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-app-api': patch +--- + +Added the ability to ignore unknown extension config by passing `{ flags: { allowUnknownExtensionConfig: true } }` to `createSpecializedApp`. diff --git a/packages/frontend-app-api/report.api.md b/packages/frontend-app-api/report.api.md index f24d662df4..d2a3ac4d3b 100644 --- a/packages/frontend-app-api/report.api.md +++ b/packages/frontend-app-api/report.api.md @@ -34,6 +34,9 @@ export function createSpecializedApp(options?: { extensionFactoryMiddleware?: | ExtensionFactoryMiddleware | ExtensionFactoryMiddleware[]; + flags?: { + allowUnknownExtensionConfig?: boolean; + }; }): { apis: ApiHolder; tree: AppTree; diff --git a/packages/frontend-app-api/src/tree/resolveAppNodeSpecs.ts b/packages/frontend-app-api/src/tree/resolveAppNodeSpecs.ts index 0abbbb3560..3da68dcb50 100644 --- a/packages/frontend-app-api/src/tree/resolveAppNodeSpecs.ts +++ b/packages/frontend-app-api/src/tree/resolveAppNodeSpecs.ts @@ -33,12 +33,14 @@ export function resolveAppNodeSpecs(options: { builtinExtensions?: Extension[]; parameters?: Array; forbidden?: Set; + allowUnknownExtensionConfig?: boolean; }): AppNodeSpec[] { const { builtinExtensions = [], parameters = [], forbidden = new Set(), features = [], + allowUnknownExtensionConfig = false, } = options; const plugins = features.filter(OpaqueFrontendPlugin.isType); @@ -202,7 +204,7 @@ export function resolveAppNodeSpecs(options: { existing.params.disabled = Boolean(overrideParam.disabled); } order.set(extensionId, existing); - } else { + } else if (!allowUnknownExtensionConfig) { throw new Error(`Extension ${extensionId} does not exist`); } } diff --git a/packages/frontend-app-api/src/wiring/createSpecializedApp.tsx b/packages/frontend-app-api/src/wiring/createSpecializedApp.tsx index 1a4c7dbc78..5f6692d600 100644 --- a/packages/frontend-app-api/src/wiring/createSpecializedApp.tsx +++ b/packages/frontend-app-api/src/wiring/createSpecializedApp.tsx @@ -208,6 +208,7 @@ export function createSpecializedApp(options?: { extensionFactoryMiddleware?: | ExtensionFactoryMiddleware | ExtensionFactoryMiddleware[]; + flags?: { allowUnknownExtensionConfig?: boolean }; }): { apis: ApiHolder; tree: AppTree } { const config = options?.config ?? new ConfigReader({}, 'empty-config'); const features = deduplicateFeatures(options?.features ?? []); @@ -221,6 +222,7 @@ export function createSpecializedApp(options?: { ], parameters: readAppExtensionsConfig(config), forbidden: new Set(['root']), + allowUnknownExtensionConfig: options?.flags?.allowUnknownExtensionConfig, }), );