webssh2-server
Version:
A Websocket to SSH2 gateway using xterm.js, socket.io, ssh2
91 lines (90 loc) • 2.54 kB
TypeScript
/**
* Simple dependency injection container
*/
import type { Config } from '../types/config.js';
import type { Logger, AuthService, SSHService, TerminalService, SessionService, Services } from './interfaces.js';
import type { SessionStore } from '../state/store.js';
/**
* Token type for dependency registration
*/
export type Token<T> = string & {
__type?: T;
};
/**
* Factory function for creating dependencies
*/
export type Factory<T> = () => T;
/**
* Async factory function for creating dependencies
*/
export type AsyncFactory<T> = () => Promise<T>;
/**
* Dependency injection container
*/
export declare class Container {
private readonly instances;
private readonly factories;
private readonly asyncFactories;
private readonly resolving;
/**
* Register a factory for creating dependencies
*/
register<T>(token: Token<T> | string, factory: Factory<T>): void;
/**
* Register an async factory for creating dependencies
*/
registerAsync<T>(token: Token<T> | string, factory: AsyncFactory<T>): void;
/**
* Register a singleton instance
*/
registerSingleton<T>(token: Token<T> | string, instance: T): void;
/**
* Resolve a dependency
*/
resolve<T>(token: Token<T> | string): T;
/**
* Resolve a dependency asynchronously
*/
resolveAsync<T>(token: Token<T> | string): Promise<T>;
/**
* Check if a token is registered
*/
has(token: Token<unknown> | string): boolean;
/**
* Get all registered tokens
*/
getTokens(): string[];
/**
* Clear all registrations and instances
*/
clear(): void;
/**
* Create a child container that inherits from this one
*/
createChild(): Container;
private ensureNotResolving;
private getCachedInstance;
private createFromAsyncFactory;
private createFromFactory;
}
/**
* Create typed tokens for dependency injection
*/
export declare function createToken<T>(name: string): Token<T>;
/**
* Create a new container instance
*/
export declare function createContainer(): Container;
/**
* Common service tokens
*/
export declare const TOKENS: {
readonly Config: Token<Config>;
readonly Logger: Token<Logger>;
readonly SessionStore: Token<SessionStore>;
readonly AuthService: Token<AuthService>;
readonly SSHService: Token<SSHService>;
readonly TerminalService: Token<TerminalService>;
readonly SessionService: Token<SessionService>;
readonly Services: Token<Services>;
};