194 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 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
 |