From ab8c34bc0138b37be34c33712fa74cc201a462b4 Mon Sep 17 00:00:00 2001 From: benjdlambert Date: Thu, 17 Jul 2025 10:04:54 +0200 Subject: [PATCH 1/3] feat: added flags to pass through to specialized app Signed-off-by: benjdlambert --- .../frontend-defaults/src/createApp.test.tsx | 32 +++++++++++++++++++ packages/frontend-defaults/src/createApp.tsx | 2 ++ 2 files changed, 34 insertions(+) diff --git a/packages/frontend-defaults/src/createApp.test.tsx b/packages/frontend-defaults/src/createApp.test.tsx index 4f627f1839..1d96c22ad0 100644 --- a/packages/frontend-defaults/src/createApp.test.tsx +++ b/packages/frontend-defaults/src/createApp.test.tsx @@ -282,6 +282,38 @@ describe('createApp', () => { ).resolves.toBeInTheDocument(); }); + it('should allow unknown extension config if the flag is set', async () => { + const app = createApp({ + configLoader: async () => ({ + config: mockApis.config({ + data: { + app: { + extensions: [{ 'unknown:lols/wut': false }], + }, + }, + }), + }), + features: [ + appPlugin, + createFrontendPlugin({ + pluginId: 'test', + extensions: [ + PageBlueprint.make({ + params: { + defaultPath: '/', + loader: async () =>
Derp
, + }, + }), + ], + }), + ], + flags: { allowUnknownExtensionConfig: true }, + }); + + await renderWithEffects(app.createRoot()); + + await expect(screen.findByText('Derp')).resolves.toBeInTheDocument(); + }); it('should make the app structure available through the AppTreeApi', async () => { let appTreeApi: AppTreeApi | undefined = undefined; diff --git a/packages/frontend-defaults/src/createApp.tsx b/packages/frontend-defaults/src/createApp.tsx index e8baa3a764..ab0ddf85a7 100644 --- a/packages/frontend-defaults/src/createApp.tsx +++ b/packages/frontend-defaults/src/createApp.tsx @@ -80,6 +80,7 @@ export interface CreateAppOptions { | ExtensionFactoryMiddleware | ExtensionFactoryMiddleware[]; pluginInfoResolver?: FrontendPluginInfoResolver; + flags?: { allowUnknownExtensionConfig?: boolean }; } /** @@ -115,6 +116,7 @@ export function createApp(options?: CreateAppOptions): { bindRoutes: options?.bindRoutes, extensionFactoryMiddleware: options?.extensionFactoryMiddleware, pluginInfoResolver: options?.pluginInfoResolver, + flags: options?.flags, }); const rootEl = app.tree.root.instance!.getData( From 7adc846f50d571fa14d41a7941142f0a61e226e4 Mon Sep 17 00:00:00 2001 From: benjdlambert Date: Thu, 17 Jul 2025 10:05:52 +0200 Subject: [PATCH 2/3] chore: added changeset Signed-off-by: benjdlambert --- .changeset/spotty-icons-shake.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/spotty-icons-shake.md diff --git a/.changeset/spotty-icons-shake.md b/.changeset/spotty-icons-shake.md new file mode 100644 index 0000000000..0c4f318cd9 --- /dev/null +++ b/.changeset/spotty-icons-shake.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-defaults': patch +--- + +Added support for passing through `allowUnknownExtensionConfig` as a flag From 915d8c14de60367d64f77d5abe704bae353c343a Mon Sep 17 00:00:00 2001 From: benjdlambert Date: Thu, 17 Jul 2025 10:08:55 +0200 Subject: [PATCH 3/3] chore: update api-reports Signed-off-by: benjdlambert --- packages/frontend-defaults/report.api.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/frontend-defaults/report.api.md b/packages/frontend-defaults/report.api.md index 72f212b3b1..a5fe3e5f07 100644 --- a/packages/frontend-defaults/report.api.md +++ b/packages/frontend-defaults/report.api.md @@ -44,6 +44,10 @@ export interface CreateAppOptions { | FrontendFeatureLoader | CreateAppFeatureLoader )[]; + // (undocumented) + flags?: { + allowUnknownExtensionConfig?: boolean; + }; loadingComponent?: ReactNode; // (undocumented) pluginInfoResolver?: FrontendPluginInfoResolver;