From 6058a95955643828268d0eac55615d6ecf15cd5b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 6 Aug 2024 14:13:23 +0200 Subject: [PATCH] backend-plugin-api: backwards compat for service ref multiton field Signed-off-by: Patrik Oldsberg --- packages/backend-plugin-api/api-report.md | 2 +- .../src/services/system/types.test.ts | 18 ++++++++++++++++++ .../src/services/system/types.ts | 4 ++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index 99c7b1b9fc..16574ac94e 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -703,7 +703,7 @@ export type ServiceRef< > = { id: string; scope: TScope; - multiton: TInstances extends 'multiton' ? true : false; + multiton?: TInstances extends 'multiton' ? true : false; T: TService; $$type: '@backstage/ServiceRef'; }; diff --git a/packages/backend-plugin-api/src/services/system/types.test.ts b/packages/backend-plugin-api/src/services/system/types.test.ts index adf097761b..70d165fd8d 100644 --- a/packages/backend-plugin-api/src/services/system/types.test.ts +++ b/packages/backend-plugin-api/src/services/system/types.test.ts @@ -324,6 +324,24 @@ describe('createServiceFactory', () => { metaFactory(); }); + it('should support old service refs without a multiton field', () => { + const oldPluginDep = pluginDep as Omit; // Old refs don't have a multiton field + const metaFactory = createServiceFactory({ + service: ref, + deps: { + plugin: oldPluginDep, + }, + async factory({ plugin }) { + const plugin1: boolean = plugin; + // @ts-expect-error + const plugin2: number = plugin; + unused(plugin1, plugin2); + return 'x'; + }, + }); + expect(metaFactory).toEqual(expect.any(Function)); + }); + it('should only allow objects as options', () => { // @ts-expect-error const metaFactory = createServiceFactory((_opts: string) => ({ diff --git a/packages/backend-plugin-api/src/services/system/types.ts b/packages/backend-plugin-api/src/services/system/types.ts index 7cd18da4d2..a6f33d7941 100644 --- a/packages/backend-plugin-api/src/services/system/types.ts +++ b/packages/backend-plugin-api/src/services/system/types.ts @@ -39,7 +39,7 @@ export type ServiceRef< */ scope: TScope; - multiton: TInstances extends 'multiton' ? true : false; + multiton?: TInstances extends 'multiton' ? true : false; /** * Utility for getting the type of the service, using `typeof serviceRef.T`. @@ -189,7 +189,7 @@ type ServiceRefsToInstances< > = { [key in keyof T as T[key]['scope'] extends TScope ? key - : never]: T[key]['multiton'] extends true + : never]: T[key]['multiton'] extends true | undefined ? Array : T[key]['T']; };