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
 |