@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.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/gitzone.cli.js +26 -2
- package/dist_ts/gitzone.logging.d.ts +3 -0
- package/dist_ts/gitzone.logging.js +20 -2
- package/dist_ts/mod_format/classes.baseformatter.d.ts +21 -0
- package/dist_ts/mod_format/classes.baseformatter.js +73 -0
- package/dist_ts/mod_format/classes.changecache.d.ts +25 -0
- package/dist_ts/mod_format/classes.changecache.js +105 -0
- package/dist_ts/mod_format/classes.dependency-analyzer.d.ts +13 -0
- package/dist_ts/mod_format/classes.dependency-analyzer.js +87 -0
- package/dist_ts/mod_format/classes.diffreporter.d.ts +13 -0
- package/dist_ts/mod_format/classes.diffreporter.js +94 -0
- package/dist_ts/mod_format/classes.formatcontext.d.ts +19 -0
- package/dist_ts/mod_format/classes.formatcontext.js +51 -0
- package/dist_ts/mod_format/classes.formatplanner.d.ts +13 -0
- package/dist_ts/mod_format/classes.formatplanner.js +164 -0
- package/dist_ts/mod_format/classes.formatstats.d.ts +40 -0
- package/dist_ts/mod_format/classes.formatstats.js +161 -0
- package/dist_ts/mod_format/classes.rollbackmanager.d.ts +21 -0
- package/dist_ts/mod_format/classes.rollbackmanager.js +170 -0
- package/dist_ts/mod_format/format.copy.d.ts +22 -0
- package/dist_ts/mod_format/format.copy.js +66 -2
- package/dist_ts/mod_format/format.packagejson.js +48 -2
- package/dist_ts/mod_format/formatters/cleanup.formatter.d.ts +7 -0
- package/dist_ts/mod_format/formatters/cleanup.formatter.js +33 -0
- package/dist_ts/mod_format/formatters/copy.formatter.d.ts +4 -0
- package/dist_ts/mod_format/formatters/copy.formatter.js +8 -0
- package/dist_ts/mod_format/formatters/gitignore.formatter.d.ts +4 -0
- package/dist_ts/mod_format/formatters/gitignore.formatter.js +8 -0
- package/dist_ts/mod_format/formatters/legacy.formatter.d.ts +11 -0
- package/dist_ts/mod_format/formatters/legacy.formatter.js +29 -0
- package/dist_ts/mod_format/formatters/license.formatter.d.ts +4 -0
- package/dist_ts/mod_format/formatters/license.formatter.js +8 -0
- package/dist_ts/mod_format/formatters/npmextra.formatter.d.ts +4 -0
- package/dist_ts/mod_format/formatters/npmextra.formatter.js +8 -0
- package/dist_ts/mod_format/formatters/packagejson.formatter.d.ts +4 -0
- package/dist_ts/mod_format/formatters/packagejson.formatter.js +8 -0
- package/dist_ts/mod_format/formatters/prettier.formatter.d.ts +9 -0
- package/dist_ts/mod_format/formatters/prettier.formatter.js +111 -0
- package/dist_ts/mod_format/formatters/readme.formatter.d.ts +7 -0
- package/dist_ts/mod_format/formatters/readme.formatter.js +19 -0
- package/dist_ts/mod_format/formatters/templates.formatter.d.ts +4 -0
- package/dist_ts/mod_format/formatters/templates.formatter.js +8 -0
- package/dist_ts/mod_format/formatters/tsconfig.formatter.d.ts +4 -0
- package/dist_ts/mod_format/formatters/tsconfig.formatter.js +8 -0
- package/dist_ts/mod_format/index.d.ts +14 -1
- package/dist_ts/mod_format/index.js +202 -28
- package/dist_ts/mod_format/interfaces.format.d.ts +43 -0
- package/dist_ts/mod_format/interfaces.format.js +2 -0
- package/dist_ts/mod_format/mod.plugins.d.ts +5 -1
- package/dist_ts/mod_format/mod.plugins.js +6 -2
- package/package.json +2 -1
- package/readme.hints.md +187 -0
- package/readme.plan.md +170 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/gitzone.cli.ts +29 -1
- package/ts/gitzone.logging.ts +23 -1
- package/ts/mod_format/classes.baseformatter.ts +93 -0
- package/ts/mod_format/classes.changecache.ts +144 -0
- package/ts/mod_format/classes.dependency-analyzer.ts +107 -0
- package/ts/mod_format/classes.diffreporter.ts +108 -0
- package/ts/mod_format/classes.formatcontext.ts +65 -0
- package/ts/mod_format/classes.formatplanner.ts +184 -0
- package/ts/mod_format/classes.formatstats.ts +209 -0
- package/ts/mod_format/classes.rollbackmanager.ts +218 -0
- package/ts/mod_format/format.copy.ts +77 -1
- package/ts/mod_format/format.packagejson.ts +50 -1
- package/ts/mod_format/formatters/cleanup.formatter.ts +39 -0
- package/ts/mod_format/formatters/copy.formatter.ts +8 -0
- package/ts/mod_format/formatters/gitignore.formatter.ts +8 -0
- package/ts/mod_format/formatters/legacy.formatter.ts +36 -0
- package/ts/mod_format/formatters/license.formatter.ts +8 -0
- package/ts/mod_format/formatters/npmextra.formatter.ts +8 -0
- package/ts/mod_format/formatters/packagejson.formatter.ts +8 -0
- package/ts/mod_format/formatters/prettier.formatter.ts +125 -0
- package/ts/mod_format/formatters/readme.formatter.ts +22 -0
- package/ts/mod_format/formatters/templates.formatter.ts +8 -0
- package/ts/mod_format/formatters/tsconfig.formatter.ts +8 -0
- package/ts/mod_format/index.ts +241 -33
- package/ts/mod_format/interfaces.format.ts +45 -0
- 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
|
-
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
// npmextra
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
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
|
+
};
|
|
@@ -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
|
-
|
|
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
|
-
|
|
12
|
-
|
|
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.
|
|
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
|