smartlog/readme.plan.md

3.2 KiB

Smartlog Interactive Console Features Plan

Overview

This document outlines the plan for enhancing the console output capabilities of @push.rocks/smartlog by creating a comprehensive interactive console module. This involves renaming the current ts_source_ora module to ts_source_interactive, implementing our own spinner functionality (removing the ora dependency), and adding new features like progress bars and other interactive elements.

Implementation Steps

1. Rename and Restructure

  • Rename directory from ts_source_ora to ts_source_interactive
  • Update all imports, exports, and references
  • Update package.json exports to reflect new module name
  • Maintain backward compatibility through proper export paths

2. Custom Spinner Implementation

  • Create a native spinner implementation to replace ora dependency
  • Implement spinner frames and animation timing
  • Maintain API compatibility with current spinner methods:
    • text(textArg) - Set text and start spinner
    • stop() - Stop the spinner
    • finishSuccess(textArg?) - Mark as succeeded
    • finishFail(textArg?) - Mark as failed
    • successAndNext(textArg) - Success and start new spinner
    • failAndNext(textArg) - Fail and start new spinner
  • Add spinner customization options (speed, frames, colors)

3. Progress Bar Implementation

  • Create a progress bar component with the following features:
    • Configurable width and style
    • Percentage display
    • ETA calculation
    • Current/total value display
    • Custom formatting
    • Theming support
    • Methods for incrementing and updating

4. Additional Interactive Features

  • Add indeterminate progress indicator
  • Add multi-line status display
  • Add table formatting for structured data
  • Add interactive prompts/confirmations

5. Testing

  • Update existing tests to work with new implementation
  • Add tests for new progress bar functionality
  • Add tests for additional interactive features
  • Ensure consistent behavior across platforms

6. Documentation

  • Update README with examples of new features
  • Add API documentation for all new methods
  • Include usage examples

Implementation Details

Progress Bar API

// Creating a progress bar
const progressBar = new SmartlogProgressBar({
  total: 100,
  width: 40,
  complete: '=',
  incomplete: ' ',
  renderThrottle: 100, // ms
  clearOnComplete: false,
  showEta: true
});

// Updating a progress bar
progressBar.update(50); // Update to 50%
progressBar.increment(10); // Increment by 10
progressBar.complete(); // Mark as complete

Spinner API (maintains compatibility)

// Current API (to be maintained)
const spinner = new SmartlogSourceInteractive();
spinner.text('Loading data');
spinner.finishSuccess('Data loaded successfully');

// New additions
spinner.setSpinnerStyle('dots'); // Change spinner style
spinner.setColor('green'); // Change color

Benefits

  • Remove external dependency (ora) for better control and smaller bundle size
  • Provide more interactive console features for improved user experience
  • Maintain consistent API styling across all smartlog modules
  • Improve testability with custom implementation
  • Enable more advanced terminal interactions