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 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; 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(