import 'reflect-metadata'; import { InjectionToken } from './container.js'; import type { ClassConstructor } from '../types.js'; /** * Options for @Injectable decorator */ export interface InjectableOptions { /** * Explicit dependencies for ESM compatibility. * * In ESM environments, TypeScript's emitDecoratorMetadata may not work * reliably due to module loading order. Use this to explicitly declare * constructor dependencies. * * @example * ```typescript * @Injectable({ deps: [DatabaseService, LoggerService] }) * export class UserService { * constructor(private db: DatabaseService, private logger: LoggerService) {} * } * ``` */ deps?: InjectionToken[]; } /** * Marks a class as injectable (can be used with DI) * * @example Basic usage (relies on TypeScript's emitDecoratorMetadata): * ```typescript * @Injectable() * export class UserService { * constructor(private db: DatabaseService) {} * } * ``` * * @example With explicit deps (recommended for ESM compatibility): * ```typescript * @Injectable({ deps: [DatabaseService] }) * export class UserService { * constructor(private db: DatabaseService) {} * } * ``` */ export declare function Injectable(options?: InjectableOptions): ClassDecorator; /** * Inject a specific token (optional - for custom injection) * * @example * ```typescript * constructor(@Inject('DATABASE_CONFIG') private config: DatabaseConfig) {} * ``` */ export declare function Inject(token: InjectionToken): ParameterDecorator; /** * Check if a class is injectable */ export declare function isInjectable(target: ClassConstructor): boolean; /** * Get inject tokens for constructor parameters */ export declare function getInjectTokens(target: ClassConstructor): InjectionToken[]; //# sourceMappingURL=injectable.decorator.d.ts.map