import type { CacheLike } from "../../types/services"; import type { StorageManager } from "../storage/storage"; import type { ConfigStore, ConfigStoreLike, ServiceContainer, ServiceFactory } from "./container"; type AppRouteMap = Record; type CachedJson = (cacheKey: string, loader: () => Promise, tags?: string[], request?: Request) => Promise; interface AppDependencies { container: ServiceContainer; cache: CacheLike; storage: StorageManager; } type MutableAppDependencies = Partial> & Pick; interface ProviderContext { container: ServiceContainer; config: ConfigStore; dependencies: MutableAppDependencies; } interface ServiceProvider { name: string; register?(context: ProviderContext): void; boot?(context: ProviderContext): void; } interface AppContext { container: ServiceContainer; config: ConfigStoreLike; dependencies: AppDependencies; } declare function getRequiredDependency(dependencies: Partial, key: K): AppDependencies[K]; declare function assertAppDependenciesComplete(dependencies: MutableAppDependencies): asserts dependencies is AppDependencies; declare function resolveService(dependencies: AppDependencies, token: string): T; export type { AppContext, AppDependencies, AppRouteMap, CachedJson, MutableAppDependencies, ProviderContext, ServiceFactory, ServiceProvider, }; export { assertAppDependenciesComplete, getRequiredDependency, resolveService };