@hono-di/core 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core.cjs +0 -2
- package/dist/core.js +0 -2
- package/dist/decorators.cjs +0 -2
- package/dist/decorators.js +0 -2
- package/dist/index.cjs +0 -2
- package/dist/index.js +0 -2
- package/package.json +1 -1
- package/dist/core.cjs.map +0 -1
- package/dist/core.js.map +0 -1
- package/dist/decorators.cjs.map +0 -1
- package/dist/decorators.js.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
package/dist/core.cjs
CHANGED
|
@@ -1550,5 +1550,3 @@ exports.UnauthorizedException = UnauthorizedException;
|
|
|
1550
1550
|
exports.UnprocessableEntityException = UnprocessableEntityException;
|
|
1551
1551
|
exports.UnsupportedMediaTypeException = UnsupportedMediaTypeException;
|
|
1552
1552
|
exports.forwardRef = forwardRef;
|
|
1553
|
-
//# sourceMappingURL=core.cjs.map
|
|
1554
|
-
//# sourceMappingURL=core.cjs.map
|
package/dist/core.js
CHANGED
|
@@ -1515,5 +1515,3 @@ BaseExceptionFilter = __decorateClass([
|
|
|
1515
1515
|
], BaseExceptionFilter);
|
|
1516
1516
|
|
|
1517
1517
|
export { AppError, BadGatewayException, BadRequestError, BadRequestException, BaseExceptionFilter, ConflictError, ConflictException, Container, ExecutionContextHost, ForbiddenError, ForbiddenException, GatewayTimeoutException, GoneException, HonoDiApplication, HonoDiFactory, HonoDiScanner, HttpException, InternalServerErrorException, METADATA_KEYS, MiddlewareBuilder, ModuleRef, ModuleRefImpl, NotAcceptableException, NotFoundError, NotFoundException, NotImplementedException, ParseBoolPipe, ParseFloatPipe, ParseIntPipe, PayloadTooLargeException, Reflector, RequestMethod, RequestTimeoutException, ServiceUnavailableException, UnauthorizedError, UnauthorizedException, UnprocessableEntityException, UnsupportedMediaTypeException, ValidationPipe, forwardRef };
|
|
1518
|
-
//# sourceMappingURL=core.js.map
|
|
1519
|
-
//# sourceMappingURL=core.js.map
|
package/dist/decorators.cjs
CHANGED
|
@@ -341,5 +341,3 @@ exports.UsePipes = UsePipes;
|
|
|
341
341
|
exports.applyDecorators = applyDecorators;
|
|
342
342
|
exports.assignMetadata = assignMetadata;
|
|
343
343
|
exports.createParamDecorator = createParamDecorator;
|
|
344
|
-
//# sourceMappingURL=decorators.cjs.map
|
|
345
|
-
//# sourceMappingURL=decorators.cjs.map
|
package/dist/decorators.js
CHANGED
|
@@ -298,5 +298,3 @@ function createParamDecorator(factory) {
|
|
|
298
298
|
}
|
|
299
299
|
|
|
300
300
|
export { All, Body, Catch, Controller, Ctx, Delete, FileParam, Files, Get, Global, Head, Header, Headers, HostParam, HttpCode, Inject, Injectable, Ip, Module, Next, Optional, Options, Param, Patch, Post, Put, Query, Redirect, Request, RequestMethod, Response, RouteParamtypes, Scope, Session, SetMetadata, UseFilters, UseGuards, UseInterceptors, UsePipes, applyDecorators, assignMetadata, createParamDecorator };
|
|
301
|
-
//# sourceMappingURL=decorators.js.map
|
|
302
|
-
//# sourceMappingURL=decorators.js.map
|
package/dist/index.cjs
CHANGED
|
@@ -1846,5 +1846,3 @@ exports.applyDecorators = applyDecorators;
|
|
|
1846
1846
|
exports.assignMetadata = assignMetadata;
|
|
1847
1847
|
exports.createParamDecorator = createParamDecorator;
|
|
1848
1848
|
exports.forwardRef = forwardRef;
|
|
1849
|
-
//# sourceMappingURL=index.cjs.map
|
|
1850
|
-
//# sourceMappingURL=index.cjs.map
|
package/dist/index.js
CHANGED
|
@@ -1768,5 +1768,3 @@ BaseExceptionFilter = __decorateClass([
|
|
|
1768
1768
|
var HonoDi = HonoDiFactory;
|
|
1769
1769
|
|
|
1770
1770
|
export { All, AppError, BadGatewayException, BadRequestError, BadRequestException, BaseExceptionFilter, Body, Catch, ConflictError, ConflictException, Container, Controller, Ctx, Delete, ExecutionContextHost, FileParam, Files, ForbiddenError, ForbiddenException, GatewayTimeoutException, Get, Global, GoneException, Head, Header, Headers, HonoDi, HonoDiApplication, HonoDiFactory, HonoDiScanner, HostParam, HttpCode, HttpException, Inject, Injectable, InternalServerErrorException, Ip, Logger, METADATA_KEYS, MiddlewareBuilder, Module, ModuleRef, ModuleRefImpl, Next, NotAcceptableException, NotFoundError, NotFoundException, NotImplementedException, Optional, Options, Param, ParseBoolPipe, ParseFloatPipe, ParseIntPipe, Patch, PayloadTooLargeException, Post, Put, Query, Redirect, Reflector, Request, RequestMethod, RequestTimeoutException, Response2 as Response, RouteParamtypes, Scope, ServiceUnavailableException, Session, SetMetadata, UnauthorizedError, UnauthorizedException, UnprocessableEntityException, UnsupportedMediaTypeException, UseFilters, UseGuards, UseInterceptors, UsePipes, ValidationPipe, applyDecorators, assignMetadata, createParamDecorator, forwardRef };
|
|
1771
|
-
//# sourceMappingURL=index.js.map
|
|
1772
|
-
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
package/dist/core.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interfaces.ts","../src/injector/module.ts","../src/injector/container.ts","../src/injector/context-id.ts","../src/injector/module-ref.ts","../src/injector/injector.ts","../src/injector/instance-wrapper.ts","../src/constants.ts","../src/services/logger.service.ts","../src/scanner.ts","../src/execution-context-host.ts","../src/decorators.ts","../src/middleware/builder.ts","../src/common/exceptions/http.exception.ts","../src/common/exceptions/index.ts","../src/application.ts","../src/factory.ts","../src/utils.ts","../src/services/reflector.service.ts","../src/common/pipes/index.ts","../src/common/errors/AppError.ts","../src/common/exceptions/HttpException.ts","../src/common/filters/BaseExceptionFilter.ts"],"names":["RequestMethod","instance","dependencies","args","token","wrapper","Observable","result","from","mergeMap","obs","lastValueFrom","Hono","Reflector","ParseIntPipe","ParseFloatPipe","ParseBoolPipe","ValidationPipe","HttpException","BaseExceptionFilter"],"mappings":"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","file":"core.cjs","sourcesContent":["import type { Context, Hono, HonoRequest, MiddlewareHandler, Next } from 'hono';\nimport type { Observable } from 'rxjs';\n\nimport { Scope } from './injector/scope';\n\nexport enum RequestMethod {\n GET = 'get',\n POST = 'post',\n PUT = 'put',\n DELETE = 'delete',\n PATCH = 'patch',\n ALL = 'all',\n OPTIONS = 'options',\n HEAD = 'head',\n}\n\nexport interface ModuleOptions {\n imports?: Array<Type<any> | DynamicModule | Promise<DynamicModule> | ForwardReference>;\n controllers?: Type<any>[];\n providers?: Provider[];\n exports?: Array<DynamicModule | Promise<DynamicModule> | string | symbol | Provider | ForwardReference | Function>;\n}\n\nexport interface Type<T = any> extends Function {\n new(...args: any[]): T;\n}\n\nexport interface ArgumentsHost {\n getArgs<T extends Array<any> = any[]>(): T;\n getType<TContext extends string = 'http'>(): TContext;\n switchToHttp(): HttpArgumentsHost;\n}\n\nexport interface HttpArgumentsHost {\n getRequest<T extends string = any>(): HonoRequest<T, any>;\n getResponse<T = any>(): Context;\n getNext<T = any>(): Next;\n getContext(): Context; // Hono Context\n}\n\nexport interface ExecutionContext extends ArgumentsHost {\n getClass<T = any>(): Type<T>;\n getHandler(): Function;\n}\n\nexport interface ExceptionFilter<T = any> {\n catch(exception: T, host: ArgumentsHost): void;\n}\n\nexport interface ArgumentMetadata {\n type: 'body' | 'query' | 'param' | 'custom';\n metatype?: Type<any>;\n data?: string;\n}\n\nexport interface PipeTransform<T = any, R = any> {\n transform(value: T, metadata: ArgumentMetadata): R;\n}\n\nexport interface CanActivate {\n canActivate(context: ExecutionContext): boolean | Promise<boolean>;\n}\n\nexport interface CallHandler<T = any> {\n handle(): Observable<T>;\n}\n\nexport interface Interceptor<T = any, R = any> {\n intercept(context: ExecutionContext, next: CallHandler<T>): Observable<R> | Promise<Observable<R>>;\n}\n\nexport interface OnModuleInit {\n onModuleInit(): any;\n}\n\nexport interface OnApplicationBootstrap {\n onApplicationBootstrap(): any;\n}\n\nexport interface OnModuleDestroy {\n onModuleDestroy(): any;\n}\n\nexport interface BeforeApplicationShutdown {\n beforeApplicationShutdown(signal?: string): any;\n}\n\nexport interface OnApplicationShutdown {\n onApplicationShutdown(signal?: string): any;\n}\n\nexport type InjectionToken<T = any> = string | symbol | Type<T> | Function | ForwardReference;\n\nexport type Provider<T = any> =\n | Type<any>\n | ClassProvider<T>\n | ValueProvider<T>\n | FactoryProvider<T>\n | ExistingProvider<T>;\n\nexport interface ClassProvider<T = any> {\n provide: InjectionToken;\n useClass: Type<T>;\n scope?: Scope;\n}\n\nexport interface ValueProvider<T = any> {\n provide: InjectionToken;\n useValue: T;\n}\n\nexport interface FactoryProvider<T = any> {\n provide: InjectionToken;\n useFactory: (...args: any[]) => T | Promise<T>;\n inject?: InjectionToken[];\n scope?: Scope;\n}\n\nexport interface ExistingProvider<T = any> {\n provide: InjectionToken;\n useExisting: InjectionToken;\n}\n\nexport interface DynamicModule extends ModuleOptions {\n module: Type<any>;\n global?: boolean;\n}\n\nexport interface ForwardReference {\n forwardRef: () => Type<any>;\n}\n\nexport interface HonoDiMiddleware {\n use: MiddlewareHandler\n}\n\nexport interface MiddlewareConsumer {\n apply(...middleware: (Type<any> | MiddlewareHandler)[]): MiddlewareConfigProxy;\n}\n\nexport interface MiddlewareConfigProxy {\n exclude(...routes: (string | RouteInfo)[]): MiddlewareConfigProxy;\n forRoutes(...routes: (string | Type<any> | RouteInfo)[]): MiddlewareConsumer;\n}\n\n// Removed import { RequestMethod } from './decorators';\n// Removed import { ModuleOptions } from './decorators';\n\nexport interface RouteInfo {\n path: string;\n method: RequestMethod;\n}\n\nexport interface HonoDiModule {\n configure(consumer: MiddlewareConsumer): void;\n}\n\n\nexport interface IApplication {\n useGlobalFilters(...filters: ExceptionFilter[]): this;\n useGlobalPipes(...pipes: PipeTransform[]): this;\n useGlobalInterceptors(...interceptors: Interceptor[]): this;\n useGlobalGuards(...guards: CanActivate[]): this;\n setGlobalPrefix(prefix: string): this;\n init(): Promise<this>;\n listen(port: number | string, callback?: () => void): Promise<any>;\n getHttpAdapter(): Hono;\n get<TInput = any, TResult = TInput>(typeOrToken: Type<TInput> | string | symbol, options?: { strict?: boolean }): TResult;\n close(): Promise<void>;\n}\n\n","import { InstanceWrapper } from './instance-wrapper';\nimport { InjectionToken } from './token';\nimport { Type } from '../interfaces';\n\nexport class Module {\n private readonly _providers = new Map<InjectionToken, InstanceWrapper>();\n private readonly _imports = new Set<Module>();\n private readonly _exports = new Set<InjectionToken>();\n private readonly _controllers = new Map<InjectionToken, InstanceWrapper>();\n\n constructor(\n public readonly metatype: Type<any>,\n public readonly token: string,\n ) { }\n\n get providers() {\n return this._providers;\n }\n\n get imports() {\n return this._imports;\n }\n\n get exports() {\n return this._exports;\n }\n\n get controllers() {\n return this._controllers;\n }\n\n public addProvider(provider: InstanceWrapper) {\n this._providers.set(provider.token, provider);\n }\n\n public addController(controller: InstanceWrapper) {\n this._controllers.set(controller.token, controller);\n }\n\n public addImport(module: Module) {\n this._imports.add(module);\n }\n\n public addExport(token: InjectionToken) {\n this._exports.add(token);\n }\n\n public hasProvider(token: InjectionToken): boolean {\n return this._providers.has(token);\n }\n\n public getProvider(token: InjectionToken): InstanceWrapper | undefined {\n return this._providers.get(token);\n }\n}\n","import { Module } from './module';\nimport { InjectionToken } from './token';\nimport { Type } from '../interfaces';\n\nexport class Container {\n private readonly modules = new Map<string, Module>();\n private readonly globalModules = new Set<Module>();\n\n public addModule(moduleMeta: Type<any>, token: string): Module {\n if (!this.modules.has(token)) {\n const module = new Module(moduleMeta, token);\n this.modules.set(token, module);\n return module;\n }\n return this.modules.get(token)!;\n }\n\n public addGlobalModule(module: Module) {\n this.globalModules.add(module);\n }\n\n public getGlobalModules(): Set<Module> {\n return this.globalModules;\n }\n\n public getModuleByToken(token: string): Module | undefined {\n return this.modules.get(token);\n }\n\n public getModules(): Map<string, Module> {\n return this.modules;\n }\n}\n","export class ContextId {\n private static idCounter = 0;\n public readonly id: number;\n\n constructor() {\n this.id = ContextId.idCounter++;\n }\n}\n\nexport const STATIC_CONTEXT_ID = new ContextId();\n","\nimport { Type } from '../interfaces';\nimport { ContextId } from './context-id';\nimport { Container } from './container';\nimport { Injector } from './injector';\nimport { Module } from './module';\nimport { Scope } from './scope';\n\nexport abstract class ModuleRef {\n abstract get<TInput = any, TResult = TInput>(typeOrToken: Type<TInput> | string | symbol, options?: { strict: boolean }): TResult;\n abstract resolve<TInput = any, TResult = TInput>(typeOrToken: Type<TInput> | string | symbol, contextId?: ContextId, options?: { strict: boolean }): Promise<TResult>;\n}\n\nexport class ModuleRefImpl extends ModuleRef {\n constructor(\n private readonly container: Container,\n private readonly injector: Injector,\n private readonly moduleRef: Module\n ) {\n super();\n }\n\n get<TInput = any, TResult = TInput>(typeOrToken: Type<TInput> | string | symbol, options: { strict: boolean } = { strict: true }): TResult {\n const token = typeOrToken;\n // Lookup in current module\n let wrapper = this.moduleRef.getProvider(token as any);\n\n if (!wrapper && !options.strict) {\n // Search globally or in imports?\n // For strict=false, Nest searches the whole container? \n // Simplified: just search current module + globals\n // Actually, strict=false means \"check global modules too\" or \"check imports\"\n // Let's implement basic lookup similar to Injector.lookupProvider\n // But Injector.lookupProvider is private.\n // We can reuse logic if we move lookup logic to Module or Container?\n // For now, let's just use what we have.\n }\n\n if (!wrapper) {\n // Try to find in imports/globals manually if strict is false?\n // Or throw?\n // Nest returns undefined if not found? Or throws?\n // usually throws \"Nest can't resolve...\"\n throw new Error(`ModuleRef cannot find provider for ${token.toString()}`);\n }\n\n if (wrapper.scope !== Scope.DEFAULT) {\n throw new Error(`Cannot use get() for scoped provider ${token.toString()}. Use resolve() instead.`);\n }\n\n return wrapper.instance as TResult;\n }\n\n async resolve<TInput = any, TResult = TInput>(typeOrToken: Type<TInput> | string | symbol, contextId?: ContextId, options: { strict: boolean } = { strict: true }): Promise<TResult> {\n const token = typeOrToken;\n const wrapper = this.moduleRef.getProvider(token as any);\n\n if (!wrapper) {\n throw new Error(`ModuleRef cannot find provider for ${token.toString()}`);\n }\n\n return this.injector.loadInstance(wrapper, contextId || new ContextId()) as Promise<TResult>;\n }\n}\n","import { Container } from './container';\nimport { InstanceWrapper } from './instance-wrapper';\nimport { Module } from './module';\nimport { InjectionToken } from './token';\nimport { ContextId } from './context-id';\nimport { Scope } from './scope';\nimport { METADATA_KEYS } from '../constants';\nimport { ModuleRef, ModuleRefImpl } from './module-ref';\n\nexport class Injector {\n constructor(private readonly container?: Container) { }\n\n public async resolveConstructorParams<T>(\n wrapper: InstanceWrapper<T>,\n module: Module,\n inject: InjectionToken[],\n callback: (args: any[]) => void, // not used directly in this async flow but kept for structure if needed\n contextId = new ContextId(),\n inquire: InstanceWrapper[] = [],\n parentInquire: InstanceWrapper[] = []\n ) {\n // Check circular dependencies\n // If wrapper is already in inquire, we have a circular dependency\n if (inquire.some((item) => item === wrapper) && wrapper.scope === Scope.DEFAULT) {\n // This is a simplified check. Real HonoDi has complex handling for forwardRef.\n // For now, valid cyclic dependency detection in instantiation graph.\n throw new Error(`Circular dependency detected: ${wrapper.name}`);\n }\n\n const args: any[] = [];\n\n // Resolve each dependency\n for (const [index, token] of inject.entries()) {\n const isOptional = wrapper.isOptional ? wrapper.isOptional[index] : false;\n const paramWrapper = await this.resolveSingleParam(token, module, contextId, [...inquire, wrapper], isOptional);\n args.push(paramWrapper);\n }\n\n return args;\n }\n\n public async resolveSingleParam<T>(\n token: InjectionToken,\n targetModule: Module,\n contextId: ContextId,\n inquire: InstanceWrapper[],\n isOptional: boolean = false\n ): Promise<T | undefined> {\n let isForwardRef = false;\n // Unwrap forwardRef\n if (token && (token as any).forwardRef) {\n token = (token as any).forwardRef();\n isForwardRef = true;\n }\n\n if (token === ModuleRef) {\n return new ModuleRefImpl(this.container!, this, targetModule) as any;\n }\n\n // 1. Resolve Provider Wrapper\n const wrapper = this.lookupProvider(token, targetModule);\n\n if (!wrapper) {\n if (isOptional) {\n return undefined;\n }\n throw new Error(`HonoDi can't resolve dependencies of the ${targetModule.metatype.name} (??). Please make sure that the argument \"${token.toString()}\" at index [?] is available in the ${targetModule.metatype.name} context.`);\n }\n\n if (isForwardRef) {\n // Return Proxy\n return new Proxy({}, {\n get: (target, prop) => {\n if (prop === 'then') return undefined;\n if (!wrapper.instance) {\n // console.warn(`Accessing forwardRef dependency ${wrapper.name} before instantiation`);\n }\n return (wrapper.instance as any)?.[prop];\n }\n }) as any;\n }\n\n // 2. Resolve Instance\n return this.loadInstance(wrapper, contextId, inquire);\n }\n\n private lookupProvider(token: InjectionToken, module: Module): InstanceWrapper | undefined {\n if (module.hasProvider(token)) {\n return module.getProvider(token);\n }\n\n // Check imports\n // Strict encapsulation: Only resolved if exported\n for (const importedModule of module.imports) {\n if (importedModule.exports.has(token)) {\n if (importedModule.hasProvider(token)) {\n // Direct provider in imported module\n return importedModule.getProvider(token);\n }\n // Re-export logic (recursive lookup? Nest flattens exports usually)\n // Simplified: Check if imported module has it available (re-export scenario)\n const nestedWrapper = this.lookupProvider(token, importedModule);\n if (nestedWrapper) return nestedWrapper;\n }\n }\n\n // Check Global Modules\n if (this.container) {\n for (const globalModule of this.container.getGlobalModules()) {\n if (globalModule === module) continue; // Skip self\n // Global modules export everything? Or just what is in exports?\n // HonoDi: Global modules still need to export providers to be visible.\n if (globalModule.exports.has(token)) {\n if (globalModule.hasProvider(token)) {\n return globalModule.getProvider(token);\n }\n const nestedWrapper = this.lookupProvider(token, globalModule);\n if (nestedWrapper) return nestedWrapper;\n }\n }\n }\n\n return undefined;\n }\n\n public async loadInstance<T>(\n wrapper: InstanceWrapper<T>,\n contextId: ContextId,\n inquire: InstanceWrapper[] = []\n ): Promise<T> {\n if (wrapper.isResolved && wrapper.scope === Scope.DEFAULT) {\n return wrapper.instance as T;\n }\n\n if (wrapper.scope === Scope.REQUEST) {\n const existing = wrapper.getInstanceByContextId(contextId);\n if (existing) return existing;\n }\n\n // Handle Aliases (useExisting)\n if (wrapper.isAlias) {\n const targetToken = wrapper.useExisting;\n const instance = await this.resolveSingleParam<T>(targetToken, wrapper.host!, contextId, inquire);\n if (wrapper.scope === Scope.DEFAULT) {\n wrapper.instance = instance;\n wrapper.isResolved = true;\n } else {\n wrapper.setInstanceByContextId(contextId, instance!);\n }\n return instance!;\n }\n\n // Handle Value Provider\n if (wrapper.useValue !== undefined) {\n wrapper.instance = wrapper.useValue;\n wrapper.isResolved = true;\n return wrapper.instance as T;\n }\n\n // Handle Factory Provider\n if (wrapper.useFactory) {\n const dependencies = wrapper.inject || [];\n const args = await this.resolveConstructorParams(\n wrapper,\n wrapper.host!,\n dependencies,\n (args) => { },\n contextId,\n inquire\n );\n const instance = await wrapper.useFactory(...args);\n\n if (wrapper.scope === Scope.DEFAULT) {\n wrapper.instance = instance;\n wrapper.isResolved = true;\n } else {\n wrapper.setInstanceByContextId(contextId, instance);\n }\n return instance as T;\n }\n\n // Class Provider (Standard)\n const { metatype } = wrapper;\n if (!metatype || typeof metatype !== 'function') {\n throw new Error('Invalid metatype');\n }\n\n // Resolve dependencies\n // If inject is undefined, try to retrieve from metadata (design:paramtypes)\n // Note: This merging logic should ideally happen during scanning\n let dependencies = wrapper.inject || [];\n\n const constructorArgs = await this.resolveConstructorParams(\n wrapper,\n wrapper.host!,\n dependencies,\n (args) => { },\n contextId,\n inquire\n );\n\n const instance = new (metatype as any)(...constructorArgs);\n\n // Resolve Property Dependencies\n if (wrapper.properties) {\n for (const prop of wrapper.properties) {\n const propInstance = await this.resolveSingleParam(\n prop.token,\n wrapper.host!,\n contextId,\n inquire,\n prop.isOptional\n );\n if (propInstance !== undefined) {\n (instance as any)[prop.key] = propInstance;\n }\n }\n }\n\n // Cache instance\n if (wrapper.scope === Scope.DEFAULT) {\n wrapper.instance = instance;\n wrapper.isResolved = true;\n } else {\n wrapper.setInstanceByContextId(contextId, instance);\n }\n\n return instance as T;\n }\n}\n","import { Type } from '../interfaces';\nimport { ContextId } from './context-id';\nimport { Module } from './module';\nimport { Scope } from './scope';\nimport { InjectionToken } from './token';\n\nexport class InstanceWrapper<T = any> {\n public readonly id: string;\n public readonly token: InjectionToken;\n public readonly name?: string;\n public metatype?: Type<T> | Function;\n public scope: Scope = Scope.DEFAULT;\n public host?: Module; // Generic logic\n public inject?: InjectionToken[];\n public isOptional?: boolean[];\n public properties?: { key: string | symbol; token: InjectionToken; isOptional?: boolean }[];\n\n\n public instance?: T; // Singleton instance\n private readonly instancesPerContext = new Map<ContextId, T>();\n\n public isResolved = false;\n public isPending = false; // For circular dependency detection\n\n public isAlias = false;\n public useFactory?: Function;\n public useValue?: any;\n public useExisting?: any;\n\n constructor(metadata: Partial<InstanceWrapper<T>> & { token: InjectionToken }) {\n this.token = metadata.token;\n this.name = metadata.name;\n this.metatype = metadata.metatype;\n this.scope = metadata.scope ?? Scope.DEFAULT;\n this.host = metadata.host;\n this.instance = metadata.instance;\n this.inject = metadata.inject;\n this.useFactory = metadata.useFactory;\n this.useValue = metadata.useValue;\n this.useExisting = metadata.useExisting;\n this.isAlias = !!metadata.useExisting;\n this.isOptional = metadata.isOptional;\n this.id = Math.random().toString(36).substring(7); // Simple ID for now\n }\n\n public getInstanceByContextId(contextId: ContextId): T | undefined {\n if (this.scope === Scope.TRANSIENT) {\n return undefined; // Transient always new\n }\n if (this.scope === Scope.DEFAULT) {\n return this.instance;\n }\n return this.instancesPerContext.get(contextId);\n }\n\n public setInstanceByContextId(contextId: ContextId, instance: T) {\n if (this.scope === Scope.DEFAULT) {\n this.instance = instance;\n } else if (this.scope === Scope.REQUEST) {\n this.instancesPerContext.set(contextId, instance);\n }\n }\n\n public addCtorMetadata(index: number, token: InjectionToken) {\n if (!this.inject) {\n this.inject = [];\n }\n this.inject[index] = token;\n }\n}\n","export const METADATA_KEYS = {\n MODULE: Symbol('module'),\n GLOBAL: Symbol('global'),\n CONTROLLER: Symbol('controller'),\n FLUSH_ROLES: Symbol('flush_roles'),\n OPTS: Symbol('opts'),\n PARAMS: Symbol('params'),\n ROUTES: Symbol('routes'),\n FILTER_CATCH: Symbol('filter_catch'),\n FILTER_EXCEPTION: Symbol('filter_exception'),\n USE_FILTERS: Symbol('use_filters'),\n USE_PIPES: Symbol('use_pipes'),\n USE_GUARDS: Symbol('use_guards'),\n USE_INTERCEPTORS: Symbol('use_interceptors'),\n ROUTE_ARGS_METADATA: Symbol('route_args_metadata'),\n INJECTIONS: Symbol('injections'),\n OPTIONAL: Symbol('optional'),\n SCOPE: Symbol('scope'),\n METHOD_INJECTIONS: Symbol('method_injections'),\n METHOD_OPTIONAL: Symbol('method_optional'),\n PROPERTY_DEPS: Symbol('property_deps'),\n HTTP_CODE: Symbol('http_code'),\n HEADERS: Symbol('headers'),\n REDIRECT: Symbol('redirect'),\n};\n","import { ILogger } from \"../core\";\n\nexport class Logger implements ILogger {\n private static lastTimestamp?: number;\n private static instance?: Logger;\n protected context?: string;\n\n constructor(context?: string) {\n this.context = context;\n }\n info(message: string, ...meta: any[]): void {\n const metaStr = meta.length > 0 ? ` ${JSON.stringify(meta)}` : '';\n this.log(message + metaStr, 'info');\n }\n \n public static log(message: any, context = '') {\n this.printMessage('log', message, context);\n }\n\n public static error(message: any, trace = '', context = '') {\n this.printMessage('error', message, context, trace);\n }\n\n public static warn(message: any, context = '') {\n this.printMessage('warn', message, context);\n }\n\n public static debug(message: any, context = '') {\n this.printMessage('debug', message, context);\n }\n\n public static verbose(message: any, context = '') {\n this.printMessage('verbose', message, context);\n }\n\n public log(message: any, context?: string) {\n Logger.log(message, context || this.context);\n }\n\n public error(message: any, trace = '', context?: string) {\n Logger.error(message, trace, context || this.context);\n }\n\n public warn(message: any, context?: string) {\n Logger.warn(message, context || this.context);\n }\n\n public debug(message: any, context?: string) {\n Logger.debug(message, context || this.context);\n }\n\n public verbose(message: any, context?: string) {\n Logger.verbose(message, context || this.context);\n }\n\n private static printMessage(level: 'log' | 'error' | 'warn' | 'debug' | 'verbose', message: any, context = '', trace = '') {\n const color = this.getColorByLevel(level);\n const date = new Date();\n const timestamp = date.toLocaleString();\n \n const pid = process.pid;\n const contextMessage = context ? `[${context}] ` : '';\n const output = message instanceof Object ? JSON.stringify(message, null, 2) : message;\n\n const currentTimestamp = Date.now();\n const timeDiff = Logger.updateAndGetTimestampDiff(currentTimestamp);\n\n const C = {\n reset: \"\\x1b[0m\",\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n gray: \"\\x1b[90m\",\n };\n\n // Format: [App] PID - Date Level [Context] Message +ms\n // Example: [Hono] 1234 - 1/7/2026, 4:00 PM LOG [Factory] Initialized +2ms\n\n process.stdout.write(\n `${C.green}[Hono] ${pid}${C.reset} - ${timestamp}`+\n `${color}${level.toUpperCase().padStart(7)}${C.reset} ${C.yellow}${contextMessage}${C.reset}${C.green}${output}${C.reset} ` +\n `${C.yellow}${timeDiff}${C.reset}\\n`\n );\n\n if (trace) {\n process.stdout.write(`${C.red}${trace}${C.reset}\\n`);\n }\n }\n\n private static updateAndGetTimestampDiff(timestamp: number): string {\n let result = '';\n if (this.lastTimestamp) {\n result = `+${timestamp - this.lastTimestamp}ms`;\n }\n this.lastTimestamp = timestamp;\n return result;\n }\n\n private static getColorByLevel(level: string) {\n const C = {\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n };\n switch (level) {\n case 'debug': return C.magenta;\n case 'warn': return C.yellow;\n case 'error': return C.red;\n case 'verbose': return C.cyan;\n default: return C.green;\n }\n }\n}\n","import { Module, Container, Scope } from './injector';\nimport { METADATA_KEYS } from './constants';\nimport { InstanceWrapper } from './injector/instance-wrapper';\nimport { InjectionToken } from './injector/token';\nimport { ModuleOptions } from './decorators';\nimport { Type, DynamicModule, ForwardReference } from './interfaces';\nimport { Logger } from './services/logger.service';\n\n\nexport class HonoDiScanner {\n constructor(private readonly container: Container) { }\n\n private readonly logger = new Logger('HonoDiScanner');\n\n public async scan(module: Type<any>) {\n // this.logger.log('Scanning modules...');\n await this.scanModule(module);\n }\n\n private async scanModule(moduleDefinition: Type<any> | DynamicModule, scope: Type<any>[] = []) {\n let moduleClass: Type<any>;\n let dynamicMetadata: Partial<DynamicModule> = {};\n\n if (moduleDefinition && 'module' in moduleDefinition) {\n moduleClass = (moduleDefinition as DynamicModule).module;\n dynamicMetadata = moduleDefinition as DynamicModule;\n } else {\n moduleClass = moduleDefinition as Type<any>;\n }\n\n // 1. Check if module already exists\n const token = moduleClass.name; // Simple token strategy\n if (this.container.getModuleByToken(token)) {\n return this.container.getModuleByToken(token);\n }\n\n // 2. Register Module\n const moduleRef = this.container.addModule(moduleClass, token);\n\n // Register Module Class itself as a provider (to support DI and Lifecycle hooks)\n const moduleWrapper = new InstanceWrapper({\n token: moduleClass,\n name: moduleClass.name,\n metatype: moduleClass,\n host: moduleRef,\n scope: Scope.DEFAULT,\n });\n this.scanDependencies(moduleWrapper);\n moduleRef.addProvider(moduleWrapper);\n\n // 3. Get Metadata\n const decoratorOptions = Reflect.getMetadata(METADATA_KEYS.MODULE, moduleClass) as ModuleOptions || {};\n const isGlobal = Reflect.getMetadata(METADATA_KEYS.GLOBAL, moduleClass);\n if (isGlobal) {\n this.container.addGlobalModule(moduleRef);\n }\n\n // Merge options\n const options: ModuleOptions = {\n ...decoratorOptions,\n ...dynamicMetadata,\n imports: [...(decoratorOptions.imports || []), ...(dynamicMetadata.imports || [])],\n providers: [...(decoratorOptions.providers || []), ...(dynamicMetadata.providers || [])],\n exports: [...(decoratorOptions.exports || []), ...(dynamicMetadata.exports || [])],\n controllers: [...(decoratorOptions.controllers || []), ...(dynamicMetadata.controllers || [])],\n };\n\n // 4. Register Imports recursively\n if (options.imports) {\n for (const importedModule of options.imports) {\n let actualImport = importedModule;\n // Check if it's a forwardRef\n // Type guard or simple check\n if (importedModule && typeof (importedModule as any).forwardRef === 'function') {\n actualImport = (importedModule as ForwardReference).forwardRef();\n }\n\n // Recursively scan\n // Cast actualImport to Type<any> | DynamicModule for scanModule\n const importedRef = await this.scanModule(actualImport as Type<any> | DynamicModule, [...scope, moduleClass]);\n if (importedRef) {\n moduleRef.addImport(importedRef);\n }\n }\n }\n\n // 5. Register Providers\n if (options.providers) {\n for (const provider of options.providers) {\n this.insertProvider(provider, moduleRef);\n }\n }\n\n // 6. Register Controllers\n if (options.controllers) {\n for (const controller of options.controllers) {\n this.insertController(controller, moduleRef);\n }\n }\n\n // 7. Register Exports\n if (options.exports) {\n for (const exportToken of options.exports) {\n // Only add token to exports\n // exports can contain Providers or Modules, but addExport expects InjectionToken essentially.\n // We need to extract the token if it is a provider object, or use the class/string/symbol itself.\n // For now, cast to any to fix build, will refine later.\n moduleRef.addExport(exportToken as any);\n }\n }\n\n return moduleRef;\n }\n\n private insertProvider(provider: any, moduleRef: Module) {\n const isCustomProvider = provider && !provider.constructor; // Simplistic check, better check for 'provide' key\n // Actually, a class is a function. An object is not.\n const isPlainObject = provider && typeof provider === 'object' && 'provide' in provider;\n\n if (!isPlainObject) {\n // Standard Class Provider\n const token = provider;\n const wrapper = new InstanceWrapper({\n token,\n name: token.name,\n metatype: provider,\n host: moduleRef,\n scope: Scope.DEFAULT\n });\n this.scanDependencies(wrapper);\n moduleRef.addProvider(wrapper);\n return;\n }\n\n // Custom Provider\n const token = provider.provide;\n const wrapper = new InstanceWrapper({\n token,\n name: (token && token.name) ? token.name : (typeof token === 'string' ? token : 'CustomProvider'),\n host: moduleRef,\n scope: provider.scope || Scope.DEFAULT,\n });\n\n if (provider.useValue !== undefined) {\n wrapper.useValue = provider.useValue;\n } else if (provider.useFactory) {\n wrapper.useFactory = provider.useFactory;\n wrapper.inject = provider.inject || [];\n } else if (provider.useClass) {\n wrapper.metatype = provider.useClass;\n this.scanDependencies(wrapper); // Scan the actual class\n } else if (provider.useExisting) {\n wrapper.useExisting = provider.useExisting;\n wrapper.isAlias = true;\n }\n\n moduleRef.addProvider(wrapper);\n }\n\n private insertController(controller: any, moduleRef: Module) {\n const token = controller;\n const wrapper = new InstanceWrapper({\n token,\n name: token.name,\n metatype: controller,\n host: moduleRef,\n scope: Scope.DEFAULT\n });\n this.scanDependencies(wrapper);\n moduleRef.addController(wrapper);\n }\n\n public scanDependencies(wrapper: InstanceWrapper) {\n // Use reflect-metadata to get constructor param types\n const paramTypes = Reflect.getMetadata('design:paramtypes', wrapper.metatype as any) || [];\n const injections = Reflect.getMetadata(METADATA_KEYS.INJECTIONS, wrapper.metatype as any) || [];\n const optionals = Reflect.getMetadata(METADATA_KEYS.OPTIONAL, wrapper.metatype as any) || [];\n\n // Fallback logic: @Inject(token) ?? design:paramtypes[index]\n const mergedInject = [];\n const mergedOptional = [];\n\n for (let i = 0; i < paramTypes.length; i++) {\n mergedInject[i] = injections[i] || paramTypes[i];\n mergedOptional[i] = optionals[i] || false;\n }\n\n wrapper.inject = mergedInject;\n wrapper.isOptional = mergedOptional;\n\n // Property dependencies\n const propertyDeps = Reflect.getMetadata(METADATA_KEYS.PROPERTY_DEPS, wrapper.metatype as any) || [];\n const optionalProps = Reflect.getMetadata(METADATA_KEYS.OPTIONAL, wrapper.metatype as any) || [];\n\n wrapper.properties = propertyDeps.map((dep: any) => {\n return {\n key: dep.key,\n token: dep.token,\n isOptional: optionalProps.includes(dep.key),\n };\n });\n }\n}\n","import type { Context, Next } from 'hono';\nimport { ExecutionContext, Type, HttpArgumentsHost } from './interfaces';\n\nexport class ExecutionContextHost implements ExecutionContext {\n private readonly args: any[];\n private readonly constructorRef: Type<any>;\n private readonly handler: Function;\n private readonly context: Context<any>;\n private readonly next?: Next;\n\n constructor(args: any[], constructorRef: Type<any>, handler: Function) {\n this.args = args;\n this.constructorRef = constructorRef;\n this.handler = handler;\n // In Hono, the context is usually the first argument\n this.context = args[0];\n this.next = args[1];\n }\n\n getClass<T = any>(): Type<T> {\n return this.constructorRef;\n }\n\n getHandler(): Function {\n return this.handler;\n }\n\n getArgs<T extends Array<any> = any[]>(): T {\n return this.args as T;\n }\n\n getType<TContext extends string = 'http'>(): TContext {\n return 'http' as TContext;\n }\n\n switchToHttp(): HttpArgumentsHost {\n return {\n getRequest: () => this.context.req,\n getResponse: () => this.context,\n getNext: () => this.next ?? (() => Promise.resolve()),\n getContext: () => this.context,\n };\n }\n}\n","import 'reflect-metadata';\nimport { METADATA_KEYS } from './constants';\nimport { Scope } from './injector/scope';\nimport { RequestMethod } from './interfaces';\nimport type { ModuleOptions, Type, InjectionToken, CanActivate, ExceptionFilter, PipeTransform, Interceptor, ExecutionContext } from './interfaces';\n\nexport { Scope, RequestMethod };\nexport type { ModuleOptions };\n\nexport interface InjectableOptions {\n scope?: Scope;\n}\n\nexport interface RouteDefinition {\n path: string;\n requestMethod: RequestMethod;\n methodName: string;\n}\n\nexport function Global(): ClassDecorator {\n return (target: any) => {\n Reflect.defineMetadata(METADATA_KEYS.GLOBAL, true, target);\n };\n}\n\nexport function Module(options: ModuleOptions): ClassDecorator {\n return (target: any) => {\n Reflect.defineMetadata(METADATA_KEYS.MODULE, options, target);\n };\n}\n\nexport function Injectable(options?: InjectableOptions): ClassDecorator {\n return (target: any) => {\n Reflect.defineMetadata(METADATA_KEYS.SCOPE, options?.scope ?? Scope.DEFAULT, target);\n };\n}\n\nexport function Controller(prefix: string = ''): ClassDecorator {\n return (target: any) => {\n Reflect.defineMetadata(METADATA_KEYS.CONTROLLER, { prefix }, target);\n // Mark as Injectable implicitly\n Reflect.defineMetadata(METADATA_KEYS.SCOPE, Scope.DEFAULT, target);\n };\n}\n\n// Method Decorators\nfunction createRouteDecorator(method: RequestMethod) {\n return (path: string = '/'): MethodDecorator => {\n return (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<any>) => {\n // In case of instance method decorator, target is the prototype\n if (!Reflect.hasMetadata(METADATA_KEYS.ROUTES, target.constructor)) {\n Reflect.defineMetadata(METADATA_KEYS.ROUTES, [], target.constructor);\n }\n\n const routes = Reflect.getMetadata(METADATA_KEYS.ROUTES, target.constructor) as RouteDefinition[];\n\n routes.push({\n requestMethod: method,\n path,\n methodName: propertyKey as string,\n });\n Reflect.defineMetadata(METADATA_KEYS.ROUTES, routes, target.constructor);\n };\n };\n}\n\nexport const Get = createRouteDecorator(RequestMethod.GET);\nexport const Post = createRouteDecorator(RequestMethod.POST);\nexport const Put = createRouteDecorator(RequestMethod.PUT);\nexport const Delete = createRouteDecorator(RequestMethod.DELETE);\nexport const Patch = createRouteDecorator(RequestMethod.PATCH);\nexport const Options = createRouteDecorator(RequestMethod.OPTIONS);\nexport const Head = createRouteDecorator(RequestMethod.HEAD);\nexport const All = createRouteDecorator(RequestMethod.ALL);\n\n// Exception Filters\nexport function Catch(...exceptions: Type<any>[]): ClassDecorator {\n return (target: any) => {\n Reflect.defineMetadata(METADATA_KEYS.FILTER_CATCH, exceptions, target);\n // Mark as Injectable implicitly\n Reflect.defineMetadata(METADATA_KEYS.SCOPE, Scope.DEFAULT, target);\n };\n}\n\nexport function UseFilters(...filters: (Type<ExceptionFilter> | ExceptionFilter)[]): MethodDecorator & ClassDecorator {\n return (\n target: any,\n propertyKey?: string | symbol,\n descriptor?: PropertyDescriptor,\n ) => {\n if (descriptor) {\n // Method decorator\n Reflect.defineMetadata(METADATA_KEYS.USE_FILTERS, filters, descriptor.value);\n return descriptor;\n }\n // Class decorator\n Reflect.defineMetadata(METADATA_KEYS.USE_FILTERS, filters, target);\n return target;\n };\n}\n\nexport function Inject(token: InjectionToken): PropertyDecorator & ParameterDecorator {\n return (target: Object, propertyKey: string | symbol | undefined, parameterIndex?: number) => {\n if (parameterIndex !== undefined) {\n // Parameter decorator\n const injections = Reflect.getMetadata(METADATA_KEYS.INJECTIONS, target) || [];\n injections[parameterIndex] = token;\n Reflect.defineMetadata(METADATA_KEYS.INJECTIONS, injections, target);\n } else {\n // Property decorator\n const properties = Reflect.getMetadata(METADATA_KEYS.PROPERTY_DEPS, target.constructor) || [];\n properties.push({ key: propertyKey, token });\n Reflect.defineMetadata(METADATA_KEYS.PROPERTY_DEPS, properties, target.constructor);\n }\n };\n}\n\nexport function Optional(): PropertyDecorator & ParameterDecorator {\n return (target: Object, propertyKey: string | symbol | undefined, parameterIndex?: number) => {\n if (parameterIndex !== undefined) {\n // Parameter decorator\n const optionals = Reflect.getMetadata(METADATA_KEYS.OPTIONAL, target) || [];\n optionals[parameterIndex] = true;\n Reflect.defineMetadata(METADATA_KEYS.OPTIONAL, optionals, target);\n } else {\n // Property decorator\n const optionalProps = Reflect.getMetadata(METADATA_KEYS.OPTIONAL, target.constructor) || [];\n optionalProps.push(propertyKey);\n Reflect.defineMetadata(METADATA_KEYS.OPTIONAL, optionalProps, target.constructor);\n }\n };\n}\n\nexport function UseGuards(...guards: (Type<CanActivate> | CanActivate)[]): MethodDecorator & ClassDecorator {\n return (target: any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor) => {\n if (descriptor) {\n Reflect.defineMetadata(METADATA_KEYS.USE_GUARDS, guards, descriptor.value);\n return descriptor;\n }\n Reflect.defineMetadata(METADATA_KEYS.USE_GUARDS, guards, target);\n return target;\n };\n}\n\nexport function UseInterceptors(...interceptors: (Type<Interceptor> | Interceptor)[]): MethodDecorator & ClassDecorator {\n return (target: any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor) => {\n if (descriptor) {\n Reflect.defineMetadata(METADATA_KEYS.USE_INTERCEPTORS, interceptors, descriptor.value);\n return descriptor;\n }\n Reflect.defineMetadata(METADATA_KEYS.USE_INTERCEPTORS, interceptors, target);\n return target;\n };\n}\n\nexport function UsePipes(...pipes: (Type<PipeTransform> | PipeTransform)[]): MethodDecorator & ClassDecorator {\n return (target: any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor) => {\n if (descriptor) {\n Reflect.defineMetadata(METADATA_KEYS.USE_PIPES, pipes, descriptor.value);\n return descriptor;\n }\n Reflect.defineMetadata(METADATA_KEYS.USE_PIPES, pipes, target);\n return target;\n };\n}\n\nexport enum RouteParamtypes {\n REQUEST,\n RESPONSE,\n NEXT,\n BODY,\n QUERY,\n PARAM,\n HEADERS,\n SESSION,\n FILE,\n FILES,\n HOST,\n IP,\n CONTEXT,\n CUSTOM,\n}\n\nexport function assignMetadata(args: any, paramtype: RouteParamtypes, index: number, data?: any, ...pipes: any[]) {\n return {\n ...args,\n [`${paramtype}:${index}`]: {\n index,\n data,\n pipes,\n paramtype,\n },\n };\n}\n\nfunction createRouteParamDecorator(paramtype: RouteParamtypes) {\n return (data?: any): ParameterDecorator => {\n return (target: Object, key: string | symbol | undefined, index: number) => {\n const args = Reflect.getMetadata(METADATA_KEYS.ROUTE_ARGS_METADATA, target.constructor, key as string | symbol) || {};\n Reflect.defineMetadata(\n METADATA_KEYS.ROUTE_ARGS_METADATA,\n assignMetadata(args, paramtype, index, data),\n target.constructor,\n key as string | symbol,\n );\n };\n };\n}\n\nfunction createPipesRouteParamDecorator(paramtype: RouteParamtypes) {\n return (data?: any, ...pipes: any[]): ParameterDecorator => {\n return (target: Object, key: string | symbol | undefined, index: number) => {\n const args = Reflect.getMetadata(METADATA_KEYS.ROUTE_ARGS_METADATA, target.constructor, key as string | symbol) || {};\n Reflect.defineMetadata(\n METADATA_KEYS.ROUTE_ARGS_METADATA,\n assignMetadata(args, paramtype, index, data, ...pipes),\n target.constructor,\n key as string | symbol,\n );\n };\n };\n}\n\nexport const Request = createRouteParamDecorator(RouteParamtypes.REQUEST);\nexport const Response = createRouteParamDecorator(RouteParamtypes.RESPONSE);\nexport const Next = createRouteParamDecorator(RouteParamtypes.NEXT);\nexport const Session = createRouteParamDecorator(RouteParamtypes.SESSION);\nexport const FileParam = createRouteParamDecorator(RouteParamtypes.FILE);\nexport const Files = createRouteParamDecorator(RouteParamtypes.FILES);\nexport const Ip = createRouteParamDecorator(RouteParamtypes.IP);\nexport const HostParam = createRouteParamDecorator(RouteParamtypes.HOST);\nexport const Ctx = createRouteParamDecorator(RouteParamtypes.CONTEXT);\n\nexport function Body(property?: string, ...pipes: any[]): ParameterDecorator {\n return createPipesRouteParamDecorator(RouteParamtypes.BODY)(property, ...pipes);\n}\n\nexport function Query(property?: string, ...pipes: any[]): ParameterDecorator {\n return createPipesRouteParamDecorator(RouteParamtypes.QUERY)(property, ...pipes);\n}\n\nexport function Param(property?: string, ...pipes: any[]): ParameterDecorator {\n return createPipesRouteParamDecorator(RouteParamtypes.PARAM)(property, ...pipes);\n}\n\nexport function Headers(property?: string, ...pipes: any[]): ParameterDecorator {\n return createPipesRouteParamDecorator(RouteParamtypes.HEADERS)(property, ...pipes);\n}\n\nexport function SetMetadata<K = any, V = any>(metadataKey: K, metadataValue: V): CustomDecorator<K> {\n return (target: object, key?: string | symbol, descriptor?: any) => {\n if (descriptor) {\n Reflect.defineMetadata(metadataKey, metadataValue, descriptor.value);\n return descriptor;\n }\n Reflect.defineMetadata(metadataKey, metadataValue, target);\n return target;\n };\n}\n\nexport type CustomDecorator<TKey = string> = MethodDecorator & ClassDecorator;\n\nexport function HttpCode(statusCode: number): MethodDecorator {\n return (target: object, key: string | symbol, descriptor: TypedPropertyDescriptor<any>) => {\n Reflect.defineMetadata(METADATA_KEYS.HTTP_CODE, statusCode, descriptor.value);\n return descriptor;\n };\n}\n\nexport function Header(name: string, value: string): MethodDecorator {\n return (target: object, key: string | symbol, descriptor: TypedPropertyDescriptor<any>) => {\n const headers = Reflect.getMetadata(METADATA_KEYS.HEADERS, descriptor.value) || [];\n headers.push({ name, value });\n Reflect.defineMetadata(METADATA_KEYS.HEADERS, headers, descriptor.value);\n return descriptor;\n };\n}\n\nexport function Redirect(url: string, statusCode: number = 302): MethodDecorator {\n return (target: object, key: string | symbol, descriptor: TypedPropertyDescriptor<any>) => {\n Reflect.defineMetadata(METADATA_KEYS.REDIRECT, { url, statusCode }, descriptor.value);\n return descriptor;\n };\n}\n\nexport function applyDecorators(...decorators: Array<ClassDecorator | MethodDecorator | PropertyDecorator>) {\n return <TFunction extends Function, Y>(\n target: object | TFunction,\n propertyKey?: string | symbol,\n descriptor?: TypedPropertyDescriptor<Y>,\n ) => {\n for (const decorator of decorators) {\n if (target instanceof Function && !descriptor) {\n (decorator as ClassDecorator)(target);\n continue;\n }\n if (descriptor) {\n (decorator as MethodDecorator)(target, propertyKey!, descriptor);\n } else {\n (decorator as PropertyDecorator)(target, propertyKey!);\n }\n }\n };\n}\nexport function createParamDecorator<FactoryData = any, Output = any>(\n factory: (data: FactoryData, ctx: ExecutionContext) => Output,\n) {\n const paramtype = RouteParamtypes.CUSTOM;\n return (data?: FactoryData): ParameterDecorator => {\n return (target: Object, key: string | symbol | undefined, index: number) => {\n const args = Reflect.getMetadata(METADATA_KEYS.ROUTE_ARGS_METADATA, target.constructor, key as string | symbol) || {};\n Reflect.defineMetadata(\n METADATA_KEYS.ROUTE_ARGS_METADATA,\n assignMetadata(args, paramtype, index, data, factory),\n target.constructor,\n key as string | symbol,\n );\n };\n };\n}\n","\nimport { MiddlewareConsumer, MiddlewareConfigProxy, Type, RouteInfo } from '../interfaces';\nimport { RequestMethod } from '../decorators';\n\nimport { Module } from '../injector/module';\n\nexport class MiddlewareBuilder implements MiddlewareConsumer {\n private readonly configs: MiddlewareConfig[] = [];\n\n constructor(private readonly module?: Module) { }\n\n apply(...middleware: (Type<any> | Function)[]): MiddlewareConfigProxy {\n return new MiddlewareConfigProxyImpl(this, middleware);\n }\n\n addConfig(middleware: any[], routes: (string | Type<any> | RouteInfo)[], excludes: (string | RouteInfo)[] = []) {\n this.configs.push({\n middleware,\n routes,\n excludes,\n module: this.module\n });\n }\n\n getConfigs() {\n return this.configs;\n }\n}\n\nclass MiddlewareConfigProxyImpl implements MiddlewareConfigProxy {\n private excludes: (string | RouteInfo)[] = [];\n\n constructor(private builder: MiddlewareBuilder, private middleware: any[]) { }\n\n exclude(...routes: (string | RouteInfo)[]): MiddlewareConfigProxy {\n this.excludes = routes;\n return this;\n }\n\n forRoutes(...routes: (string | Type<any> | RouteInfo)[]): MiddlewareConsumer {\n this.builder.addConfig(this.middleware, routes, this.excludes);\n return this.builder;\n }\n}\n\nexport interface MiddlewareConfig {\n middleware: any[];\n routes: (string | Type<any> | RouteInfo)[];\n excludes: (string | RouteInfo)[];\n module?: Module;\n}\n","\nexport class HttpException extends Error {\n constructor(\n private readonly response: string | object,\n private readonly status: number,\n ) {\n super();\n this.message = typeof response === 'string' ? response : JSON.stringify(response);\n }\n\n getResponse(): string | object {\n return this.response;\n }\n\n getStatus(): number {\n return this.status;\n }\n\n static createBody(message: object | string | any, error: string, statusCode: number) {\n if (!message) {\n return { statusCode, error };\n }\n return typeof message === 'object' && !Array.isArray(message)\n ? message\n : { statusCode, error, message };\n }\n}\n","\nimport { HttpException } from './http.exception';\nexport { HttpException };\n\nexport class BadRequestException extends HttpException {\n constructor(message?: string | object | any, error = 'Bad Request') {\n super(HttpException.createBody(message, error, 400), 400);\n }\n}\n\nexport class UnauthorizedException extends HttpException {\n constructor(message?: string | object | any, error = 'Unauthorized') {\n super(HttpException.createBody(message, error, 401), 401);\n }\n}\n\nexport class NotFoundException extends HttpException {\n constructor(message?: string | object | any, error = 'Not Found') {\n super(HttpException.createBody(message, error, 404), 404);\n }\n}\n\nexport class ForbiddenException extends HttpException {\n constructor(message?: string | object | any, error = 'Forbidden') {\n super(HttpException.createBody(message, error, 403), 403);\n }\n}\n\nexport class NotAcceptableException extends HttpException {\n constructor(message?: string | object | any, error = 'Not Acceptable') {\n super(HttpException.createBody(message, error, 406), 406);\n }\n}\n\nexport class RequestTimeoutException extends HttpException {\n constructor(message?: string | object | any, error = 'Request Timeout') {\n super(HttpException.createBody(message, error, 408), 408);\n }\n}\n\nexport class ConflictException extends HttpException {\n constructor(message?: string | object | any, error = 'Conflict') {\n super(HttpException.createBody(message, error, 409), 409);\n }\n}\n\nexport class GoneException extends HttpException {\n constructor(message?: string | object | any, error = 'Gone') {\n super(HttpException.createBody(message, error, 410), 410);\n }\n}\n\nexport class PayloadTooLargeException extends HttpException {\n constructor(message?: string | object | any, error = 'Payload Too Large') {\n super(HttpException.createBody(message, error, 413), 413);\n }\n}\n\nexport class UnsupportedMediaTypeException extends HttpException {\n constructor(message?: string | object | any, error = 'Unsupported Media Type') {\n super(HttpException.createBody(message, error, 415), 415);\n }\n}\n\nexport class UnprocessableEntityException extends HttpException {\n constructor(message?: string | object | any, error = 'Unprocessable Entity') {\n super(HttpException.createBody(message, error, 422), 422);\n }\n}\n\nexport class InternalServerErrorException extends HttpException {\n constructor(message?: string | object | any, error = 'Internal Server Error') {\n super(HttpException.createBody(message, error, 500), 500);\n }\n}\n\nexport class NotImplementedException extends HttpException {\n constructor(message?: string | object | any, error = 'Not Implemented') {\n super(HttpException.createBody(message, error, 501), 501);\n }\n}\n\nexport class BadGatewayException extends HttpException {\n constructor(message?: string | object | any, error = 'Bad Gateway') {\n super(HttpException.createBody(message, error, 502), 502);\n }\n}\n\nexport class ServiceUnavailableException extends HttpException {\n constructor(message?: string | object | any, error = 'Service Unavailable') {\n super(HttpException.createBody(message, error, 503), 503);\n }\n}\n\nexport class GatewayTimeoutException extends HttpException {\n constructor(message?: string | object | any, error = 'Gateway Timeout') {\n super(HttpException.createBody(message, error, 504), 504);\n }\n}\n","\nimport { Hono, Context, Next } from 'hono';\nimport { Observable, from, lastValueFrom } from 'rxjs';\nimport { mergeMap } from 'rxjs/operators';\nimport { IApplication, ExceptionFilter, PipeTransform, Interceptor, CanActivate, Type } from './interfaces';\nimport { Container } from './injector/container';\nimport { Injector } from './injector/injector';\nimport { ContextId } from './injector/context-id';\nimport { Scope } from './injector/scope';\nimport { InstanceWrapper } from './injector/instance-wrapper';\nimport { ExecutionContextHost } from './execution-context-host';\nimport { METADATA_KEYS } from './constants';\nimport { RouteDefinition, RouteParamtypes, RequestMethod } from './decorators';\nimport { MiddlewareBuilder } from './middleware/builder';\nimport { HttpException } from './common/exceptions';\nimport { StatusCode } from 'hono/utils/http-status';\nimport { Logger } from './services/logger.service';\nimport { HonoDiScanner } from './scanner';\n\nexport class HonoDiApplication implements IApplication {\n private globalFilters: ExceptionFilter[] = [];\n private globalPipes: PipeTransform[] = [];\n private globalGuards: CanActivate[] = [];\n private globalInterceptors: Interceptor[] = [];\n\n constructor(\n private readonly app: Hono,\n private readonly container: Container,\n private readonly injector: Injector\n ) { }\n\n useGlobalFilters(...filters: ExceptionFilter[]): this {\n this.globalFilters.push(...filters);\n return this;\n }\n\n useGlobalPipes(...pipes: PipeTransform[]): this {\n this.globalPipes.push(...pipes);\n return this;\n }\n\n useGlobalInterceptors(...interceptors: Interceptor[]): this {\n this.globalInterceptors.push(...interceptors);\n return this;\n }\n\n useGlobalGuards(...guards: CanActivate[]): this {\n this.globalGuards.push(...guards);\n return this;\n }\n\n private globalPrefix: string = '';\n\n setGlobalPrefix(prefix: string): this {\n if (this.isInitialized) {\n this.logger.warn('Setting global prefix after initialization will not affect existing routes. Use { autoInit: false } in HonoDiFactory.create() if you need to set a prefix.');\n }\n this.globalPrefix = prefix;\n return this;\n }\n\n public getGlobalPrefix() { return this.globalPrefix; }\n\n private readonly logger = new Logger('HonoDiApplication');\n private isInitialized = false;\n\n async init(): Promise<this> {\n if (this.isInitialized) return this;\n\n this.logger.log('Initializing middleware...');\n await this.initializeMiddleware();\n\n this.logger.log('Registering controllers...');\n this.registerControllersFromContainer();\n\n this.logger.log('Calling OnApplicationBootstrap...');\n await this.callLifecycleHook('onApplicationBootstrap');\n\n this.isInitialized = true;\n return this;\n }\n\n async listen(port: number | string, callback?: () => void): Promise<any> {\n if (!this.isInitialized) await this.init();\n\n const server = Bun.serve({\n port: Number(port),\n fetch: this.app.fetch,\n });\n if (callback) callback();\n return server;\n }\n\n private async callLifecycleHook(hook: string) {\n const modules = this.container.getModules();\n for (const module of modules.values()) {\n for (const wrapper of module.providers.values()) {\n if (wrapper.instance && (wrapper.instance as any)[hook]) {\n await (wrapper.instance as any)[hook]();\n }\n }\n for (const wrapper of module.controllers.values()) {\n if (wrapper.instance && (wrapper.instance as any)[hook]) {\n await (wrapper.instance as any)[hook]();\n }\n }\n }\n }\n\n private registerControllersFromContainer() {\n const modules = this.container.getModules();\n modules.forEach((module) => {\n module.controllers.forEach((wrapper) => {\n this.registerControllerRoutes(wrapper.metatype, this.app, module);\n });\n });\n }\n\n private registerControllerRoutes(controllerClass: any, app: Hono, moduleRef: any) {\n if (!Reflect.hasMetadata(METADATA_KEYS.CONTROLLER, controllerClass)) {\n return;\n }\n\n const { prefix } = Reflect.getMetadata(METADATA_KEYS.CONTROLLER, controllerClass);\n const routes = Reflect.getMetadata(METADATA_KEYS.ROUTES, controllerClass) as RouteDefinition[];\n\n if (!routes) return;\n\n routes.forEach((route) => {\n const globalPrefix = this.getGlobalPrefix();\n const fullPath = this.combinePaths(globalPrefix, this.combinePaths(prefix, route.path));\n\n (app as any)[route.requestMethod](fullPath, async (c: any) => {\n const contextId = new ContextId();\n const executionContext = new ExecutionContextHost([c], controllerClass, controllerClass.prototype[route.methodName]);\n\n try {\n const wrapper = moduleRef.getProvider(controllerClass) || moduleRef.controllers.get(controllerClass);\n if (!wrapper) {\n throw new Error(`Controller ${controllerClass.name} not found in module ${moduleRef.metatype.name}`);\n }\n\n const controllerInstance = await this.injector.loadInstance(wrapper, contextId);\n const handler = (controllerInstance as any)[route.methodName].bind(controllerInstance);\n\n // 1. Guards\n const guards = await this.resolveContextItems(\n [\n ...this.globalGuards,\n ...(Reflect.getMetadata(METADATA_KEYS.USE_GUARDS, controllerClass) || []),\n ...(Reflect.getMetadata(METADATA_KEYS.USE_GUARDS, (controllerInstance as any)[route.methodName]) || [])\n ],\n moduleRef,\n contextId\n );\n\n if (!await this.runGuards(guards, executionContext)) {\n c.status(403);\n return c.json({ statusCode: 403, message: 'Forbidden resource' });\n }\n\n // 2. Interceptors\n const interceptors = await this.resolveContextItems(\n [\n ...this.globalInterceptors,\n ...(Reflect.getMetadata(METADATA_KEYS.USE_INTERCEPTORS, controllerClass) || []),\n ...(Reflect.getMetadata(METADATA_KEYS.USE_INTERCEPTORS, (controllerInstance as any)[route.methodName]) || [])\n ],\n moduleRef,\n contextId\n );\n\n // 3. Pipes\n const pipes = await this.resolveContextItems(\n [\n ...this.globalPipes,\n ...(Reflect.getMetadata(METADATA_KEYS.USE_PIPES, controllerClass) || []),\n ...(Reflect.getMetadata(METADATA_KEYS.USE_PIPES, (controllerInstance as any)[route.methodName]) || [])\n ],\n moduleRef,\n contextId\n );\n\n // Resolve Args\n const args = await this.resolveArgs(\n contextId,\n executionContext,\n controllerClass,\n route.methodName,\n moduleRef,\n pipes\n );\n\n if (args.length === 0 && !Reflect.hasMetadata(METADATA_KEYS.ROUTE_ARGS_METADATA, controllerClass, route.methodName)) {\n args.push(c);\n }\n\n const interceptorChain = async (index: number): Promise<Observable<any>> => {\n if (index >= interceptors.length) {\n return new Observable((subscriber) => {\n try {\n const result = handler(...args);\n if (result instanceof Promise) {\n result\n .then((data) => {\n subscriber.next(data);\n subscriber.complete();\n })\n .catch((err) => subscriber.error(err));\n } else {\n subscriber.next(result);\n subscriber.complete();\n }\n } catch (err) {\n subscriber.error(err);\n }\n });\n }\n return interceptors[index].intercept(executionContext, {\n handle: () => from(interceptorChain(index + 1)).pipe(mergeMap((obs) => obs))\n });\n };\n\n const obs = await interceptorChain(0);\n const result = await lastValueFrom(obs);\n\n // Handle @HttpCode\n const httpCode = Reflect.getMetadata(METADATA_KEYS.HTTP_CODE, (controllerInstance as any)[route.methodName]);\n if (httpCode) {\n c.status(httpCode);\n }\n\n // Handle @Header\n const headers = Reflect.getMetadata(METADATA_KEYS.HEADERS, (controllerInstance as any)[route.methodName]);\n if (headers) {\n headers.forEach((h: any) => c.header(h.name, h.value));\n }\n\n // Handle @Redirect\n const redirect = Reflect.getMetadata(METADATA_KEYS.REDIRECT, (controllerInstance as any)[route.methodName]);\n if (redirect) {\n if (result && typeof result === 'object' && result.url) {\n return c.redirect(result.url, result.statusCode || redirect.statusCode);\n }\n return c.redirect(redirect.url, redirect.statusCode);\n }\n\n if (result instanceof Response) {\n return result;\n }\n if (result && typeof result.text === 'function' && typeof result.headers === 'object') {\n return result;\n }\n\n return c.json(result);\n\n } catch (exception) {\n return await this.handleException(exception, c, controllerClass, route.methodName, moduleRef, contextId);\n }\n });\n\n this.logger.log(`[Route] Mapped {${fullPath}, ${route.requestMethod.toUpperCase()}}`);\n });\n }\n\n private async handleException(exception: any, c: Context, controllerClass: any, methodName: string, moduleRef: any, contextId: any) {\n const filters = await this.resolveContextItems(\n [\n ...(Reflect.getMetadata(METADATA_KEYS.USE_FILTERS, (moduleRef.controllers.get(controllerClass)?.instance as any)?.[methodName]) || []),\n ...(Reflect.getMetadata(METADATA_KEYS.USE_FILTERS, controllerClass) || []),\n ...this.globalFilters\n ],\n moduleRef,\n contextId\n );\n\n for (const filter of filters) {\n const catchExceptions = Reflect.getMetadata(METADATA_KEYS.FILTER_CATCH, filter.constructor) || [];\n if (catchExceptions.length === 0 || catchExceptions.some((e: any) => exception instanceof e)) {\n const host = new ExecutionContextHost([c], controllerClass, (moduleRef.controllers.get(controllerClass)?.instance as any)?.[methodName]);\n return await filter.catch(exception, host);\n }\n }\n\n this.logger.error(exception);\n\n if (exception instanceof HttpException) {\n const status = exception.getStatus();\n const response = exception.getResponse();\n c.status(status as StatusCode);\n return c.json(response);\n }\n\n if (exception instanceof Error) {\n c.status(500);\n return c.json({\n statusCode: 500,\n message: 'Internal Server Error',\n cause: exception.message\n });\n }\n }\n\n private async resolveContextItems(items: any[], moduleRef: any, contextId: any): Promise<any[]> {\n const instances = [];\n const scanner = new HonoDiScanner(this.container);\n for (const item of items) {\n if (typeof item === 'function') {\n let wrapper = moduleRef.getProvider(item);\n if (!wrapper) {\n wrapper = new InstanceWrapper({\n token: item,\n name: item.name,\n metatype: item,\n host: moduleRef,\n scope: Scope.TRANSIENT\n });\n scanner.scanDependencies(wrapper);\n }\n const instance = await this.injector.loadInstance(wrapper, contextId);\n instances.push(instance);\n } else {\n instances.push(item);\n }\n }\n return instances;\n }\n\n private async resolveArgs(contextId: ContextId, context: ExecutionContextHost, controller: Type<any>, methodName: string, moduleRef: any, methodPipes: any[] = []) {\n const argsMetadata = Reflect.getMetadata(METADATA_KEYS.ROUTE_ARGS_METADATA, controller, methodName) || {};\n const args: any[] = [];\n const c = context.getArgs()[0];\n\n const sortedArgs = Object.values(argsMetadata).sort((a: any, b: any) => a.index - b.index);\n\n for (const arg of sortedArgs as any[]) {\n let value;\n const { index, data, pipes, paramtype } = arg;\n\n switch (paramtype) {\n case RouteParamtypes.REQUEST: value = c.req; break;\n case RouteParamtypes.RESPONSE: value = c; break;\n case RouteParamtypes.NEXT: value = context.getArgs()[1]; break;\n case RouteParamtypes.CONTEXT: value = c; break;\n case RouteParamtypes.BODY:\n if (data && c.req.parseBody) {\n const body = await c.req.parseBody();\n value = body[data];\n } else {\n try {\n const body = await c.req.json();\n value = data ? body[data] : body;\n } catch (e) { value = null; }\n }\n break;\n case RouteParamtypes.QUERY: value = data ? c.req.query(data) : c.req.query(); break;\n case RouteParamtypes.PARAM: value = data ? c.req.param(data) : c.req.param(); break;\n case RouteParamtypes.HEADERS: value = data ? c.req.header(data) : c.req.header(); break;\n case RouteParamtypes.IP: value = c.req.header('x-forwarded-for') || '127.0.0.1'; break;\n case RouteParamtypes.CUSTOM:\n const factory = (arg as any).pipes[0]; // Factory is stored as first pipe arg in assignMetadata\n // Note: In assignMetadata for CUSTOM, we passed factory as the last argument, which lands in 'pipes' array\n // Let's verify how assignMetadata stores it.\n // assignMetadata(args, paramtype, index, data, factory) -> factory is in ...pipes\n if (typeof factory === 'function') {\n value = factory(data, context);\n }\n break;\n default: value = null;\n }\n\n const paramPipeInstances = await this.resolveContextItems(pipes || [], moduleRef, contextId);\n const allPipes = [...methodPipes, ...paramPipeInstances];\n\n for (const pipe of allPipes) {\n value = await pipe.transform(value, { type: 'custom', metatype: null, data });\n }\n\n args[index] = value;\n }\n\n return args;\n }\n\n private async runGuards(guards: any[], context: any): Promise<boolean> {\n for (const guard of guards) {\n const result = await guard.canActivate(context);\n if (!result) return false;\n }\n return true;\n }\n\n private async initializeMiddleware() {\n const configs: any[] = [];\n const modules = this.container.getModules();\n\n for (const module of modules.values()) {\n const moduleClass = module.metatype;\n const wrapper = module.getProvider(moduleClass);\n if (wrapper && wrapper.instance && (wrapper.instance as any).configure) {\n const builder = new MiddlewareBuilder(module);\n (wrapper.instance as any).configure(builder);\n configs.push(...builder.getConfigs());\n }\n }\n if (configs.length === 0) return;\n\n const resolvedConfigs: any[] = [];\n const globalContextId = new ContextId();\n\n for (const config of configs) {\n const instances: any[] = [];\n for (const m of config.middleware) {\n if (typeof m === 'function' && !m.prototype?.use) {\n instances.push(m);\n } else {\n const wrapper = new InstanceWrapper({\n token: m,\n name: m.name,\n metatype: m,\n scope: Scope.TRANSIENT\n });\n const scanner = new HonoDiScanner(this.container);\n scanner.scanDependencies(wrapper);\n const hostModule = config.module || modules.values().next().value;\n wrapper.host = hostModule;\n\n const instance = await this.injector.loadInstance(wrapper, globalContextId);\n instances.push(instance);\n }\n }\n resolvedConfigs.push({ ...config, instances });\n }\n\n this.app.use('*', async (c, next) => {\n const path = c.req.path;\n const method = c.req.method;\n\n const matchingMiddleware: any[] = [];\n\n for (const config of resolvedConfigs) {\n if (this.isRouteExcluded(config.excludes, path, method)) continue;\n if (this.isRouteMatch(config.routes, path, method)) {\n matchingMiddleware.push(...config.instances);\n }\n }\n\n if (matchingMiddleware.length === 0) {\n return await next();\n }\n\n const executeChain = async (index: number, finalNext: Next): Promise<void> => {\n if (index >= matchingMiddleware.length) {\n return await finalNext();\n }\n const middleware = matchingMiddleware[index];\n\n return new Promise<void>((resolve, reject) => {\n let nextCalled = false;\n const nextFn = async () => {\n nextCalled = true;\n try {\n await executeChain(index + 1, finalNext);\n resolve();\n } catch (e) {\n reject(e);\n }\n };\n\n try {\n const useFn = middleware.use ? middleware.use.bind(middleware) : middleware;\n const result = useFn(c, nextFn);\n\n if (result instanceof Promise) {\n result.then(() => {\n if (!nextCalled) resolve();\n }).catch(reject);\n } else {\n if (!nextCalled) resolve();\n }\n } catch (e) {\n reject(e);\n }\n });\n };\n\n await executeChain(0, next);\n });\n }\n\n private isRouteMatch(routes: any[], path: string, method: string): boolean {\n for (const route of routes) {\n if (typeof route === 'string') {\n const normalizedRoute = route === '*' ? '*' : (route.startsWith('/') ? route : `/${route}`);\n if (normalizedRoute === '*' || path.startsWith(normalizedRoute)) return true;\n if (path === normalizedRoute) return true;\n } else if (typeof route === 'object' && route.path && route.method) {\n if (route.method !== -1 && route.method !== RequestMethod.ALL && route.method !== method.toLowerCase()) {\n continue;\n }\n if (route.path === '*' || path === route.path) return true;\n } else if (typeof route === 'function') {\n const prefix = Reflect.getMetadata(METADATA_KEYS.CONTROLLER, route)?.prefix || '';\n if (path.startsWith(this.combinePaths(prefix, ''))) return true;\n }\n }\n return false;\n }\n\n private isRouteExcluded(routes: any[], path: string, method: string): boolean {\n return this.isRouteMatch(routes, path, method);\n }\n\n private combinePaths(prefix: string, path: string): string {\n const cleanPrefix = prefix ? prefix.replace(/^\\/+/, '').replace(/\\/+$/, '') : '';\n const cleanPath = path ? path.replace(/^\\/+/, '').replace(/\\/+$/, '') : '';\n let result = '';\n if (cleanPrefix) result += `/${cleanPrefix}`;\n if (cleanPath) result += `/${cleanPath}`;\n return result || '/';\n }\n\n getHttpAdapter(): any {\n return this.app;\n }\n\n get<TInput = any, TResult = TInput>(typeOrToken: Type<TInput> | string | symbol, options?: { strict?: boolean }): TResult {\n // Simple implementation: search in all modules\n const modules = this.container.getModules();\n for (const module of modules.values()) {\n const provider = module.getProvider(typeOrToken);\n if (provider && provider.instance) {\n return provider.instance as TResult;\n }\n }\n throw new Error(`Provider ${String(typeOrToken)} not found`);\n }\n\n async close(): Promise<void> {\n // TODO: Implement shutdown hooks\n }\n\n // Getters for global items (internal use)\n public getGlobalFilters() { return this.globalFilters; }\n public getGlobalPipes() { return this.globalPipes; }\n public getGlobalGuards() { return this.globalGuards; }\n public getGlobalInterceptors() { return this.globalInterceptors; }\n\n public getContainer(): Container {\n return this.container;\n }\n}\n\n","import 'reflect-metadata';\nimport { Hono, Context, Next } from 'hono';\nimport { Observable, from, lastValueFrom } from 'rxjs';\nimport { mergeMap } from 'rxjs/operators';\nimport { Container } from './injector/container';\nimport { HonoDiScanner } from './scanner';\nimport { Injector } from './injector/injector';\nimport { METADATA_KEYS } from './constants';\nimport { RouteDefinition, RouteParamtypes, RequestMethod } from './decorators';\nimport { ContextId } from './injector/context-id';\nimport { Scope } from './injector/scope';\nimport { ExecutionContextHost } from './execution-context-host';\nimport { InstanceWrapper } from './injector/instance-wrapper';\nimport { Type, IApplication } from './interfaces';\nimport { HonoDiApplication } from './application';\nimport { MiddlewareBuilder } from './middleware/builder';\nimport { HttpException } from './common/exceptions';\nimport { StatusCode } from 'hono/utils/http-status';\nimport { Logger } from './services/logger.service';\n\nexport class HonoDiFactory {\n private static logger = new Logger('HonoDiFactory');\n\n public static async create(rootModule: any, appOrOptions?: Hono | { app?: Hono, autoInit?: boolean }): Promise<IApplication> {\n let app: Hono | undefined;\n let autoInit = true;\n\n if (appOrOptions && 'fetch' in appOrOptions && typeof appOrOptions.fetch === 'function') {\n // Basic duck typing for Hono instance or instanceof check if imported\n app = appOrOptions as Hono;\n } else if (appOrOptions) {\n const options = appOrOptions as { app?: Hono, autoInit?: boolean };\n app = options.app;\n if (options.autoInit !== undefined) {\n autoInit = options.autoInit;\n }\n }\n\n const container = new Container();\n const scanner = new HonoDiScanner(container);\n const injector = new Injector(container);\n const honoApp = app || new Hono();\n const bunApp = new HonoDiApplication(honoApp, container, injector);\n\n // 1. Scan and Build Graph\n this.logger.log('Scanning modules...');\n await scanner.scan(rootModule);\n\n // 2. Instantiate Global Singletons\n this.logger.log('Instantiating providers...');\n await this.instantiateProviders(container, injector);\n\n // 3. Call OnModuleInit\n this.logger.log('Calling OnModuleInit...');\n await this.callLifecycleHook('onModuleInit', container);\n\n if (autoInit) {\n await bunApp.init();\n }\n\n return bunApp;\n }\n\n private static async instantiateProviders(container: Container, injector: Injector) {\n const modules = container.getModules();\n const globalContextId = new ContextId();\n for (const module of modules.values()) {\n for (const wrapper of module.providers.values()) {\n if (wrapper.scope === Scope.DEFAULT) {\n await injector.loadInstance(wrapper, globalContextId);\n }\n }\n for (const wrapper of module.controllers.values()) {\n if (wrapper.scope === Scope.DEFAULT) {\n await injector.loadInstance(wrapper, globalContextId);\n }\n }\n }\n }\n\n private static async callLifecycleHook(hook: string, container: Container) {\n const modules = container.getModules();\n for (const module of modules.values()) {\n for (const wrapper of module.providers.values()) {\n if (wrapper.instance && (wrapper.instance as any)[hook]) {\n await (wrapper.instance as any)[hook]();\n }\n }\n for (const wrapper of module.controllers.values()) {\n if (wrapper.instance && (wrapper.instance as any)[hook]) {\n await (wrapper.instance as any)[hook]();\n }\n }\n }\n }\n}\n","\nimport { Type, ForwardReference } from './interfaces';\n\nexport function forwardRef(fn: () => Type<any>): ForwardReference {\n return { forwardRef: fn };\n}\n","\nimport { Injectable } from '../decorators';\nimport { Type } from '../interfaces';\n\n@Injectable()\nexport class Reflector {\n get<TResult = any, TKey = any>(metadataKey: TKey, target: Type<any> | Function): TResult {\n return Reflect.getMetadata(metadataKey, target) as TResult;\n }\n\n getAllAndOverride<TResult = any, TKey = any>(metadataKey: TKey, targets: (Type<any> | Function)[]): TResult {\n for (const target of targets) {\n const result = Reflect.getMetadata(metadataKey, target);\n if (result !== undefined) {\n return result as TResult;\n }\n }\n return undefined as any;\n }\n\n getAllAndMerge<TResult = any[], TKey = any>(metadataKey: TKey, targets: (Type<any> | Function)[]): TResult {\n const result: any[] = [];\n for (const target of targets) {\n const metadata = Reflect.getMetadata(metadataKey, target);\n if (metadata) {\n if (Array.isArray(metadata)) {\n result.push(...metadata);\n } else {\n result.push(metadata);\n }\n }\n }\n return result as TResult;\n }\n}\n","\nimport { PipeTransform, ArgumentMetadata } from '../../interfaces';\nimport { BadRequestException } from '../exceptions';\nimport { Injectable } from '../../decorators';\n\n@Injectable()\nexport class ParseIntPipe implements PipeTransform<string, number> {\n transform(value: string, metadata: ArgumentMetadata): number {\n const isNumeric = !isNaN(parseFloat(value)) && isFinite(value as any);\n if (!isNumeric) {\n throw new BadRequestException('Validation failed (numeric string is expected)');\n }\n return parseInt(value, 10);\n }\n}\n\n@Injectable()\nexport class ParseFloatPipe implements PipeTransform<string, number> {\n transform(value: string, metadata: ArgumentMetadata): number {\n const isNumeric = !isNaN(parseFloat(value)) && isFinite(value as any);\n if (!isNumeric) {\n throw new BadRequestException('Validation failed (numeric string is expected)');\n }\n return parseFloat(value);\n }\n}\n\n@Injectable()\nexport class ParseBoolPipe implements PipeTransform<string | boolean, boolean> {\n transform(value: string | boolean, metadata: ArgumentMetadata): boolean {\n if (value === true || value === 'true') {\n return true;\n }\n if (value === false || value === 'false') {\n return false;\n }\n throw new BadRequestException('Validation failed (boolean string is expected)');\n }\n}\n\n@Injectable()\nexport class ValidationPipe implements PipeTransform<any> {\n transform(value: any, metadata: ArgumentMetadata) {\n // Placeholder\n return value;\n }\n}\n","export class AppError extends Error {\n constructor(\n public statusCode: number,\n public override message: string,\n public isOperational = true\n ) {\n super(message);\n Object.setPrototypeOf(this, AppError.prototype);\n Error.captureStackTrace(this, this.constructor);\n }\n}\n\nexport class NotFoundError extends AppError {\n constructor(message = 'Resource not found') {\n super(404, message);\n }\n}\n\nexport class BadRequestError extends AppError {\n constructor(message = 'Bad request') {\n super(400, message);\n }\n}\n\nexport class UnauthorizedError extends AppError {\n constructor(message = 'Unauthorized') {\n super(401, message);\n }\n}\n\nexport class ForbiddenError extends AppError {\n constructor(message = 'Forbidden') {\n super(403, message);\n }\n}\n\nexport class ConflictError extends AppError {\n constructor(message = 'Resource already exists') {\n super(409, message);\n }\n}\n","export class HttpException extends Error {\n constructor(\n private readonly response: string | object,\n private readonly status: number,\n ) {\n super();\n this.message = typeof response === 'string' ? response : JSON.stringify(response);\n }\n\n getResponse(): string | object {\n return this.response;\n }\n\n getStatus(): number {\n return this.status;\n }\n\n static createBody(message: object | string, error: string, statusCode: number) {\n if (!message) {\n return { statusCode, error };\n }\n return typeof message === 'object' && !Array.isArray(message)\n ? message\n : { statusCode, error, message };\n }\n}\n\nexport class BadRequestException extends HttpException {\n constructor(message?: string | object | any, error = 'Bad Request') {\n super(\n HttpException.createBody(message, error, 400),\n 400,\n );\n }\n}\n\nexport class UnauthorizedException extends HttpException {\n constructor(message?: string | object | any, error = 'Unauthorized') {\n super(\n HttpException.createBody(message, error, 401),\n 401,\n );\n }\n}\n\nexport class NotFoundException extends HttpException {\n constructor(message?: string | object | any, error = 'Not Found') {\n super(\n HttpException.createBody(message, error, 404),\n 404,\n );\n }\n}\n\nexport class ForbiddenException extends HttpException {\n constructor(message?: string | object | any, error = 'Forbidden') {\n super(\n HttpException.createBody(message, error, 403),\n 403,\n );\n }\n}\n\nexport class InternalServerErrorException extends HttpException {\n constructor(message?: string | object | any, error = 'Internal Server Error') {\n super(\n HttpException.createBody(message, error, 500),\n 500,\n );\n }\n}\n","import { ExceptionFilter, ArgumentsHost } from '../../interfaces';\nimport { HttpException } from '../exceptions/HttpException';\nimport { Catch } from '../../decorators';\n\n@Catch()\nexport class BaseExceptionFilter implements ExceptionFilter {\n catch(exception: unknown, host: ArgumentsHost) {\n const ctx = host.switchToHttp();\n const response = ctx.getResponse(); // This would be the Hono Context object in our case, or a wrapper\n const honoCtx = ctx.getContext();\n\n if (exception instanceof HttpException) {\n const status = exception.getStatus();\n const res = exception.getResponse();\n honoCtx.status(status as any);\n return honoCtx.json(res);\n }\n\n // Default 500\n console.error(exception);\n honoCtx.status(500);\n return honoCtx.json({\n statusCode: 500,\n message: 'Internal Server Error',\n });\n }\n}\n"]}
|