import type { Container } from '../container.js'; import type { InjectionToken } from '../inject.js'; export type MaybePromise = T | Promise; export interface RuntimeMetadata { readonly services: readonly object[]; } export interface RuntimeContext { readonly container: Container; readonly resolve: (token: InjectionToken) => T; readonly metadata: RuntimeMetadata; } export interface RuntimeLifecycleParticipant { onStart?(context: RuntimeContext): MaybePromise; onShutdown?(context: RuntimeContext): MaybePromise; } export interface RuntimeFeature { start?(context: RuntimeContext): MaybePromise; shutdown?(context: RuntimeContext): MaybePromise; dispose?(): void; }