or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

application.mdbase-classes.mdconfiguration.mdcontext.mdhttp-client.mdindex.mdloaders-errors.mdstartup.md
tile.json

application.mddocs/

Application Management

Core application and agent classes for managing web application lifecycle and multi-process coordination in Egg.js.

Capabilities

Application Class

Main application class that extends EggApplicationCore, designed for app worker processes that handle HTTP requests.

/**
 * Singleton instance in App Worker, extends EggApplicationCore
 * @param options - Configuration options for the application
 */
class Application extends EggApplicationCore {
  constructor(options?: Omit<EggApplicationCoreOptions, 'type'>);
  
  /** HTTP server instance, set after 'server' event */
  server?: http.Server;
  
  /** Reference to Helper class for utility functions */
  Helper: typeof Helper;
  
  /** Global view locals shared across all requests */
  get locals(): Record<string, any>;
  set locals(val: Record<string, any>);
  
  /** Cookie signing keys derived from config.keys */
  get keys(): string[];
  
  /** Handle client errors on raw socket */
  onClientError(err: any, socket: Socket): void;
  
  /** Setup server configuration and event handlers */
  onServer(server: http.Server): void;
  
  /** Run async function in background without blocking request */
  runInBackground(scope: (ctx: Context) => Promise<void>, req?: unknown): void;
  
  /** Dump application configuration and router information to files */
  dumpConfig(): void;
}

Usage Examples:

import { Application } from "egg";

// Create application instance
const app = new Application({
  baseDir: '/path/to/app',
  mode: 'single'
});

// Set global locals for view rendering
app.locals = {
  title: 'My Egg App',
  version: '1.0.0'
};

// Run background task
app.runInBackground(async (ctx) => {
  // Background processing logic
  await processLargeDataset();
});

// Handle server setup
app.on('server', (server) => {
  app.onServer(server);
  console.log('Server configured');
});

Agent Class

Agent worker class that extends EggApplicationCore, designed for background tasks and inter-process communication.

/**
 * Singleton instance in Agent Worker, extends EggApplicationCore
 * @param options - Configuration options for the agent
 */
class Agent extends EggApplicationCore {
  constructor(options?: Omit<EggApplicationCoreOptions, 'type'>);
  
  /** Close agent and cleanup resources */
  close(): Promise<void>;
}

Usage Examples:

import { Agent } from "egg";

// Create agent instance
const agent = new Agent({
  baseDir: '/path/to/app',
  mode: 'cluster'
});

// Agent automatically handles background tasks
await agent.ready();

// Cleanup when shutting down
process.on('SIGTERM', async () => {
  await agent.close();
});

EggApplicationCore Class

Base functionality shared between Application and Agent instances.

/**
 * Core application functionality based on EggCore
 */
class EggApplicationCore extends EggCore {
  declare options: Required<EggApplicationCoreOptions>;
  
  /** Base context class for controllers/services */
  BaseContextClass: typeof BaseContextClass;
  
  /** Alias for BaseContextClass */
  Controller: typeof BaseContextClass;
  Service: typeof BaseContextClass;
  Subscription: typeof BaseContextClass;
  
  /** HTTP client classes */
  HttpClient: typeof HttpClient;
  ContextHttpClient: typeof ContextHttpClient;
  
  /** Inter-process messenger */
  readonly messenger: IMessenger;
  
  /** Agent reference (in application) or application reference (in agent) */
  agent?: Agent;
  application?: Application;
  
  /** Component loader */
  declare loader: EggApplicationLoader;
  
  /** Make HTTP request using app's HTTP client */
  curl<T = any>(url: HttpClientRequestURL, options?: HttpClientRequestOptions): Promise<HttpClientResponse<T>>;
  
  /** Create new HTTP client instance */
  createHttpClient(options?: HttpClientOptions): HttpClient;
  
  /** Get HTTP client instance (lazy-loaded) */
  get httpClient(): HttpClient;
  
  /** Wrap client class with cluster leader/follower pattern */
  clusterWrapper(clientClass: unknown, options?: object): any;
  
  /** Get all logger instances */
  get loggers(): EggLoggers;
  
  /** Get logger by name */
  getLogger(name: string): EggLogger;
  
  /** Application logger */
  get logger(): EggLogger;
  
  /** Core framework logger */
  get coreLogger(): EggLogger;
  
  /** Create anonymous context for testing/background tasks */
  createAnonymousContext(req?: any): Context;
  
  /** Run function in anonymous context scope */
  runInAnonymousContextScope(scope: (ctx: Context) => Promise<void>, req?: unknown): Promise<void>;
  
  /** Create request context from HTTP request/response */
  createContext(req: IncomingMessage, res: ServerResponse): Context;
  
  /** Get inspectable application information */
  inspect(): any;
  
  /** Get configuration object for dumping */
  dumpConfigToObject(): { config: any; meta: any };
  
  /** Get cluster wrapper function */
  get cluster(): (clientClass: unknown, options?: object) => any;
}

Usage Examples:

// Access loggers
app.logger.info('Application started');
app.coreLogger.debug('Debug information');

// Make HTTP requests
const response = await app.curl('https://api.example.com/data', {
  method: 'GET',
  dataType: 'json'
});

// Create anonymous context for background tasks
const ctx = app.createAnonymousContext({
  query: { userId: '123' }
});

// Run function in context scope
await app.runInAnonymousContextScope(async (ctx) => {
  const user = await ctx.service.user.findById(ctx.query.userId);
  console.log('User:', user);
});

// Create cluster client
const apiClient = app.clusterWrapper(ApiClient, {
  responseTimeout: 5000
});

Types

interface EggApplicationCoreOptions extends Omit<EggCoreOptions, 'baseDir'> {
  /** Process mode: cluster or single */
  mode?: 'cluster' | 'single';
  /** Port for cluster communication */
  clusterPort?: number;
  /** Application base directory */
  baseDir?: string;
}

interface ClientErrorResponse {
  body: string | Buffer;
  status: number;
  headers: { [key: string]: string };
}