From 150a7dd7909a7e88ca07c116613e0f73bca4fa9d Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 3 Jan 2023 11:50:31 +0100 Subject: [PATCH] backend-app-api: throw error if trying to override metadata service Signed-off-by: Patrik Oldsberg --- .changeset/great-forks-lay.md | 5 +++++ packages/backend-app-api/src/wiring/types.ts | 6 ++++++ .../backend-defaults/src/CreateBackend.test.ts | 14 ++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 .changeset/great-forks-lay.md diff --git a/.changeset/great-forks-lay.md b/.changeset/great-forks-lay.md new file mode 100644 index 0000000000..6585951062 --- /dev/null +++ b/.changeset/great-forks-lay.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-app-api': patch +--- + +An error will now be thrown if attempting to override the plugin metadata service. diff --git a/packages/backend-app-api/src/wiring/types.ts b/packages/backend-app-api/src/wiring/types.ts index c591d5cb55..d3ffef731c 100644 --- a/packages/backend-app-api/src/wiring/types.ts +++ b/packages/backend-app-api/src/wiring/types.ts @@ -19,6 +19,7 @@ import { BackendFeature, ExtensionPoint, ServiceRef, + coreServices, } from '@backstage/backend-plugin-api'; import { BackstageBackend } from './BackstageBackend'; @@ -80,6 +81,11 @@ export function createSpecializedBackend( const ids = Array.from(duplicates).join(', '); throw new Error(`Duplicate service implementations provided for ${ids}`); } + if (exists.has(coreServices.pluginMetadata.id)) { + throw new Error( + `The ${coreServices.pluginMetadata.id} service cannot be overridden`, + ); + } return new BackstageBackend(services); } diff --git a/packages/backend-defaults/src/CreateBackend.test.ts b/packages/backend-defaults/src/CreateBackend.test.ts index 4b5e2e5848..a05e09df0f 100644 --- a/packages/backend-defaults/src/CreateBackend.test.ts +++ b/packages/backend-defaults/src/CreateBackend.test.ts @@ -55,4 +55,18 @@ describe('createBackend', () => { 'Duplicate service implementations provided for core.rootLifecycle', ); }); + + it('should throw when providing a plugin metadata service implementation', () => { + expect(() => + createBackend({ + services: [ + createServiceFactory({ + service: coreServices.pluginMetadata, + deps: {}, + factory: async () => async () => ({ getId: () => 'test' }), + }), + ], + }), + ).toThrow('The core.plugin-metadata service cannot be overridden'); + }); });