@dynamic-mock-server/cli
v0.1.0-beta
Published
Interactive CLI for Dynamic Mock Server
Downloads
80
Maintainers
Readme
@dynamic-mock-server/cli
Interactive and command-line interface for the Dynamic Mock Server
Intuitive CLI for managing your mock server in real-time. Features both an interactive mode powered by @clack/prompts and a command mode powered by Commander.js for scriptable automation.
Features
- 🎨 Interactive Mode: Beautiful UI with @clack/prompts for navigation
- ⚙️ Command Mode: Scriptable CLI powered by Commander.js
- 🔄 Hot Management: Change suites and responses without restart
- 📊 Real-time Status: View server stats, routes, and configuration
- 🎯 Suite Control: Switch between route suites on the fly
- 🔧 Route Overrides: Override individual route responses
- 💻 Programmatic API: Use CLI classes in your own code
- 🌈 Colored Output: Clear, colorful terminal UI with picocolors
Installation
pnpm add @dynamic-mock-server/cliFor global installation:
pnpm add -g @dynamic-mock-server/cliQuick Start
Interactive Mode
Launch the beautiful interactive interface:
dynamic-mock-server interactive
# or shorthand
dynamic-mock-server iFeatures:
- Arrow key navigation
- Real-time status display
- View configuration
- Change active suite
- List and manage routes
- Override route responses
- Restart server
- View alerts
- Graceful exit
Command Mode
Use commands for scriptable automation:
# Start server
dynamic-mock-server start
# View status
dynamic-mock-server status
# Suite management
dynamic-mock-server suites list
dynamic-mock-server suites set happy-path
dynamic-mock-server suites clear
# Route management
dynamic-mock-server routes list
dynamic-mock-server routes set get-users error
dynamic-mock-server routes clear get-users
# Server control
dynamic-mock-server restart
dynamic-mock-server stopCLI Commands
Server Management
start
Start the mock server.
dynamic-mock-server startOptions:
-p, --port <number>- Server port (overrides config)-h, --host <string>- Server host (overrides config)--no-interactive- Disable interactive mode (show logs)
Examples:
dynamic-mock-server start
dynamic-mock-server start -p 8080
dynamic-mock-server start -h 0.0.0.0
dynamic-mock-server start --no-interactiveNote: Interactive mode disables server logs for clean UI. Use
--no-interactiveto see full logs.
status
Display current server information.
dynamic-mock-server statusDisplays:
- Running status
- Server URL
- Active suite
- Total routes, responses, and suites
- Active alerts
restart
Restart the server.
dynamic-mock-server restartstop
Stop the server gracefully.
dynamic-mock-server stopInteractive Mode
interactive or i
Enter interactive mode for real-time management.
dynamic-mock-server interactive
# or
dynamic-mock-server iRoutes Suites
suites list
List all available routes suites.
dynamic-mock-server suites listsuites set <suiteId>
Set the active routes suite.
dynamic-mock-server suites set happy-path
dynamic-mock-server suites set error-scenariossuites clear
Clear the active suite (no default responses).
dynamic-mock-server suites clearRoutes
routes list
List all available routes with their responses.
dynamic-mock-server routes listroutes set <routeId> <responseId>
Override a specific route's response.
dynamic-mock-server routes set get-users error
dynamic-mock-server routes set get-products emptyroutes clear <routeId>
Clear a route override (revert to suite default).
dynamic-mock-server routes clear get-usersProgrammatic Usage
Use CLI classes in your own application:
import { CLI, InteractiveCLI } from "@dynamic-mock-server/cli";
import { Core } from "@dynamic-mock-server/core";
// Create core instance
const core = new Core();
// Option 1: Use CLI class programmatically
const cli = new CLI({ core });
// Start server
await cli.start();
// Change active suite
await cli.changeSuite("happy-path");
// Override route response
await cli.setRouteResponse("get-users", "error");
// Restart server
await cli.restartServer();
// Option 2: Use Interactive CLI
const interactiveCLI = new InteractiveCLI(core);
await interactiveCLI.start();Interactive Mode Features
When using dynamic-mock-server interactive, you get:
Main Menu Options
- 📊 Show server status - Display server URL, active suite, route counts
- 🔧 View configuration - See current config settings
- 🗂️ Change routes suite - Select from available suites
- 📝 View routes - List all routes with methods and URLs
- 🎯 Override route response - Set specific route responses
- 🔄 Restart server - Restart without losing context
- ⚠️ View alerts - Check for warnings or errors
- 🚪 Exit - Gracefully exit the CLI
Interactive Navigation
- Arrow keys to navigate options
- Enter/Return to select
- Ctrl+C or ESC to go back or cancel
- Clean, colorful output with visual feedback
API Reference
CLI Class
Base CLI class for programmatic server management.
Constructor
constructor(options: CLIOptions)CLIOptions:
core: Core- Core instance to manage
Methods
async start(): Promise<void>
Start the server.
await cli.start();async changeSuite(suiteId: string | null): Promise<void>
Change the active routes suite.
await cli.changeSuite("happy-path");
await cli.changeSuite(null); // Clear suiteasync setRouteResponse(routeId: string, responseId: string | null): Promise<void>
Override a specific route's response.
await cli.setRouteResponse("get-users", "error");
await cli.setRouteResponse("get-users", null); // Clear overrideasync restartServer(): Promise<void>
Restart the mock server.
await cli.restartServer();InteractiveCLI Class
Interactive CLI with @clack/prompts UI. Extends CLI class.
Constructor
constructor(core: Core)Parameters:
core: Core- Core instance to manage
Methods
async start(): Promise<void>
Start interactive mode with menu navigation.
const interactiveCLI = new InteractiveCLI(core);
await interactiveCLI.start();async stop(): Promise<void>
Stop interactive mode.
await interactiveCLI.stop();Examples
Basic CLI Usage
import { Core } from "@dynamic-mock-server/core";
import { CLI } from "@dynamic-mock-server/cli";
const core = new Core();
const cli = new CLI({ core });
// Start server
await cli.start();
// Show status
console.log("Server running!");
// Change suite after 5 seconds
setTimeout(async () => {
await cli.changeSuite("error-scenarios");
console.log("Switched to error scenarios");
}, 5000);Interactive CLI
import { Core } from "@dynamic-mock-server/core";
import { InteractiveCLI } from "@dynamic-mock-server/cli";
const core = new Core();
const interactiveCLI = new InteractiveCLI(core);
// Start interactive mode
await interactiveCLI.start();
// User can now navigate with arrow keys and manage serverCustom CLI Tool
#!/usr/bin/env node
import { Core } from "@dynamic-mock-server/core";
import { CLI } from "@dynamic-mock-server/cli";
const core = new Core();
const cli = new CLI({ core });
// Your custom logic
const args = process.argv.slice(2);
if (args[0] === "demo") {
// Add demo routes
core.mocksManager.addRoute({
id: "demo",
url: "/demo",
method: "GET",
responses: [{ id: "ok", status: 200, body: { demo: true } }],
});
}
await cli.start();
console.log("Demo server started!");Dependencies
@dynamic-mock-server/core- Core server functionality@clack/prompts- Interactive prompts for beautiful CLIcommander- Command-line argument parsingpicocolors- Terminal coloring
Configuration
The CLI respects the server configuration file (dynamicMockServer.config.{js,json,yaml}). See @dynamic-mock-server/config for details.
Related Packages
- @dynamic-mock-server/core - Core server that CLI manages
- @dynamic-mock-server/config - Configuration system
- @dynamic-mock-server/mocks-manager - Mock management
License
Apache-2.0 © Miguel Martínez
