CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-egg-bin

Developer tool for Egg.js framework providing development server, testing, coverage, and debugging capabilities

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

base-command.mddocs/

Base Command Framework

The base command framework provides the foundational functionality for all egg-bin commands, including process management, requirement handling, and graceful shutdown capabilities.

Capabilities

BaseCommand Abstract Class

Abstract base class that all egg-bin commands extend, providing common functionality and standardized interfaces.

/**
 * Abstract base command class for all egg-bin commands
 * Provides common functionality including process forking and requirement handling
 */
abstract class BaseCommand extends Command {
  /** Whether to show full command script only, default false */
  dryRun: boolean;
  
  /** Array of modules to require, supports multiple values */
  require: string[];
  
  /** Injected command context from Artus CLI */
  ctx: CommandContext;
  
  /** Injected utilities from Artus CLI */
  utils: Utils;
  
  /** Application base directory getter */
  protected get base(): string;
  
  /**
   * Run method with default help redirection implementation
   * Individual commands override this with their specific logic
   */
  run(): Promise<void>;
  
  /**
   * Formats require modules from command options and package.json
   * Combines --require options with pkg.egg.require configuration
   * @returns Promise resolving to array of module paths to require
   */
  protected formatRequires(): Promise<string[]>;
  
  /**
   * Forks a Node.js process with graceful shutdown handling
   * Includes dry-run support and comprehensive error handling
   * @param modulePath - Path to the module to execute
   * @param args - Arguments to pass to the forked process
   * @param options - Fork options, merged with defaults
   * @returns Promise that resolves when process exits successfully
   */
  protected forkNode(
    modulePath: string, 
    args: string[], 
    options?: ForkOptions
  ): Promise<void>;
}

Process Management

Comprehensive process management with graceful shutdown and error handling:

/**
 * Process management and graceful shutdown system
 * Handles child process lifecycle and signal propagation
 */
interface ProcessManagement {
  /** Set of active child processes */
  childs: Set<ChildProcess>;
  
  /** Hook status for signal handlers */
  hadHook: boolean;
  
  /** Signal handling for graceful shutdown */
  signals: ['SIGINT', 'SIGQUIT', 'SIGTERM'];
  
  /**
   * Registers child process for graceful shutdown
   * @param proc - Child process to track
   */
  gracefull(proc: ChildProcess): void;
  
  /** Process exit handler that kills all children */
  exitHandler(code: number): void;
}

Fork Options

Comprehensive forking configuration with environment and execution argument support:

/**
 * Node.js process forking configuration
 * Extends Node.js ForkOptions with egg-bin specific defaults
 */
interface EnhancedForkOptions extends ForkOptions {
  /** Process stdio configuration, default 'inherit' */
  stdio: 'inherit';
  
  /** Environment variables, inherits from command context */
  env: Record<string, any>;
  
  /** Working directory, defaults to base directory */
  cwd: string;
  
  /** Execution arguments for Node.js */
  execArgv: string[];
}

Error Handling

Specialized error handling for command execution failures:

/**
 * Fork-specific error class with exit code information
 * Provides detailed error context for process failures
 */
class ForkError extends Error {
  /** Process exit code, null if killed by signal */
  code: number | null;
  
  /**
   * Creates a fork error with exit code context
   * @param message - Error message describing the failure
   * @param code - Process exit code
   */
  constructor(message: string, code: number | null);
}

Requirement Management

Module requirement system supporting both command-line and package.json configuration:

/**
 * Module requirement management system
 * Handles --require options and package.json egg.require configuration
 */
interface RequirementManagement {
  /** Command-line require options */
  cliRequires: string[];
  
  /** Package.json egg.require configuration */
  pkgRequires: string | string[];
  
  /** Combined requirements array */
  allRequires: string[];
  
  /**
   * Formats and combines all requirement sources
   * @returns Promise resolving to array of module paths
   */
  formatRequires(): Promise<string[]>;
}

Usage Examples:

# Single require module
egg-bin dev --require ./setup.js

# Multiple require modules  
egg-bin test --require ./setup.js --require ./mocks.js

# Package.json configuration
{
  "egg": {
    "require": ["./app/extend/helper.js", "./test/setup.js"]
  }
}

Dry Run Support

Dry run functionality for command validation and debugging:

/**
 * Dry run execution mode
 * Shows command that would be executed without running it
 */
interface DryRunSupport {
  /** Dry run flag */
  dryRun: boolean;
  
  /** Command preview format */
  previewFormat: string;  // '$ {execPath} {modulePath} {args}'
  
  /**
   * Displays command without execution
   * @param execPath - Node.js executable path
   * @param modulePath - Module to execute
   * @param args - Command arguments
   */
  showCommand(execPath: string, modulePath: string, args: string[]): void;
}

Context Integration

Deep integration with Artus CLI context and utilities:

/**
 * Artus CLI framework integration
 * Provides access to command context, utilities, and framework features
 */
interface ContextIntegration {
  /** Command execution context */
  ctx: CommandContext;
  
  /** Artus utilities */
  utils: Utils;
  
  /** Command arguments and options */
  args: Record<string, any>;
  
  /** Environment variables */
  env: Record<string, any>;
  
  /** Current working directory */
  cwd: string;
  
  /** Package.json egg configuration */
  pkgEgg: Record<string, any>;
}

Debug Integration

Built-in debugging support with Node.js debuglog integration:

/**
 * Debug logging integration
 * Uses Node.js debuglog for conditional logging
 */
interface DebugIntegration {
  /** Debug logger instance */
  debug: debug.Debugger;  // debuglog('egg-bin:base')
  
  /** Debug categories */
  categories: [
    'egg-bin:base',
    'egg-bin:dev', 
    'egg-bin:test',
    'egg-bin:middleware:*'
  ];
  
  /** Enable debugging via NODE_DEBUG environment */
  enableDebugging: 'NODE_DEBUG=egg-bin:*';
}

Execution Flow

Standard execution flow for all commands:

/**
 * Command execution flow
 * Standardized lifecycle for all egg-bin commands
 */
interface ExecutionFlow {
  /** Pre-execution setup */
  setup: [
    'Parse command arguments',
    'Load package.json configuration', 
    'Format requirements',
    'Setup environment variables'
  ];
  
  /** Main execution */
  execution: [
    'Validate configuration',
    'Prepare arguments',
    'Fork child process',
    'Monitor process'
  ];
  
  /** Post-execution cleanup */
  cleanup: [
    'Handle process exit',
    'Clean up resources',
    'Report results'
  ];
}

Command Registration

Integration with Artus CLI command registration system:

/**
 * Command registration and discovery
 * Uses Artus CLI decorators for automatic command registration
 */
interface CommandRegistration {
  /** DefineCommand decorator configuration */
  commandConfig: {
    command: string;     // Command name and arguments
    description: string; // Help description
    alias?: string[];    // Command aliases
  };
  
  /** Option decorator configuration */
  optionConfig: {
    description: string;  // Option description
    alias?: string | string[];  // Option aliases
    type?: string;       // Option type
    default?: any;       // Default value
    array?: boolean;     // Array support
  };
}

Install with Tessl CLI

npx tessl i tessl/npm-egg-bin

docs

base-command.md

coverage-testing.md

debug-command.md

development-server.md

index.md

test-runner.md

tile.json