UNPKG

@git.zone/cli

Version:

A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.

188 lines (150 loc) 6.19 kB
# Gitzone CLI - Development Hints * the cli of the git.zone project. ## Project Overview Gitzone CLI (`@git.zone/cli`) is a comprehensive toolbelt for streamlining local development cycles. It provides utilities for: - Project initialization and templating (via smartscaf) - Code formatting and standardization - Version control and commit management - Docker and CI/CD integration - Meta project management ## Architecture ### Core Structure - Main CLI entry: `cli.ts` / `cli.child.ts` - Modular architecture with separate modules in `ts/mod_*` directories - Each module handles specific functionality (format, commit, docker, etc.) - Extensive use of plugins pattern via `plugins.ts` files ### Configuration Management - Uses `npmextra.json` for all tool configuration - Configuration stored under `gitzone` key in npmextra - No separate `.gitzonerc` file - everything in npmextra.json - Project type and module metadata also stored in npmextra ### Format Module (`mod_format`) - SIGNIFICANTLY ENHANCED The format module is responsible for project standardization: #### Current Modules: 1. **cleanup** - Removes obsolete files (yarn.lock, tslint.json, etc.) 2. **copy** - File copying with glob patterns (fully implemented) 3. **gitignore** - Creates/updates .gitignore from templates 4. **license** - Checks dependency licenses for compatibility 5. **npmextra** - Manages project metadata and configuration 6. **packagejson** - Formats and updates package.json 7. **prettier** - Applies code formatting with batching 8. **readme** - Ensures readme files exist 9. **templates** - Updates project templates based on type 10. **tsconfig** - Formats TypeScript configuration #### Execution Order (Dependency-Based): - Modules are now executed in parallel groups based on dependencies - Independent modules run concurrently for better performance - Dependency analyzer ensures correct execution order ### New Architecture Features 1. **BaseFormatter Pattern**: All formatters extend abstract BaseFormatter class 2. **FormatContext**: Central state management across all modules 3. **FormatPlanner**: Implements plan → action workflow 4. **RollbackManager**: Full backup/restore capabilities 5. **ChangeCache**: Tracks file changes to optimize performance 6. **DependencyAnalyzer**: Manages module execution order 7. **DiffReporter**: Generates diff views for changes 8. **FormatStats**: Comprehensive execution statistics ### Key Patterns 1. **Plugin Architecture**: All dependencies imported through `plugins.ts` files 2. **Streaming**: Uses smartstream for file processing 3. **Interactive Prompts**: smartinteract for user input 4. **Enhanced Error Handling**: Comprehensive try-catch with automatic rollback 5. **Template System**: Templates handled by smartscaf, not directly by gitzone 6. **Type Safety**: Full TypeScript with interfaces and type definitions ### Important Notes - `.nogit/` directory used for temporary/untracked files, backups, and cache - `.nogit/gitzone-backups/` stores format operation backups - `.nogit/gitzone-cache/` stores file change cache - Templates are managed by smartscaf - improvements should be made there - License checking configurable with exceptions support - All features implemented: `ensureDependency`, copy module, etc. ## Recent Improvements (Completed) 1. **Plan → Action Workflow**: Shows changes before applying them 2. **Rollback Mechanism**: Full backup and restore on failures 3. **Enhanced Configuration**: Granular control via npmextra.json 4. **Better Error Handling**: Detailed errors with recovery options 5. **Performance Optimizations**: Parallel execution and caching 6. **Reporting**: Diff views, statistics, verbose logging 7. **Architecture**: Clean separation of concerns with new classes ## Development Tips - Always check readme.plan.md for ongoing improvement plans - Use npmextra.json for any new configuration options - Keep modules focused and single-purpose - Maintain the existing plugin pattern for dependencies - Test format operations on sample projects before deploying - Consider backward compatibility when changing configuration structure - Use BaseFormatter pattern for new format modules - Leverage FormatContext for cross-module state sharing ## Configuration Examples ```json { "gitzone": { "format": { "interactive": true, "parallel": true, "showStats": true, "cache": { "enabled": true, "clean": true }, "rollback": { "enabled": true, "autoRollbackOnError": true, "backupRetentionDays": 7 }, "modules": { "skip": ["prettier"], "only": [], "order": [] }, "licenses": { "allowed": ["MIT", "Apache-2.0"], "exceptions": { "some-package": "GPL-3.0" } } } } } ``` ## CLI Usage ```bash # Basic format gitzone format # Dry run to preview changes gitzone format --dry-run # Non-interactive mode gitzone format --yes # Plan only (no execution) gitzone format --plan-only # Save plan for later gitzone format --save-plan format.json # Execute saved plan gitzone format --from-plan format.json # Verbose mode gitzone format --verbose # Detailed diff views gitzone format --detailed # Rollback operations gitzone format --rollback gitzone format --rollback <operation-id> gitzone format --list-backups gitzone format --clean-backups ``` ## Common Issues (Now Resolved) 1. ✅ Format operations are now reversible with rollback 2. ✅ Enhanced error messages with recovery suggestions 3. ✅ All modules fully implemented (including copy) 4. ✅ Dry-run capability available 5. ✅ Extensive configuration options available ## Future Considerations - Plugin system for custom formatters - Git hooks integration for pre-commit formatting - Advanced UI with interactive configuration - Format presets for common scenarios - Performance benchmarking tools ## API Changes - smartfile API updated to use fs.* and memory.* namespaces - smartnpm requires instance creation: `new NpmRegistry()` - All file operations now use updated APIs - Type imports use `import type` for proper verbatim module syntax