UNPKG

moost

Version:
707 lines (680 loc) 26.2 kB
import { useEventLogger } from '@wooksjs/event-core'; export { ContextInjector, EventLogger, THook, getContextInjector, replaceContextInjector, useAsyncEventContext, useEventLogger } from '@wooksjs/event-core'; import { TProvideRegistry, Infact, TReplaceRegistry, TProvideFn } from '@prostojs/infact'; export { TProvideRegistry, createProvideRegistry, createReplaceRegistry } from '@prostojs/infact'; import * as _prostojs_logger from '@prostojs/logger'; import { TConsoleBase, TProstoLoggerOptions, ProstoLogger } from '@prostojs/logger'; export { ProstoLogger, TConsoleBase } from '@prostojs/logger'; import { Hookable } from 'hookable'; import * as _prostojs_mate from '@prostojs/mate'; import { TMateParamMeta, Mate } from '@prostojs/mate'; export { Mate, TMateParamMeta, getConstructor, isConstructor } from '@prostojs/mate'; export { clearGlobalWooks, getGlobalWooks } from 'wooks'; type TAny = any; type TAnyFn = (...a: TAny[]) => unknown; type TObject = object; type TFunction = Function; type TClassConstructor<T = unknown> = new (...args: TAny[]) => T; interface TEmpty { } declare function Circular<T = unknown>(resolver: () => TClassConstructor<T>): ParameterDecorator; /** * Apply Multiple Decorators * * @param decorators - array of decorators * @returns */ declare function ApplyDecorators(...decorators: (MethodDecorator | ClassDecorator | ParameterDecorator | PropertyDecorator)[]): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator; /** * ## Label * ### @Decorator * _Common purpose decorator that may be used by various adapters for various purposes_ * * Stores Label metadata */ declare function Label(value: string): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator; /** * ## Description * ### @Decorator * _Common purpose decorator that may be used by various adapters for various purposes_ * * Stores Description metadata */ declare function Description(value: string): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator; /** * ## Value * ### @Decorator * _Common purpose decorator that may be used by various adapters for various purposes_ * * Stores Value metadata */ declare function Value(value: unknown): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator; /** * ## Id * ### @Decorator * _Common purpose decorator that may be used by various adapters for various purposes_ * * Stores Id metadata */ declare function Id(value: string): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator; /** * ## Optional * ### @Decorator * _Common purpose decorator that may be used by various adapters for various purposes_ * * Stores Optional metadata */ declare function Optional(): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator; /** * ## Required * ### @Decorator * _Common purpose decorator that may be used by various adapters for various purposes_ * * Stores Required metadata */ declare function Required(): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator; /** * ## Controller * ### @Decorator * Set Class as a Controller * @param prefix - define the prefix for all the paths of this controller */ declare function Controller(prefix?: string): ClassDecorator; /** * ## ImportController * ### @Decorator * Attach sub-controller * @param controller - target controller (instance) to import * @param provide - provide registry for the target controller */ declare function ImportController(controller: TFunction | TObject, provide?: TProvideRegistry): ClassDecorator; /** * ## ImportController * ### @Decorator * Attach sub-controller * @param prefix - redefine the prefix for all the paths of this controller * @param controller - point to a controller (instance) to import * @param provide - provide registry for the target controller */ declare function ImportController(prefix: string, controller: TFunction | TObject, provide?: TProvideRegistry): ClassDecorator; /** * ## Inherit * ### @Decorator * Inherit metadata from super class * @returns */ declare const Inherit: () => MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator; interface TClassFunction<T extends TAnyFn = TAnyFn> { handler: T; } type TClassFunctionConstructor<T extends TAnyFn = TAnyFn> = new (...a: TAny[]) => TClassFunction<T>; type TCallableClassFunction<T extends TAnyFn = TAnyFn> = T | TClassFunctionConstructor; type TInterceptorBefore = (reply: (response: TAny) => void) => void | Promise<void>; type TInterceptorAfter = (response: TAny, reply: (response: TAny) => void) => void | Promise<void>; type TInterceptorOnError = (error: Error, reply: (response: TAny) => void) => void | Promise<void>; interface TInterceptorFn { (before: (fn: TInterceptorBefore) => void, after: (fn: TInterceptorAfter) => void, onError: (fn: TInterceptorOnError) => void): unknown | Promise<unknown>; priority?: TInterceptorPriority; _name?: string; } declare enum TInterceptorPriority { BEFORE_ALL = 0, BEFORE_GUARD = 1, GUARD = 2, AFTER_GUARD = 3, INTERCEPTOR = 4, CATCH_ERROR = 5, AFTER_ALL = 6 } /** * ## Intercept * ### @Decorator * Set interceptor * @param handler interceptor fn (use defineInterceptorFn) * @param priority interceptor priority * @returns */ declare function Intercept(handler: TCallableClassFunction<TInterceptorFn>, priority?: TInterceptorPriority, name?: string): ClassDecorator & MethodDecorator; type TDecoratorLevel = 'CLASS' | 'METHOD' | 'PROP' | 'PARAM'; interface TInfactLoggingOptions { newInstance?: true | false | 'FOR_EVENT' | 'SINGLETON'; warn?: true | false; error?: true | false; } declare function setInfactLoggingOptions(options: TInfactLoggingOptions): void; declare function getMoostInfact(): Infact<TMoostMetadata<TEmpty>, TMoostMetadata<TEmpty>, TMoostParamsMetadata, TCustom>; interface TCustom { pipes?: TPipeData[]; } /** * Define global scope name to be used with `@InjectFromScope` and `@InjectScopeVars` decorators * * You can read scoped vars with `getInfactScopeVars` * @param name scope name * @param scopeVars key-value object as scoped vars */ declare function defineInfactScope<T extends object>(name: string | symbol, scopeVars: T): void; /** * Read scoped vars defined with `defineInfactScope` * @param name scope name * @returns key-value object as scoped vars */ declare function getInfactScopeVars<T extends object>(name: string | symbol): T | undefined; /** * Get Infact instance (used for Dependency Injections) */ declare function getNewMoostInfact(): Infact<TMoostMetadata<TEmpty>, TMoostMetadata<TEmpty>, TMoostParamsMetadata, TCustom>; interface TPipeMetas<T extends TObject = TEmpty> { classMeta?: TMoostMetadata & T; methodMeta?: TMoostMetadata & T; propMeta?: TMoostMetadata & T; paramMeta?: TMoostParamsMetadata & T; targetMeta?: TMoostParamsMetadata & T; instance?: TObject; scopeId?: string | symbol; type: TFunction; index?: number; key: string | symbol; instantiate: <T extends TObject>(t: TClassConstructor<T>) => Promise<T>; } interface TPipeFn<T extends TObject = TEmpty> { (value: unknown, metas: TPipeMetas<T>, level: TDecoratorLevel): unknown | Promise<unknown>; priority?: TPipePriority; } declare enum TPipePriority { BEFORE_RESOLVE = 0, RESOLVE = 1, AFTER_RESOLVE = 2, BEFORE_TRANSFORM = 3, TRANSFORM = 4, AFTER_TRANSFORM = 5, BEFORE_VALIDATE = 6, VALIDATE = 7, AFTER_VALIDATE = 8 } interface TPipeData { handler: TPipeFn; priority: TPipePriority; } declare const resolvePipe: TPipeFn<TEmpty>; interface TMoostMetadata<H extends TObject = TEmpty> extends TCommonMetaFields, TCommonMoostMeta { requiredProps?: Array<string | symbol>; controller?: { prefix?: string; }; importController?: Array<{ prefix?: string; typeResolver?: TClassConstructor | (() => TClassConstructor | TObject | Promise<TClassConstructor | TObject>); provide?: TProvideRegistry; }>; properties?: Array<string | symbol>; injectable?: true | TInjectableScope; interceptors?: TInterceptorData[]; handlers?: Array<TMoostHandler<H>>; returnType?: TFunction; provide?: TProvideRegistry; replace?: TReplaceRegistry; loggerTopic?: string; params: Array<TMateParamMeta & TMoostParamsMetadata>; } interface TMoostParamsMetadata extends TCommonMetaFields, TCommonMoostMeta { circular?: () => TAny; inject?: string | symbol | TClassConstructor; nullable?: boolean; paramSource?: string; paramName?: string; fromScope?: string | symbol; } type TInjectableScope = 'FOR_EVENT' | 'SINGLETON'; type TMoostHandler<T> = { type: string; path?: string; } & T; interface TInterceptorData { handler: TCallableClassFunction<TInterceptorFn>; priority: TInterceptorPriority; name: string; } declare function getMoostMate<Class extends TObject = TEmpty, Prop extends TObject = TEmpty, Param extends TObject = TEmpty>(): Mate<TMoostMetadata & Class & { params: Array<Param & TMateParamMeta>; }, TMoostMetadata & Prop & { params: Array<Param & TMateParamMeta>; }>; interface TCommonMetaFields { id?: string; label?: string; value?: unknown; description?: string; optional?: boolean; required?: boolean; } interface TCommonMoostMeta { inherit?: boolean; pipes?: TPipeData[]; resolver?: (metas: TPipeMetas<TAny>, level: TDecoratorLevel) => unknown; type?: TFunction; } /** * ## Injectable * ### @Decorator * Mark the Class as Injectable to enable it to be used in dependency injection * @param scope - Scope for injection ("FOR_EVENT" | "SINGLETON" | true) * FOR_EVENT - will create a new instance for each incoming request * SINGLETON | true - will create a new instance only once * @param label - field label */ declare function Injectable(scope?: true | TInjectableScope): ClassDecorator; /** * Resolves event logger from event context * @param topic * @returns Resolver to '@wooksjs/event-core' (EventLogger) */ declare function InjectEventLogger(topic?: string): ParameterDecorator & PropertyDecorator; /** * Resolves app-level logger * @param topic - logger topic (can be overrided by @LoggerTopic) * @returns */ declare function InjectMoostLogger(topic?: string): ParameterDecorator & PropertyDecorator; /** * Sets logger topic (used in @InjectMoostLogger) * @param topic - logger topic (banner) * @returns */ declare function LoggerTopic(topic: string): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator; /** * ## Pipe * ### @Decorator * Attach pipe * @param handler pipe handler * @param priority pipe priority * @returns */ declare function Pipe(handler: TPipeFn, priority?: TPipePriority): ClassDecorator & MethodDecorator & ParameterDecorator; /** * ## Provide * ### @Decorator * Defines provide registry for class (and all the children) * @param type - string or class constructor * @param fn - factory function for provided value */ declare function Provide(type: string | TClassConstructor, fn: TProvideFn): ClassDecorator & ParameterDecorator & PropertyDecorator; /** * ## Replace * ### @Decorator * Defines class to replace in DI * @param type - class to replace * @param newType - new class */ declare function Replace(type: TClassConstructor, newType: TClassConstructor): ClassDecorator; /** * ## Inject * ### @Decorator * Defines a key from provide registry to inject value * (For optional values use with @Optional()) * @param type - string or class constructor */ declare function Inject(type: string | TClassConstructor): ParameterDecorator & PropertyDecorator; /** * Injects instance from scope * * (scope must be defined by `defineInfactScope` fn) * @param name scope name */ declare function InjectFromScope(name: string | symbol): ParameterDecorator & PropertyDecorator; /** * Inject vars from scope for instances * instantiated with `@InjectFromScope` decorator */ declare function InjectScopeVars(name?: string): ParameterDecorator & PropertyDecorator; /** * Hook to the Response Status * @decorator * @param resolver - resolver function * @param label - field label * @paramType unknown */ declare function Resolve<T extends TObject = TEmpty>(resolver: (metas: TPipeMetas<T>, level: TDecoratorLevel) => unknown, label?: string): ParameterDecorator & PropertyDecorator; /** * Get Param Value from url parh * @decorator * @param name - param name * @paramType string */ declare function Param(name: string): MethodDecorator & ClassDecorator & ParameterDecorator & PropertyDecorator; /** * Get Parsed Params from url parh * @decorator * @paramType object */ declare function Params(): ParameterDecorator & PropertyDecorator; /** * Provide Const Value * @decorator * @param value - provided value * @param label - label of the field * @paramType unknown */ declare function Const<T>(value: T, label?: string): ParameterDecorator & PropertyDecorator; /** * Provide Const Value from Factory fn * @decorator * @param factory - value Factory fn * @param label - label of the field * @paramType unknown */ declare function ConstFactory<T>(factory: () => T | Promise<T>, label?: string): ParameterDecorator & PropertyDecorator; declare class InterceptorHandler { protected handlers: Array<{ handler: TInterceptorFn; name: string; }>; constructor(handlers: Array<{ handler: TInterceptorFn; name: string; }>); protected before: Array<{ name: string; fn: TInterceptorBefore; }>; protected after: Array<{ name: string; fn: TInterceptorAfter; }>; protected onError: Array<{ name: string; fn: TInterceptorOnError; }>; response?: unknown; responseOverwritten: boolean; get count(): number; get countBefore(): number; get countAfter(): number; get countOnError(): number; replyFn(reply: unknown): void; init(): Promise<{} | null | undefined>; fireBefore(response: unknown): Promise<unknown>; fireAfter(response: unknown): Promise<unknown>; } interface TMoostEventHandlerHookOptions<T> { scopeId: string; logger: ReturnType<typeof useEventLogger>; unscope: () => void; instance?: T; method?: keyof T; getResponse: () => unknown; reply: (r: unknown) => void; } interface TMoostEventHandlerOptions<T> { contextType?: string | string[]; loggerTitle: string; getIterceptorHandler: () => Promise<InterceptorHandler> | InterceptorHandler | undefined; getControllerInstance: () => Promise<T> | T | undefined; controllerMethod?: keyof T; callControllerMethod?: (args: unknown[]) => unknown; resolveArgs?: () => Promise<unknown[]> | unknown[]; logErrors?: boolean; manualUnscope?: boolean; hooks?: { init?: (opts: TMoostEventHandlerHookOptions<T>) => unknown; end?: (opts: TMoostEventHandlerHookOptions<T>) => unknown; }; targetPath: string; handlerType: string; } declare function registerEventScope(scopeId: string): () => void; declare function defineMoostEventHandler<T>(options: TMoostEventHandlerOptions<T>): () => Promise<unknown>; declare function getInstanceOwnMethods<T = TAny>(instance: T): Array<keyof T>; declare function getInstanceOwnProps<T = TAny>(instance: T): Array<keyof T>; interface TControllerOverview { meta: TMoostMetadata; computedPrefix: string; type: TFunction; handlers: THandlerOverview[]; } interface THandlerOverview { meta: TMoostMetadata; path?: string; type: string; method: string; handler: TMoostHandler<TEmpty>; registeredAs: Array<{ path: string; args: string[]; }>; } type TContextInjectorHook = 'Event:start' | 'Interceptors:init' | 'Arguments:resolve' | 'Interceptors:before' | 'Handler' | 'Interceptors:after'; interface TMoostOptions { /** * Prefix that is used for each event path */ globalPrefix?: string; logger?: TConsoleBase; } /** * ## Moost * Main moostjs class that serves as a shell for Moost Adapters * * ### Usage with HTTP Adapter * ```ts * │ // HTTP server example * │ import { MoostHttp, Get } from '@moostjs/event-http' * │ import { Moost, Param } from 'moost' * │ * │ class MyServer extends Moost { * │ @Get('test/:name') * │ test(@Param('name') name: string) { * │ return { message: `Hello ${name}!` } * │ } * │ } * │ * │ const app = new MyServer() * │ const http = new MoostHttp() * │ app.adapter(http).listen(3000, () => { * │ app.getLogger('MyApp').log('Up on port 3000') * │ }) * │ app.init() * ``` * ### Usage with CLI Adapter * ```ts * │ // CLI example * │ import { MoostCli, Cli, CliOption, cliHelpInterceptor } from '@moostjs/event-cli' * │ import { Moost, Param } from 'moost' * │ * │ class MyApp extends Moost { * │ @Cli('command/:arg') * │ command( * │ @Param('arg') * │ arg: string, * │ @CliOption('test', 't') * │ test: boolean, * │ ) { * │ return `command run with flag arg=${ arg }, test=${ test }` * │ } * │ } * │ * │ const app = new MyApp() * │ app.applyGlobalInterceptors(cliHelpInterceptor()) * │ * │ const cli = new MoostCli() * │ app.adapter(cli) * │ app.init() * ``` */ declare class Moost extends Hookable { protected options?: TMoostOptions | undefined; protected logger: TConsoleBase; protected pipes: TPipeData[]; protected interceptors: TInterceptorData[]; protected adapters: Array<TMoostAdapter<TAny>>; protected controllersOverview: TControllerOverview[]; protected provide: TProvideRegistry; protected replace: TReplaceRegistry; protected unregisteredControllers: Array<TObject | TFunction | [string, TObject | TFunction]>; constructor(options?: TMoostOptions | undefined); _fireEventStart(source: TMoostAdapter<unknown>): void; _fireEventEnd(source: TMoostAdapter<unknown>): void; /** * ### getLogger * Provides application logger * ```js * // get logger with topic = "App" * const logger = app.getLogger('App') * logger.log('...') * ``` * @param topic * @returns */ getLogger(topic?: string): TConsoleBase; adapter<T extends TMoostAdapter<TAny>>(a: T): T; getControllersOverview(): TControllerOverview[]; /** * ### init * Ititializes adapter. Must be called after adapters are attached. */ init(): Promise<void>; protected bindControllers(): Promise<void>; protected bindController(controller: TFunction | TObject, provide: TProvideRegistry, replace: TReplaceRegistry, globalPrefix: string, replaceOwnPrefix?: string): Promise<void>; applyGlobalPipes(...items: Array<TPipeFn | TPipeData>): this; protected globalInterceptorHandler?: () => Promise<InterceptorHandler>; /** * Provides InterceptorHandler with global interceptors and pipes. * Used to process interceptors when event handler was not found. * * @returns IterceptorHandler */ getGlobalInterceptorHandler(): Promise<InterceptorHandler>; applyGlobalInterceptors(...items: Array<TInterceptorData['handler'] | TInterceptorData>): this; /** * Register new entries to provide as dependency injections * @param provide - Provide Registry (use createProvideRegistry from '\@prostojs/infact') * @returns */ setProvideRegistry(provide: TProvideRegistry): this; /** * Register replace classes to provide as dependency injections * @param replace - Replace Registry (use createReplaceRegistry from '\@prostojs/infact') * @returns */ setReplaceRegistry(replace: TReplaceRegistry): this; /** * Register controllers (similar to @ImportController decorator) * @param controllers - list of target controllers (instances) * @returns */ registerControllers(...controllers: Array<TObject | TFunction | [string, TObject | TFunction]>): this; logMappedHandler(eventName: string, classConstructor: Function, method: string, stroke?: boolean, prefix?: string): void; } interface TMoostAdapterOptions<H, T> { prefix: string; fakeInstance: T; getInstance: () => Promise<T>; method: keyof T; handlers: Array<TMoostHandler<H>>; getIterceptorHandler: () => Promise<InterceptorHandler>; resolveArgs: () => Promise<unknown[]>; logHandler: (eventName: string) => void; register: (handler: TMoostHandler<TEmpty>, path: string, args: string[]) => void; } interface TMoostAdapter<H> { name: string; bindHandler: <T extends TObject = TObject>(options: TMoostAdapterOptions<H, T>) => void | Promise<void>; onInit?: (moost: Moost) => void | Promise<void>; getProvideRegistry?: () => TProvideRegistry; } declare function setControllerContext<T>(controller: T, method: keyof T, route: string): void; declare function useControllerContext<T extends object>(): { instantiate: <TT>(c: TClassConstructor<TT>) => Promise<TT>; getRoute: () => string | undefined; getController: () => T; getMethod: () => string | undefined; getControllerMeta: <TT extends object>() => (TMoostMetadata<TEmpty> & TT & { params: (TT & _prostojs_mate.TMateParamMeta)[]; }) | undefined; getMethodMeta: <TT extends object>(name?: string) => (TMoostMetadata<TEmpty> & TT & { params: (TT & _prostojs_mate.TMateParamMeta)[]; } & { params: (TT & _prostojs_mate.TMateParamMeta)[]; } & _prostojs_mate.TMateClassMeta<(TMoostMetadata<TEmpty> & TT & { params: (TT & _prostojs_mate.TMateParamMeta)[]; })["params"][0]> & _prostojs_mate.TMatePropMeta<(TMoostMetadata<TEmpty> & TT & { params: (TT & _prostojs_mate.TMateParamMeta)[]; })["params"][0]>) | undefined; getPropertiesList: () => (string | symbol)[]; getScope: () => true | TInjectableScope; getParamsMeta: () => (_prostojs_mate.TMateParamMeta & TMoostParamsMetadata)[] & (object & _prostojs_mate.TMateParamMeta)[] & (_prostojs_mate.TMateParamMeta & TMoostParamsMetadata & object)[]; getPropMeta: (name: string) => (TMoostMetadata<TEmpty> & object & { params: (object & _prostojs_mate.TMateParamMeta)[]; } & { params: (object & _prostojs_mate.TMateParamMeta)[]; } & _prostojs_mate.TMateClassMeta<_prostojs_mate.TMateParamMeta & TMoostParamsMetadata & object> & _prostojs_mate.TMatePropMeta<_prostojs_mate.TMateParamMeta & TMoostParamsMetadata & object>) | undefined; }; /** * ### Define Interceptor Function * * ```ts * defineInterceptorFn((before, after, onError) => { * //init * before(() => { * // before handler * }) * after((response, reply) => { * // after handler * }) * onError((error, reply) => { * // when error occured * }) * }, * TInterceptorPriority.INTERCEPTOR, * ) * ``` * * @param fn interceptor function * @param priority priority of the interceptor where BEFORE_ALL = 0, BEFORE_GUARD = 1, GUARD = 2, AFTER_GUARD = 3, INTERCEPTOR = 4, CATCH_ERROR = 5, AFTER_ALL = 6 * @returns */ declare function defineInterceptorFn(fn: TInterceptorFn, priority?: TInterceptorPriority): TInterceptorFn; /** * Class based interceptor interface * * Use it to create class-based interceptors and don't forget to make it **@Injectable()** * * @example * "@Injectable() * export class MyInterceptor implements TInterceptorClass { * static priority = TInterceptorPriority.INTERCEPTOR * handler: TInterceptorClass['handler'] = (before, after, onError) => { * before((reply) => { * console.log('before') * }) * after((response, reply) => { * console.log('after') * }) * onError((error, reply) => { * console.log('error') * }) * } * } */ type TInterceptorClass = TClassFunction<TInterceptorFn>; /** * ### Define Pipe Function * * ```ts * // example of a transform pipe * const uppercaseTransformPipe = definePipeFn((value, metas, level) => { * return typeof value === 'string' ? value.toUpperCase() : value * }, * TPipePriority.TRANSFORM, * ) * ``` * * @param fn interceptor function * @param priority priority of the pipe where BEFORE_RESOLVE = 0, RESOLVE = 1, AFTER_RESOLVE = 2, BEFORE_TRANSFORM = 3, TRANSFORM = 4, AFTER_TRANSFORM = 5, BEFORE_VALIDATE = 6, VALIDATE = 7, AFTER_VALIDATE = 8 * @returns */ declare function definePipeFn<T extends TObject = TEmpty>(fn: TPipeFn<T>, priority?: TPipePriority): TPipeFn<T>; declare function createLogger(opts?: Partial<TProstoLoggerOptions>): ProstoLogger; declare const loggerConsoleTransport: _prostojs_logger.TProstoLoggerTransportFn<any>; export { ApplyDecorators, Circular, Const, ConstFactory, Controller, Description, Id, ImportController, Inherit, Inject, InjectEventLogger, InjectFromScope, InjectMoostLogger, InjectScopeVars, Injectable, Intercept, InterceptorHandler, Label, LoggerTopic, Moost, Optional, Param, Params, Pipe, Provide, Replace, Required, Resolve, TInterceptorPriority, TPipePriority, Value, createLogger, defineInfactScope, defineInterceptorFn, defineMoostEventHandler, definePipeFn, getInfactScopeVars, getInstanceOwnMethods, getInstanceOwnProps, getMoostInfact, getMoostMate, getNewMoostInfact, loggerConsoleTransport, registerEventScope, resolvePipe, setControllerContext, setInfactLoggingOptions, useControllerContext }; export type { TCallableClassFunction, TClassConstructor, TClassFunction, TContextInjectorHook, TControllerOverview, TInjectableScope, TInterceptorAfter, TInterceptorBefore, TInterceptorClass, TInterceptorData, TInterceptorFn, TInterceptorOnError, TMoostAdapter, TMoostAdapterOptions, TMoostEventHandlerHookOptions, TMoostEventHandlerOptions, TMoostHandler, TMoostMetadata, TMoostOptions, TMoostParamsMetadata, TPipeData, TPipeFn, TPipeMetas };