From d1eeb01b016efa5485353aa6936000b4fbb4a580 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 4 Sep 2020 15:44:18 +0200 Subject: [PATCH] core-api: overload createApiFactory with a singleton helper --- packages/core-api/src/apis/helpers.ts | 30 +++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/packages/core-api/src/apis/helpers.ts b/packages/core-api/src/apis/helpers.ts index e2274a20f1..95be80e541 100644 --- a/packages/core-api/src/apis/helpers.ts +++ b/packages/core-api/src/apis/helpers.ts @@ -14,15 +14,37 @@ * limitations under the License. */ -import { AnyApiFactory, ApiFactory } from './types'; +import { ApiFactory } from './types'; +import { ApiRef } from './ApiRef'; /** * Used to infer types for a standalone ApiFactory that isn't immediately passed * to another function. * This function doesn't actually do anything, it's only used to infer types. */ -export function createApiFactory( - factory: ApiFactory, -): AnyApiFactory { +export function createApiFactory< + Api, + Impl extends Api, + Deps extends { [name in string]: unknown } +>(factory: ApiFactory): ApiFactory; +export function createApiFactory( + api: ApiRef, + instance: Impl, +): ApiFactory; +export function createApiFactory< + Api, + Impl extends Api, + Deps extends { [name in string]: unknown } +>( + factory: ApiFactory | ApiRef, + instance?: Impl, +): ApiFactory { + if ('id' in factory) { + return ({ + implements: factory, + deps: {}, + factory: () => instance!, + } as unknown) as ApiFactory; + } return factory; }