@git.zone/cli 1.15.5 → 1.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/gitzone.cli.js +26 -2
  3. package/dist_ts/gitzone.logging.d.ts +3 -0
  4. package/dist_ts/gitzone.logging.js +20 -2
  5. package/dist_ts/mod_format/classes.baseformatter.d.ts +21 -0
  6. package/dist_ts/mod_format/classes.baseformatter.js +73 -0
  7. package/dist_ts/mod_format/classes.changecache.d.ts +25 -0
  8. package/dist_ts/mod_format/classes.changecache.js +105 -0
  9. package/dist_ts/mod_format/classes.dependency-analyzer.d.ts +13 -0
  10. package/dist_ts/mod_format/classes.dependency-analyzer.js +87 -0
  11. package/dist_ts/mod_format/classes.diffreporter.d.ts +13 -0
  12. package/dist_ts/mod_format/classes.diffreporter.js +94 -0
  13. package/dist_ts/mod_format/classes.formatcontext.d.ts +19 -0
  14. package/dist_ts/mod_format/classes.formatcontext.js +51 -0
  15. package/dist_ts/mod_format/classes.formatplanner.d.ts +13 -0
  16. package/dist_ts/mod_format/classes.formatplanner.js +164 -0
  17. package/dist_ts/mod_format/classes.formatstats.d.ts +40 -0
  18. package/dist_ts/mod_format/classes.formatstats.js +161 -0
  19. package/dist_ts/mod_format/classes.rollbackmanager.d.ts +21 -0
  20. package/dist_ts/mod_format/classes.rollbackmanager.js +170 -0
  21. package/dist_ts/mod_format/format.copy.d.ts +22 -0
  22. package/dist_ts/mod_format/format.copy.js +66 -2
  23. package/dist_ts/mod_format/format.packagejson.js +48 -2
  24. package/dist_ts/mod_format/formatters/cleanup.formatter.d.ts +7 -0
  25. package/dist_ts/mod_format/formatters/cleanup.formatter.js +33 -0
  26. package/dist_ts/mod_format/formatters/copy.formatter.d.ts +4 -0
  27. package/dist_ts/mod_format/formatters/copy.formatter.js +8 -0
  28. package/dist_ts/mod_format/formatters/gitignore.formatter.d.ts +4 -0
  29. package/dist_ts/mod_format/formatters/gitignore.formatter.js +8 -0
  30. package/dist_ts/mod_format/formatters/legacy.formatter.d.ts +11 -0
  31. package/dist_ts/mod_format/formatters/legacy.formatter.js +29 -0
  32. package/dist_ts/mod_format/formatters/license.formatter.d.ts +4 -0
  33. package/dist_ts/mod_format/formatters/license.formatter.js +8 -0
  34. package/dist_ts/mod_format/formatters/npmextra.formatter.d.ts +4 -0
  35. package/dist_ts/mod_format/formatters/npmextra.formatter.js +8 -0
  36. package/dist_ts/mod_format/formatters/packagejson.formatter.d.ts +4 -0
  37. package/dist_ts/mod_format/formatters/packagejson.formatter.js +8 -0
  38. package/dist_ts/mod_format/formatters/prettier.formatter.d.ts +9 -0
  39. package/dist_ts/mod_format/formatters/prettier.formatter.js +111 -0
  40. package/dist_ts/mod_format/formatters/readme.formatter.d.ts +7 -0
  41. package/dist_ts/mod_format/formatters/readme.formatter.js +19 -0
  42. package/dist_ts/mod_format/formatters/templates.formatter.d.ts +4 -0
  43. package/dist_ts/mod_format/formatters/templates.formatter.js +8 -0
  44. package/dist_ts/mod_format/formatters/tsconfig.formatter.d.ts +4 -0
  45. package/dist_ts/mod_format/formatters/tsconfig.formatter.js +8 -0
  46. package/dist_ts/mod_format/index.d.ts +14 -1
  47. package/dist_ts/mod_format/index.js +202 -28
  48. package/dist_ts/mod_format/interfaces.format.d.ts +43 -0
  49. package/dist_ts/mod_format/interfaces.format.js +2 -0
  50. package/dist_ts/mod_format/mod.plugins.d.ts +5 -1
  51. package/dist_ts/mod_format/mod.plugins.js +6 -2
  52. package/package.json +2 -1
  53. package/readme.hints.md +187 -0
  54. package/readme.plan.md +170 -0
  55. package/ts/00_commitinfo_data.ts +1 -1
  56. package/ts/gitzone.cli.ts +29 -1
  57. package/ts/gitzone.logging.ts +23 -1
  58. package/ts/mod_format/classes.baseformatter.ts +93 -0
  59. package/ts/mod_format/classes.changecache.ts +144 -0
  60. package/ts/mod_format/classes.dependency-analyzer.ts +107 -0
  61. package/ts/mod_format/classes.diffreporter.ts +108 -0
  62. package/ts/mod_format/classes.formatcontext.ts +65 -0
  63. package/ts/mod_format/classes.formatplanner.ts +184 -0
  64. package/ts/mod_format/classes.formatstats.ts +209 -0
  65. package/ts/mod_format/classes.rollbackmanager.ts +218 -0
  66. package/ts/mod_format/format.copy.ts +77 -1
  67. package/ts/mod_format/format.packagejson.ts +50 -1
  68. package/ts/mod_format/formatters/cleanup.formatter.ts +39 -0
  69. package/ts/mod_format/formatters/copy.formatter.ts +8 -0
  70. package/ts/mod_format/formatters/gitignore.formatter.ts +8 -0
  71. package/ts/mod_format/formatters/legacy.formatter.ts +36 -0
  72. package/ts/mod_format/formatters/license.formatter.ts +8 -0
  73. package/ts/mod_format/formatters/npmextra.formatter.ts +8 -0
  74. package/ts/mod_format/formatters/packagejson.formatter.ts +8 -0
  75. package/ts/mod_format/formatters/prettier.formatter.ts +125 -0
  76. package/ts/mod_format/formatters/readme.formatter.ts +22 -0
  77. package/ts/mod_format/formatters/templates.formatter.ts +8 -0
  78. package/ts/mod_format/formatters/tsconfig.formatter.ts +8 -0
  79. package/ts/mod_format/index.ts +241 -33
  80. package/ts/mod_format/interfaces.format.ts +45 -0
  81. package/ts/mod_format/mod.plugins.ts +8 -0
@@ -1,32 +1,206 @@
1
1
  import * as plugins from './mod.plugins.js';
2
2
  import { Project } from '../classes.project.js';
3
- export let run = async (writeArg = true) => {
3
+ import { FormatContext } from './classes.formatcontext.js';
4
+ import { FormatPlanner } from './classes.formatplanner.js';
5
+ import { logger, setVerboseMode } from '../gitzone.logging.js';
6
+ // Import wrapper classes for formatters
7
+ import { CleanupFormatter } from './formatters/cleanup.formatter.js';
8
+ import { NpmextraFormatter } from './formatters/npmextra.formatter.js';
9
+ import { LicenseFormatter } from './formatters/license.formatter.js';
10
+ import { PackageJsonFormatter } from './formatters/packagejson.formatter.js';
11
+ import { TemplatesFormatter } from './formatters/templates.formatter.js';
12
+ import { GitignoreFormatter } from './formatters/gitignore.formatter.js';
13
+ import { TsconfigFormatter } from './formatters/tsconfig.formatter.js';
14
+ import { PrettierFormatter } from './formatters/prettier.formatter.js';
15
+ import { ReadmeFormatter } from './formatters/readme.formatter.js';
16
+ import { CopyFormatter } from './formatters/copy.formatter.js';
17
+ export let run = async (options = {}) => {
18
+ // Set verbose mode if requested
19
+ if (options.verbose) {
20
+ setVerboseMode(true);
21
+ }
4
22
  const project = await Project.fromCwd();
5
- // cleanup
6
- const formatCleanup = await import('./format.cleanup.js');
7
- await formatCleanup.run(project);
8
- // npmextra
9
- const formatNpmextra = await import('./format.npmextra.js');
10
- await formatNpmextra.run(project);
11
- // license
12
- const formatLicense = await import('./format.license.js');
13
- await formatLicense.run(project);
14
- // format package.json
15
- const formatPackageJson = await import('./format.packagejson.js');
16
- await formatPackageJson.run(project);
17
- // format .gitlab-ci.yml
18
- const formatTemplates = await import('./format.templates.js');
19
- await formatTemplates.run(project);
20
- // format .gitignore
21
- const formatGitignore = await import('./format.gitignore.js');
22
- await formatGitignore.run(project);
23
- // format TypeScript
24
- const formatTsConfig = await import('./format.tsconfig.js');
25
- await formatTsConfig.run(project);
26
- const formatPrettier = await import('./format.prettier.js');
27
- await formatPrettier.run(project);
28
- // format readme.md
29
- const formatReadme = await import('./format.readme.js');
30
- await formatReadme.run();
23
+ const context = new FormatContext();
24
+ await context.initializeCache(); // Initialize the cache system
25
+ const planner = new FormatPlanner();
26
+ // Get configuration from npmextra
27
+ const npmextraConfig = new plugins.npmextra.Npmextra();
28
+ const formatConfig = npmextraConfig.dataFor('gitzone.format', {
29
+ interactive: true,
30
+ showDiffs: false,
31
+ autoApprove: false,
32
+ planTimeout: 30000,
33
+ rollback: {
34
+ enabled: true,
35
+ autoRollbackOnError: true,
36
+ backupRetentionDays: 7,
37
+ maxBackupSize: '100MB',
38
+ excludePatterns: ['node_modules/**', '.git/**']
39
+ },
40
+ modules: {
41
+ skip: [],
42
+ only: [],
43
+ order: []
44
+ },
45
+ parallel: true,
46
+ cache: {
47
+ enabled: true,
48
+ clean: true // Clean invalid entries from cache
49
+ }
50
+ });
51
+ // Clean cache if configured
52
+ if (formatConfig.cache.clean) {
53
+ await context.getChangeCache().clean();
54
+ }
55
+ // Override config with command options
56
+ const interactive = options.interactive ?? formatConfig.interactive;
57
+ const autoApprove = options.yes ?? formatConfig.autoApprove;
58
+ const parallel = options.parallel ?? formatConfig.parallel;
59
+ try {
60
+ // Initialize formatters
61
+ const formatters = [
62
+ new CleanupFormatter(context, project),
63
+ new NpmextraFormatter(context, project),
64
+ new LicenseFormatter(context, project),
65
+ new PackageJsonFormatter(context, project),
66
+ new TemplatesFormatter(context, project),
67
+ new GitignoreFormatter(context, project),
68
+ new TsconfigFormatter(context, project),
69
+ new PrettierFormatter(context, project),
70
+ new ReadmeFormatter(context, project),
71
+ new CopyFormatter(context, project),
72
+ ];
73
+ // Filter formatters based on configuration
74
+ const activeFormatters = formatters.filter(formatter => {
75
+ if (formatConfig.modules.only.length > 0) {
76
+ return formatConfig.modules.only.includes(formatter.name);
77
+ }
78
+ if (formatConfig.modules.skip.includes(formatter.name)) {
79
+ return false;
80
+ }
81
+ return true;
82
+ });
83
+ // Plan phase
84
+ logger.log('info', 'Analyzing project for format operations...');
85
+ let plan = options.fromPlan
86
+ ? JSON.parse(await plugins.smartfile.fs.toStringSync(options.fromPlan))
87
+ : await planner.planFormat(activeFormatters);
88
+ // Display plan
89
+ await planner.displayPlan(plan, options.detailed);
90
+ // Save plan if requested
91
+ if (options.savePlan) {
92
+ await plugins.smartfile.memory.toFs(JSON.stringify(plan, null, 2), options.savePlan);
93
+ logger.log('info', `Plan saved to ${options.savePlan}`);
94
+ }
95
+ // Exit if plan-only mode
96
+ if (options.planOnly) {
97
+ return;
98
+ }
99
+ // Dry-run mode
100
+ if (options.dryRun) {
101
+ logger.log('info', 'Dry-run mode - no changes will be made');
102
+ return;
103
+ }
104
+ // Interactive confirmation
105
+ if (interactive && !autoApprove) {
106
+ const interactInstance = new plugins.smartinteract.SmartInteract();
107
+ const response = await interactInstance.askQuestion({
108
+ type: 'confirm',
109
+ name: 'proceed',
110
+ message: 'Proceed with formatting?',
111
+ default: true
112
+ });
113
+ if (!response.proceed) {
114
+ logger.log('info', 'Format operation cancelled by user');
115
+ return;
116
+ }
117
+ }
118
+ // Execute phase
119
+ logger.log('info', `Executing format operations${parallel ? ' in parallel' : ' sequentially'}...`);
120
+ await planner.executePlan(plan, activeFormatters, context, parallel);
121
+ // Finish statistics tracking
122
+ context.getFormatStats().finish();
123
+ // Display statistics
124
+ const showStats = npmextraConfig.dataFor('gitzone.format.showStats', true);
125
+ if (showStats) {
126
+ context.getFormatStats().displayStats();
127
+ }
128
+ // Save stats if requested
129
+ if (options.detailed) {
130
+ const statsPath = `.nogit/format-stats-${Date.now()}.json`;
131
+ await context.getFormatStats().saveReport(statsPath);
132
+ }
133
+ logger.log('success', 'Format operations completed successfully!');
134
+ }
135
+ catch (error) {
136
+ logger.log('error', `Format operation failed: ${error.message}`);
137
+ // Automatic rollback if enabled
138
+ if (formatConfig.rollback.enabled && formatConfig.rollback.autoRollbackOnError) {
139
+ logger.log('info', 'Attempting automatic rollback...');
140
+ try {
141
+ await context.rollbackOperation();
142
+ logger.log('success', 'Rollback completed successfully');
143
+ }
144
+ catch (rollbackError) {
145
+ logger.log('error', `Rollback failed: ${rollbackError.message}`);
146
+ }
147
+ }
148
+ throw error;
149
+ }
31
150
  };
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfZm9ybWF0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWhELE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxLQUFLLEVBQUUsV0FBb0IsSUFBSSxFQUFnQixFQUFFO0lBQ2hFLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRXhDLFVBQVU7SUFDVixNQUFNLGFBQWEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzFELE1BQU0sYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVqQyxXQUFXO0lBQ1gsTUFBTSxjQUFjLEdBQUcsTUFBTSxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUM1RCxNQUFNLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFbEMsVUFBVTtJQUNWLE1BQU0sYUFBYSxHQUFHLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDMUQsTUFBTSxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRWpDLHNCQUFzQjtJQUN0QixNQUFNLGlCQUFpQixHQUFHLE1BQU0sTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDbEUsTUFBTSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFckMsd0JBQXdCO0lBQ3hCLE1BQU0sZUFBZSxHQUFHLE1BQU0sTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDOUQsTUFBTSxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRW5DLG9CQUFvQjtJQUNwQixNQUFNLGVBQWUsR0FBRyxNQUFNLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzlELE1BQU0sZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVuQyxvQkFBb0I7SUFDcEIsTUFBTSxjQUFjLEdBQUcsTUFBTSxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUM1RCxNQUFNLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsTUFBTSxjQUFjLEdBQUcsTUFBTSxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUM1RCxNQUFNLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFbEMsbUJBQW1CO0lBQ25CLE1BQU0sWUFBWSxHQUFHLE1BQU0sTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDeEQsTUFBTSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDM0IsQ0FBQyxDQUFDIn0=
151
+ // Export CLI command handlers
152
+ export const handleRollback = async (operationId) => {
153
+ const context = new FormatContext();
154
+ const rollbackManager = context.getRollbackManager();
155
+ if (!operationId) {
156
+ // Rollback to last operation
157
+ const backups = await rollbackManager.listBackups();
158
+ const lastOperation = backups
159
+ .filter(op => op.status !== 'rolled-back')
160
+ .sort((a, b) => b.timestamp - a.timestamp)[0];
161
+ if (!lastOperation) {
162
+ logger.log('warn', 'No operations available for rollback');
163
+ return;
164
+ }
165
+ operationId = lastOperation.id;
166
+ }
167
+ try {
168
+ await rollbackManager.rollback(operationId);
169
+ logger.log('success', `Successfully rolled back operation ${operationId}`);
170
+ }
171
+ catch (error) {
172
+ logger.log('error', `Rollback failed: ${error.message}`);
173
+ throw error;
174
+ }
175
+ };
176
+ export const handleListBackups = async () => {
177
+ const context = new FormatContext();
178
+ const rollbackManager = context.getRollbackManager();
179
+ const backups = await rollbackManager.listBackups();
180
+ if (backups.length === 0) {
181
+ logger.log('info', 'No backup operations found');
182
+ return;
183
+ }
184
+ console.log('\nAvailable backups:');
185
+ console.log('━'.repeat(50));
186
+ for (const backup of backups) {
187
+ const date = new Date(backup.timestamp).toLocaleString();
188
+ const status = backup.status;
189
+ const filesCount = backup.files.length;
190
+ console.log(`ID: ${backup.id}`);
191
+ console.log(`Date: ${date}`);
192
+ console.log(`Status: ${status}`);
193
+ console.log(`Files: ${filesCount}`);
194
+ console.log('─'.repeat(50));
195
+ }
196
+ };
197
+ export const handleCleanBackups = async () => {
198
+ const context = new FormatContext();
199
+ const rollbackManager = context.getRollbackManager();
200
+ // Get retention days from config
201
+ const npmextraConfig = new plugins.npmextra.Npmextra();
202
+ const retentionDays = npmextraConfig.dataFor('gitzone.format.rollback.backupRetentionDays', 7);
203
+ await rollbackManager.cleanOldBackups(retentionDays);
204
+ logger.log('success', `Cleaned backups older than ${retentionDays} days`);
205
+ };
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfZm9ybWF0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvRCx3Q0FBd0M7QUFDeEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUvRCxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsS0FBSyxFQUFFLFVBVXBCLEVBQUUsRUFBZ0IsRUFBRTtJQUN0QixnQ0FBZ0M7SUFDaEMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENB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
@@ -0,0 +1,43 @@
1
+ export type IFormatOperation = {
2
+ id: string;
3
+ timestamp: number;
4
+ files: Array<{
5
+ path: string;
6
+ originalContent: string;
7
+ checksum: string;
8
+ permissions: string;
9
+ }>;
10
+ status: 'pending' | 'in-progress' | 'completed' | 'failed' | 'rolled-back';
11
+ error?: Error;
12
+ };
13
+ export type IFormatPlan = {
14
+ summary: {
15
+ totalFiles: number;
16
+ filesAdded: number;
17
+ filesModified: number;
18
+ filesRemoved: number;
19
+ estimatedTime: number;
20
+ };
21
+ changes: Array<{
22
+ type: 'create' | 'modify' | 'delete';
23
+ path: string;
24
+ module: string;
25
+ description: string;
26
+ diff?: string;
27
+ size?: number;
28
+ }>;
29
+ warnings: Array<{
30
+ level: 'info' | 'warning' | 'error';
31
+ message: string;
32
+ module: string;
33
+ }>;
34
+ };
35
+ export type IPlannedChange = {
36
+ type: 'create' | 'modify' | 'delete';
37
+ path: string;
38
+ module: string;
39
+ description: string;
40
+ content?: string;
41
+ diff?: string;
42
+ size?: number;
43
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5mb3JtYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfZm9ybWF0L2ludGVyZmFjZXMuZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -1,4 +1,6 @@
1
1
  export * from '../plugins.js';
2
+ import * as crypto from 'crypto';
3
+ import * as path from 'path';
2
4
  import * as lik from '@push.rocks/lik';
3
5
  import * as smartfile from '@push.rocks/smartfile';
4
6
  import * as smartgulp from '@push.rocks/smartgulp';
@@ -8,4 +10,6 @@ import * as smartobject from '@push.rocks/smartobject';
8
10
  import * as smartnpm from '@push.rocks/smartnpm';
9
11
  import * as smartstream from '@push.rocks/smartstream';
10
12
  import * as through2 from 'through2';
11
- export { lik, smartfile, smartgulp, smartinteract, smartlegal, smartobject, smartnpm, smartstream, through2, };
13
+ import * as npmextra from '@push.rocks/npmextra';
14
+ import * as smartdiff from '@push.rocks/smartdiff';
15
+ export { crypto, path, lik, smartfile, smartgulp, smartinteract, smartlegal, smartobject, smartnpm, smartstream, through2, npmextra, smartdiff, };
@@ -1,4 +1,6 @@
1
1
  export * from '../plugins.js';
2
+ import * as crypto from 'crypto';
3
+ import * as path from 'path';
2
4
  import * as lik from '@push.rocks/lik';
3
5
  import * as smartfile from '@push.rocks/smartfile';
4
6
  import * as smartgulp from '@push.rocks/smartgulp';
@@ -8,5 +10,7 @@ import * as smartobject from '@push.rocks/smartobject';
8
10
  import * as smartnpm from '@push.rocks/smartnpm';
9
11
  import * as smartstream from '@push.rocks/smartstream';
10
12
  import * as through2 from 'through2';
11
- export { lik, smartfile, smartgulp, smartinteract, smartlegal, smartobject, smartnpm, smartstream, through2, };
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfZm9ybWF0L21vZC5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBRTlCLE9BQU8sS0FBSyxHQUFHLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxhQUFhLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUVyQyxPQUFPLEVBQ0wsR0FBRyxFQUNILFNBQVMsRUFDVCxTQUFTLEVBQ1QsYUFBYSxFQUNiLFVBQVUsRUFDVixXQUFXLEVBQ1gsUUFBUSxFQUNSLFdBQVcsRUFDWCxRQUFRLEdBQ1QsQ0FBQyJ9
13
+ import * as npmextra from '@push.rocks/npmextra';
14
+ import * as smartdiff from '@push.rocks/smartdiff';
15
+ export { crypto, path, lik, smartfile, smartgulp, smartinteract, smartlegal, smartobject, smartnpm, smartstream, through2, npmextra, smartdiff, };
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfZm9ybWF0L21vZC5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBRTlCLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxHQUFHLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxhQUFhLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNyQyxPQUFPLEtBQUssUUFBUSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxFQUNMLE1BQU0sRUFDTixJQUFJLEVBQ0osR0FBRyxFQUNILFNBQVMsRUFDVCxTQUFTLEVBQ1QsYUFBYSxFQUNiLFVBQVUsRUFDVixXQUFXLEVBQ1gsUUFBUSxFQUNSLFdBQVcsRUFDWCxRQUFRLEVBQ1IsUUFBUSxFQUNSLFNBQVMsR0FDVixDQUFDIn0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@git.zone/cli",
3
3
  "private": false,
4
- "version": "1.15.5",
4
+ "version": "1.16.0",
5
5
  "description": "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.",
6
6
  "main": "dist_ts/index.ts",
7
7
  "typings": "dist_ts/index.d.ts",
@@ -42,6 +42,7 @@
42
42
  "@git.zone/tsbuild": "^2.3.2",
43
43
  "@git.zone/tsrun": "^1.3.3",
44
44
  "@git.zone/tstest": "^1.0.96",
45
+ "@push.rocks/smartdiff": "^1.0.3",
45
46
  "@types/node": "^22.15.18"
46
47
  },
47
48
  "dependencies": {
package/readme.hints.md CHANGED
@@ -1 +1,188 @@
1
+ # Gitzone CLI - Development Hints
2
+
1
3
  * the cli of the git.zone project.
4
+
5
+ ## Project Overview
6
+
7
+ Gitzone CLI (`@git.zone/cli`) is a comprehensive toolbelt for streamlining local development cycles. It provides utilities for:
8
+ - Project initialization and templating (via smartscaf)
9
+ - Code formatting and standardization
10
+ - Version control and commit management
11
+ - Docker and CI/CD integration
12
+ - Meta project management
13
+
14
+ ## Architecture
15
+
16
+ ### Core Structure
17
+ - Main CLI entry: `cli.ts` / `cli.child.ts`
18
+ - Modular architecture with separate modules in `ts/mod_*` directories
19
+ - Each module handles specific functionality (format, commit, docker, etc.)
20
+ - Extensive use of plugins pattern via `plugins.ts` files
21
+
22
+ ### Configuration Management
23
+ - Uses `npmextra.json` for all tool configuration
24
+ - Configuration stored under `gitzone` key in npmextra
25
+ - No separate `.gitzonerc` file - everything in npmextra.json
26
+ - Project type and module metadata also stored in npmextra
27
+
28
+ ### Format Module (`mod_format`) - SIGNIFICANTLY ENHANCED
29
+
30
+ The format module is responsible for project standardization:
31
+
32
+ #### Current Modules:
33
+ 1. **cleanup** - Removes obsolete files (yarn.lock, tslint.json, etc.)
34
+ 2. **copy** - File copying with glob patterns (fully implemented)
35
+ 3. **gitignore** - Creates/updates .gitignore from templates
36
+ 4. **license** - Checks dependency licenses for compatibility
37
+ 5. **npmextra** - Manages project metadata and configuration
38
+ 6. **packagejson** - Formats and updates package.json
39
+ 7. **prettier** - Applies code formatting with batching
40
+ 8. **readme** - Ensures readme files exist
41
+ 9. **templates** - Updates project templates based on type
42
+ 10. **tsconfig** - Formats TypeScript configuration
43
+
44
+ #### Execution Order (Dependency-Based):
45
+ - Modules are now executed in parallel groups based on dependencies
46
+ - Independent modules run concurrently for better performance
47
+ - Dependency analyzer ensures correct execution order
48
+
49
+ ### New Architecture Features
50
+
51
+ 1. **BaseFormatter Pattern**: All formatters extend abstract BaseFormatter class
52
+ 2. **FormatContext**: Central state management across all modules
53
+ 3. **FormatPlanner**: Implements plan → action workflow
54
+ 4. **RollbackManager**: Full backup/restore capabilities
55
+ 5. **ChangeCache**: Tracks file changes to optimize performance
56
+ 6. **DependencyAnalyzer**: Manages module execution order
57
+ 7. **DiffReporter**: Generates diff views for changes
58
+ 8. **FormatStats**: Comprehensive execution statistics
59
+
60
+ ### Key Patterns
61
+
62
+ 1. **Plugin Architecture**: All dependencies imported through `plugins.ts` files
63
+ 2. **Streaming**: Uses smartstream for file processing
64
+ 3. **Interactive Prompts**: smartinteract for user input
65
+ 4. **Enhanced Error Handling**: Comprehensive try-catch with automatic rollback
66
+ 5. **Template System**: Templates handled by smartscaf, not directly by gitzone
67
+ 6. **Type Safety**: Full TypeScript with interfaces and type definitions
68
+
69
+ ### Important Notes
70
+
71
+ - `.nogit/` directory used for temporary/untracked files, backups, and cache
72
+ - `.nogit/gitzone-backups/` stores format operation backups
73
+ - `.nogit/gitzone-cache/` stores file change cache
74
+ - Templates are managed by smartscaf - improvements should be made there
75
+ - License checking configurable with exceptions support
76
+ - All features implemented: `ensureDependency`, copy module, etc.
77
+
78
+ ## Recent Improvements (Completed)
79
+
80
+ 1. **Plan → Action Workflow**: Shows changes before applying them
81
+ 2. **Rollback Mechanism**: Full backup and restore on failures
82
+ 3. **Enhanced Configuration**: Granular control via npmextra.json
83
+ 4. **Better Error Handling**: Detailed errors with recovery options
84
+ 5. **Performance Optimizations**: Parallel execution and caching
85
+ 6. **Reporting**: Diff views, statistics, verbose logging
86
+ 7. **Architecture**: Clean separation of concerns with new classes
87
+
88
+ ## Development Tips
89
+
90
+ - Always check readme.plan.md for ongoing improvement plans
91
+ - Use npmextra.json for any new configuration options
92
+ - Keep modules focused and single-purpose
93
+ - Maintain the existing plugin pattern for dependencies
94
+ - Test format operations on sample projects before deploying
95
+ - Consider backward compatibility when changing configuration structure
96
+ - Use BaseFormatter pattern for new format modules
97
+ - Leverage FormatContext for cross-module state sharing
98
+
99
+ ## Configuration Examples
100
+
101
+ ```json
102
+ {
103
+ "gitzone": {
104
+ "format": {
105
+ "interactive": true,
106
+ "parallel": true,
107
+ "showStats": true,
108
+ "cache": {
109
+ "enabled": true,
110
+ "clean": true
111
+ },
112
+ "rollback": {
113
+ "enabled": true,
114
+ "autoRollbackOnError": true,
115
+ "backupRetentionDays": 7
116
+ },
117
+ "modules": {
118
+ "skip": ["prettier"],
119
+ "only": [],
120
+ "order": []
121
+ },
122
+ "licenses": {
123
+ "allowed": ["MIT", "Apache-2.0"],
124
+ "exceptions": {
125
+ "some-package": "GPL-3.0"
126
+ }
127
+ }
128
+ }
129
+ }
130
+ }
131
+ ```
132
+
133
+ ## CLI Usage
134
+
135
+ ```bash
136
+ # Basic format
137
+ gitzone format
138
+
139
+ # Dry run to preview changes
140
+ gitzone format --dry-run
141
+
142
+ # Non-interactive mode
143
+ gitzone format --yes
144
+
145
+ # Plan only (no execution)
146
+ gitzone format --plan-only
147
+
148
+ # Save plan for later
149
+ gitzone format --save-plan format.json
150
+
151
+ # Execute saved plan
152
+ gitzone format --from-plan format.json
153
+
154
+ # Verbose mode
155
+ gitzone format --verbose
156
+
157
+ # Detailed diff views
158
+ gitzone format --detailed
159
+
160
+ # Rollback operations
161
+ gitzone format --rollback
162
+ gitzone format --rollback <operation-id>
163
+ gitzone format --list-backups
164
+ gitzone format --clean-backups
165
+ ```
166
+
167
+ ## Common Issues (Now Resolved)
168
+
169
+ 1. ✅ Format operations are now reversible with rollback
170
+ 2. ✅ Enhanced error messages with recovery suggestions
171
+ 3. ✅ All modules fully implemented (including copy)
172
+ 4. ✅ Dry-run capability available
173
+ 5. ✅ Extensive configuration options available
174
+
175
+ ## Future Considerations
176
+
177
+ - Plugin system for custom formatters
178
+ - Git hooks integration for pre-commit formatting
179
+ - Advanced UI with interactive configuration
180
+ - Format presets for common scenarios
181
+ - Performance benchmarking tools
182
+
183
+ ## API Changes
184
+
185
+ - smartfile API updated to use fs.* and memory.* namespaces
186
+ - smartnpm requires instance creation: `new NpmRegistry()`
187
+ - All file operations now use updated APIs
188
+ - Type imports use `import type` for proper verbatim module syntax