From 8a3e204e748c57f866d88c367b6ba4d8ddc71484 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Mon, 17 Apr 2023 16:25:35 -0400 Subject: [PATCH] chore: Allow specifying runnable phase directly from runAfter Signed-off-by: Sebastian Malton --- .../src/common/initializable-state/create.ts | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/packages/core/src/common/initializable-state/create.ts b/packages/core/src/common/initializable-state/create.ts index bb45d878b5..fc13e8d949 100644 --- a/packages/core/src/common/initializable-state/create.ts +++ b/packages/core/src/common/initializable-state/create.ts @@ -37,21 +37,28 @@ export const getInitializable = (rootId: string): Initializable => ({ type InitState = { set: true; value: T } | { set: false }; -export interface ImplInitializableInjectionTokensArgs { +export type ImplInitializableInjectionTokensArgs = { token: Initializable; init: (di: DiContainerForInjection) => T | Promise; - phase: InjectionToken, void>; - runAfter?: Runnable["runAfter"]; -} +} & ( + { + phase: InjectionToken, void>; + runAfter?: Injectable, Runnable, void>[]; + } + | + { + runAfter: Injectable, Runnable, void>; + phase?: undefined; + } +); export const getInjectablesForInitializable = ({ init, - phase, token: { rootId, stateToken, }, - runAfter, + ...rest }: ImplInitializableInjectionTokensArgs) => { let state: InitState = { set: false }; @@ -73,9 +80,15 @@ export const getInjectablesForInitializable = ({ value: await init(di), }; }, - runAfter, + runAfter: rest.runAfter, }), - injectionToken: phase, + injectionToken: (() => { + if (rest.runAfter && !Array.isArray(rest.runAfter)) { + return rest.runAfter.injectionToken; + } + + return rest.phase; + })(), }); return {