import type { Lifecycle, AnyFunction, Dependency, AnyConstructor, Factory, Precedence } from './base'; import { NamedParameters } from './BuiltIns'; export interface SetupConfig { inherit?: boolean; lifecycle?: Lifecycle; precedence?: Precedence; optional?: boolean; nodeModules?: boolean; globals?: boolean; } export interface FactoryOpts { lifecycle?: Lifecycle; precedence?: Precedence; alias?: string | string[]; } export interface ServiceOpts extends FactoryOpts { bindToInstance?: boolean; } export interface ResolveOpts { optional?: boolean; with?: NamedParameters; async?: boolean; default?: any; } export interface JpexInstance { constant(name: string, obj: any): void; constant(obj: T): void; constant(name: string, obj: T): void; factory(name: string, deps: Dependency[], fn: AnyFunction, opts?: FactoryOpts): void; factory(fn: AnyFunction, opts?: FactoryOpts): void; factory(name: string, deps: Dependency[], fn: AnyFunction, opts?: FactoryOpts): void; factoryAsync(name: string, deps: Dependency[], fn: AnyFunction, opts?: FactoryOpts): void; factoryAsync(fn: AnyFunction>, opts?: FactoryOpts): void; factoryAsync(name: string, deps: Dependency[], fn: AnyFunction>, opts?: FactoryOpts): void; service(name: string, deps: Dependency[], fn: AnyConstructor | AnyFunction, opts?: ServiceOpts): void; service(fn: AnyConstructor | AnyFunction, opts?: ServiceOpts): void; service(name: string, deps: Dependency[], fn: AnyConstructor | AnyFunction, opts?: ServiceOpts): void; alias(alias: string, name: string): void; alias(alias: string): void; alias(): void; alias(alias: string, name: string): void; alias(alias: string, name: string): void; resolve(name: Dependency, opts?: ResolveOpts): any; resolve(opts?: ResolveOpts): T; resolve(name: Dependency, opts?: ResolveOpts): T; resolveAsync(name: Dependency, opts?: ResolveOpts): Promise; resolveAsync(opts?: ResolveOpts): Promise; resolveAsync(name: Dependency, opts?: ResolveOpts): Promise; resolveWith(name: Dependency, namedParameters: NamedParameters, opts?: ResolveOpts): any; resolveWith(namedParameters: NamedParameters, opts?: ResolveOpts): T; resolveWith(namedParameters: NamedParameters, opts?: ResolveOpts): T; resolveWith(namedParameters: NamedParameters, opts?: ResolveOpts): T; resolveWith(namedParameters: NamedParameters, opts?: ResolveOpts): T; resolveWith(namedParameters: NamedParameters, opts?: ResolveOpts): T; resolveWith(namedParameters: NamedParameters, opts?: ResolveOpts): T; resolveWith(namedParameters: NamedParameters, opts?: ResolveOpts): T; resolveWith(namedParameters: NamedParameters, opts?: ResolveOpts): T; resolveWith(namedParameters: NamedParameters, opts?: ResolveOpts): T; resolveWith(namedParameters: NamedParameters, opts?: ResolveOpts): T; resolveWith(namedParameters: NamedParameters, opts?: ResolveOpts): T; resolveWith(namedParameters: NamedParameters, opts?: ResolveOpts): T; resolveWith(namedParameters: NamedParameters, opts?: ResolveOpts): T; resolveAsyncWith(name: Dependency, namedParameters: NamedParameters, opts?: ResolveOpts): any; resolveAsyncWith(namedParameters: NamedParameters, opts?: ResolveOpts): Promise; resolveAsyncWith(namedParameters: NamedParameters, opts?: ResolveOpts): Promise; resolveAsyncWith(namedParameters: NamedParameters, opts?: ResolveOpts): Promise; resolveAsyncWith(namedParameters: NamedParameters, opts?: ResolveOpts): Promise; resolveAsyncWith(namedParameters: NamedParameters, opts?: ResolveOpts): Promise; resolveAsyncWith(namedParameters: NamedParameters, opts?: ResolveOpts): Promise; resolveAsyncWith(namedParameters: NamedParameters, opts?: ResolveOpts): Promise; resolveAsyncWith(namedParameters: NamedParameters, opts?: ResolveOpts): Promise; resolveAsyncWith(namedParameters: NamedParameters, opts?: ResolveOpts): Promise; resolveAsyncWith(namedParameters: NamedParameters, opts?: ResolveOpts): Promise; resolveAsyncWith(namedParameters: NamedParameters, opts?: ResolveOpts): Promise; resolveAsyncWith(namedParameters: NamedParameters, opts?: ResolveOpts): Promise; resolveAsyncWith(namedParameters: NamedParameters, opts?: ResolveOpts): Promise; encase>(dependencies: Dependency[], fn: F): ReturnType & { encased: F; }; encase>(fn: F): ReturnType & { encased: F; }; defer(): T; defer(name: Dependency): T; raw(name: Dependency): AnyFunction; raw(): AnyFunction; raw(name: Dependency): AnyFunction; clearCache(): void; clearCache(...names: string[]): void; clearCache(...names: string[]): void; extend(config?: SetupConfig): JpexInstance; infer(): string; $$parent: JpexInstance; $$factories: { [key: string]: Factory; }; $$resolved: { [key: string]: Factory; }; $$alias: { [key: string]: string; }; $$deps: Dependency[]; $$config: { lifecycle: Lifecycle; precedence: Precedence; optional: boolean; nodeModules: boolean; globals: boolean; }; }