From 3d852e9a2703a46b502cb1998cbd3b6b28abec32 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 3 Jan 2023 12:57:26 +0100 Subject: [PATCH] backend-plugin-api: clean up createServiceFactory types Signed-off-by: Patrik Oldsberg --- .../src/services/system/index.ts | 7 ++++- .../src/services/system/types.ts | 29 +++++++++++++------ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/packages/backend-plugin-api/src/services/system/index.ts b/packages/backend-plugin-api/src/services/system/index.ts index 8c666af42e..ca1090fbeb 100644 --- a/packages/backend-plugin-api/src/services/system/index.ts +++ b/packages/backend-plugin-api/src/services/system/index.ts @@ -14,5 +14,10 @@ * limitations under the License. */ -export type { ServiceRef, TypesToServiceRef, ServiceFactory } from './types'; +export type { + ServiceRef, + TypesToServiceRef, + ServiceFactory, + ServiceFactoryConfig, +} from './types'; export { createServiceRef, createServiceFactory } from './types'; diff --git a/packages/backend-plugin-api/src/services/system/types.ts b/packages/backend-plugin-api/src/services/system/types.ts index 2459dea918..c2302ae9d4 100644 --- a/packages/backend-plugin-api/src/services/system/types.ts +++ b/packages/backend-plugin-api/src/services/system/types.ts @@ -14,6 +14,8 @@ * limitations under the License. */ +import { FactoryFunctionWithOptions, MaybeOptions } from '../../types'; + /** * TODO * @@ -125,16 +127,14 @@ type ServiceRefsToInstances< }[keyof T]]: T[name] extends ServiceRef ? TImpl : never; }; -/** - * @public - */ -export function createServiceFactory< +/** @public */ +export interface ServiceFactoryConfig< TService, TScope extends 'root' | 'plugin', TImpl extends TService, TDeps extends { [name in string]: ServiceRef }, - TOpts extends object | undefined = undefined, ->(config: { + TOpts extends MaybeOptions = undefined, +> { service: ServiceRef; deps: TDeps; factory( @@ -143,9 +143,20 @@ export function createServiceFactory< ): TScope extends 'root' ? Promise : Promise<(deps: ServiceRefsToInstances) => Promise>; -}): undefined extends TOpts - ? (options?: TOpts) => ServiceFactory - : (options: TOpts) => ServiceFactory { +} + +/** + * @public + */ +export function createServiceFactory< + TService, + TScope extends 'root' | 'plugin', + TImpl extends TService, + TDeps extends { [name in string]: ServiceRef }, + TOpts extends MaybeOptions = undefined, +>( + config: ServiceFactoryConfig, +): FactoryFunctionWithOptions, TOpts> { return (options?: TOpts) => ({ scope: config.service.scope,