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 {