opinionated-machine
Version:
Very opinionated DI framework for fastify, built on top of awilix
33 lines (32 loc) • 1.83 kB
TypeScript
import type { AwilixContainer, NameAndRegistrationPair } from 'awilix';
import { AwilixManager } from 'awilix-manager';
import type { FastifyInstance } from 'fastify';
import type { AbstractModule } from './AbstractModule.js';
import { type NestedPartial } from './configUtils.js';
import type { ENABLE_ALL } from './diConfigUtils.js';
export type RegisterDependenciesParams<Dependencies, Config, ExternalDependencies> = {
modules: readonly AbstractModule<unknown, ExternalDependencies>[];
secondaryModules?: readonly AbstractModule<unknown, ExternalDependencies>[];
dependencyOverrides?: NameAndRegistrationPair<Dependencies>;
configOverrides?: NestedPartial<Config>;
configDependencyId?: string;
};
export type DependencyInjectionOptions = {
jobQueuesEnabled?: false | typeof ENABLE_ALL | string[];
enqueuedJobWorkersEnabled?: false | typeof ENABLE_ALL | string[];
messageQueueConsumersEnabled?: false | typeof ENABLE_ALL | string[];
periodicJobsEnabled?: false | typeof ENABLE_ALL | string[];
};
export declare class DIContext<Dependencies extends object, Config extends object, ExternalDependencies = undefined> {
private readonly options;
readonly awilixManager: AwilixManager;
readonly diContainer: AwilixContainer<Dependencies>;
private readonly controllerResolvers;
private readonly appConfig;
constructor(diContainer: AwilixContainer, options: DependencyInjectionOptions, appConfig: Config, awilixManager?: AwilixManager);
private registerModule;
registerDependencies(params: RegisterDependenciesParams<Dependencies, Config, ExternalDependencies>, externalDependencies: ExternalDependencies, resolveControllers?: boolean): void;
registerRoutes(app: FastifyInstance<any, any, any, any>): void;
destroy(): Promise<void>;
init(): Promise<void>;
}