@git.zone/cli 1.16.8 → 1.16.9
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/mod_format/classes.baseformatter.js +12 -2
- package/dist_ts/mod_format/format.gitignore.js +27 -7
- package/dist_ts/mod_format/formatters/prettier.formatter.js +61 -37
- package/dist_ts/mod_format/index.js +1 -1
- package/npmextra.json +1 -1
- package/package.json +1 -1
- package/readme.hints.md +8 -3
- package/readme.md +30 -3
- package/readme.plan.md +21 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/mod_format/classes.baseformatter.ts +13 -1
- package/ts/mod_format/format.gitignore.ts +31 -6
- package/ts/mod_format/formatters/prettier.formatter.ts +76 -43
- package/ts/mod_format/index.ts +4 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/cli',
|
|
6
|
-
version: '1.16.
|
|
6
|
+
version: '1.16.9',
|
|
7
7
|
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.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxlQUFlO0lBQ3JCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSwrTEFBK0w7Q0FDN00sQ0FBQSJ9
|
|
@@ -39,7 +39,17 @@ export class BaseFormatter {
|
|
|
39
39
|
// Override in subclasses if needed
|
|
40
40
|
}
|
|
41
41
|
async modifyFile(filepath, content) {
|
|
42
|
-
|
|
42
|
+
// Validate filepath before writing
|
|
43
|
+
if (!filepath || filepath.trim() === '') {
|
|
44
|
+
throw new Error(`Invalid empty filepath in modifyFile`);
|
|
45
|
+
}
|
|
46
|
+
// Ensure we have a proper path with directory component
|
|
47
|
+
// If the path has no directory component (e.g., "package.json"), prepend "./"
|
|
48
|
+
let normalizedPath = filepath;
|
|
49
|
+
if (!plugins.path.parse(filepath).dir) {
|
|
50
|
+
normalizedPath = './' + filepath;
|
|
51
|
+
}
|
|
52
|
+
await plugins.smartfile.memory.toFs(content, normalizedPath);
|
|
43
53
|
}
|
|
44
54
|
async createFile(filepath, content) {
|
|
45
55
|
await plugins.smartfile.memory.toFs(content, filepath);
|
|
@@ -51,4 +61,4 @@ export class BaseFormatter {
|
|
|
51
61
|
return true;
|
|
52
62
|
}
|
|
53
63
|
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5iYXNlZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbW9kX2Zvcm1hdC9jbGFzc2VzLmJhc2Vmb3JtYXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWhELE1BQU0sT0FBZ0IsYUFBYTtJQUtqQyxZQUFZLE9BQXNCLEVBQUUsT0FBZ0I7UUFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQU1ELEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBeUI7UUFDckMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUV4QixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDL0QsQ0FBQztnQkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO29CQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUM5RCxNQUFNLEtBQUssQ0FBQztnQkFDZCxDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2Ysd0RBQXdEO1lBQ3hELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVTLEtBQUssQ0FBQyxVQUFVO1FBQ3hCLG1DQUFtQztJQUNyQyxDQUFDO0lBRVMsS0FBSyxDQUFDLFdBQVc7UUFDekIsbUNBQW1DO0lBQ3JDLENBQUM7SUFFUyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQWdCLEVBQUUsT0FBZTtRQUMxRCxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsOEVBQThFO1FBQzlFLElBQUksY0FBYyxHQUFHLFFBQVEsQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdEMsY0FBYyxHQUFHLElBQUksR0FBRyxRQUFRLENBQUM7UUFDbkMsQ0FBQztRQUVELE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRVMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFnQixFQUFFLE9BQWU7UUFDMUQsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFUyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQWdCO1FBQ3pDLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFUyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBZ0I7UUFDaEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0YifQ==
|
|
@@ -5,15 +5,35 @@ import { logger } from '../gitzone.logging.js';
|
|
|
5
5
|
const gitignorePath = plugins.path.join(paths.cwd, './.gitignore');
|
|
6
6
|
export const run = async (projectArg) => {
|
|
7
7
|
const gitignoreExists = await plugins.smartfile.fs.fileExists(gitignorePath);
|
|
8
|
-
|
|
9
|
-
const ciTemplate = await templateModule.getTemplate('gitignore');
|
|
8
|
+
let customContent = '';
|
|
10
9
|
if (gitignoreExists) {
|
|
11
10
|
// lets get the existing gitignore file
|
|
12
11
|
const existingGitIgnoreString = plugins.smartfile.fs.toStringSync(gitignorePath);
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
// Check for different custom section markers
|
|
13
|
+
const customMarkers = ['#------# custom', '# custom'];
|
|
14
|
+
for (const marker of customMarkers) {
|
|
15
|
+
const splitResult = existingGitIgnoreString.split(marker);
|
|
16
|
+
if (splitResult.length > 1) {
|
|
17
|
+
// Get everything after the marker (excluding the marker itself)
|
|
18
|
+
customContent = splitResult[1].trim();
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Write the template
|
|
24
|
+
const templateModule = await import('../mod_template/index.js');
|
|
25
|
+
const ciTemplate = await templateModule.getTemplate('gitignore');
|
|
26
|
+
await ciTemplate.writeToDisk(paths.cwd);
|
|
27
|
+
// Append the custom content if it exists
|
|
28
|
+
if (customContent) {
|
|
29
|
+
const newGitignoreContent = plugins.smartfile.fs.toStringSync(gitignorePath);
|
|
30
|
+
// The template already ends with "#------# custom", so just append the content
|
|
31
|
+
const finalContent = newGitignoreContent.trimEnd() + '\n' + customContent + '\n';
|
|
32
|
+
await plugins.smartfile.fs.toFs(finalContent, gitignorePath);
|
|
33
|
+
logger.log('info', 'Updated .gitignore while preserving custom section!');
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
logger.log('info', 'Added a .gitignore!');
|
|
15
37
|
}
|
|
16
|
-
ciTemplate.writeToDisk(paths.cwd);
|
|
17
|
-
logger.log('info', 'Added a .gitignore!');
|
|
18
38
|
};
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmdpdGlnbm9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL21vZF9mb3JtYXQvZm9ybWF0LmdpdGlnbm9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBRXJDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUVuRSxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLFVBQW1CLEVBQUUsRUFBRTtJQUMvQyxNQUFNLGVBQWUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3RSxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFFdkIsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNwQix1Q0FBdUM7UUFDdkMsTUFBTSx1QkFBdUIsR0FDM0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRW5ELDZDQUE2QztRQUM3QyxNQUFNLGFBQWEsR0FBRyxDQUFDLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELEtBQUssTUFBTSxNQUFNLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbkMsTUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsZ0VBQWdFO2dCQUNoRSxhQUFhLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QyxNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLE1BQU0sY0FBYyxHQUFHLE1BQU0sTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDaEUsTUFBTSxVQUFVLEdBQUcsTUFBTSxjQUFjLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFeEMseUNBQXlDO0lBQ3pDLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsTUFBTSxtQkFBbUIsR0FDdkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25ELCtFQUErRTtRQUMvRSxNQUFNLFlBQVksR0FDaEIsbUJBQW1CLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxHQUFHLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDOUQsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLHFEQUFxRCxDQUFDLENBQUM7SUFDNUUsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzVDLENBQUM7QUFDSCxDQUFDLENBQUMifQ==
|
|
@@ -23,8 +23,9 @@ export class PrettierFormatter extends BaseFormatter {
|
|
|
23
23
|
'README.md',
|
|
24
24
|
'changelog.md',
|
|
25
25
|
'CHANGELOG.md',
|
|
26
|
-
'
|
|
27
|
-
'
|
|
26
|
+
// Skip files without extensions as prettier can't infer parser
|
|
27
|
+
// 'license',
|
|
28
|
+
// 'LICENSE',
|
|
28
29
|
'*.md',
|
|
29
30
|
];
|
|
30
31
|
// Collect all files to format
|
|
@@ -82,29 +83,20 @@ export class PrettierFormatter extends BaseFormatter {
|
|
|
82
83
|
this.stats.startModule(this.name);
|
|
83
84
|
try {
|
|
84
85
|
await this.preExecute();
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
this.stats.recordFileOperation(this.name, change.type, true);
|
|
100
|
-
}
|
|
101
|
-
catch (error) {
|
|
102
|
-
this.stats.recordFileOperation(this.name, change.type, false);
|
|
103
|
-
logger.log('error', `Failed to format ${change.path}: ${error.message}`);
|
|
104
|
-
// Don't throw - continue with other files
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
await Promise.all(promises);
|
|
86
|
+
logVerbose(`Processing ${changes.length} files sequentially`);
|
|
87
|
+
// Process files sequentially to avoid prettier cache/state issues
|
|
88
|
+
for (let i = 0; i < changes.length; i++) {
|
|
89
|
+
const change = changes[i];
|
|
90
|
+
logVerbose(`Processing file ${i + 1}/${changes.length}: ${change.path}`);
|
|
91
|
+
try {
|
|
92
|
+
await this.applyChange(change);
|
|
93
|
+
this.stats.recordFileOperation(this.name, change.type, true);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
this.stats.recordFileOperation(this.name, change.type, false);
|
|
97
|
+
logger.log('error', `Failed to format ${change.path}: ${error.message}`);
|
|
98
|
+
// Don't throw - continue with other files
|
|
99
|
+
}
|
|
108
100
|
}
|
|
109
101
|
await this.postExecute();
|
|
110
102
|
}
|
|
@@ -120,25 +112,57 @@ export class PrettierFormatter extends BaseFormatter {
|
|
|
120
112
|
if (change.type !== 'modify')
|
|
121
113
|
return;
|
|
122
114
|
try {
|
|
115
|
+
// Validate the path before processing
|
|
116
|
+
if (!change.path || change.path.trim() === '') {
|
|
117
|
+
logger.log('error', `Invalid empty path in change: ${JSON.stringify(change)}`);
|
|
118
|
+
throw new Error('Invalid empty path');
|
|
119
|
+
}
|
|
123
120
|
// Read current content
|
|
124
121
|
const content = plugins.smartfile.fs.toStringSync(change.path);
|
|
125
122
|
// Format with prettier
|
|
126
123
|
const prettier = await import('prettier');
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
await this.modifyFile(change.path, formatted);
|
|
134
|
-
logVerbose(`Formatted ${change.path}`);
|
|
124
|
+
// Skip files that prettier can't parse without explicit parser
|
|
125
|
+
const fileExt = plugins.path.extname(change.path).toLowerCase();
|
|
126
|
+
if (!fileExt || fileExt === '') {
|
|
127
|
+
// Files without extensions need explicit parser
|
|
128
|
+
logVerbose(`Skipping ${change.path} - no file extension for parser inference`);
|
|
129
|
+
return;
|
|
135
130
|
}
|
|
136
|
-
|
|
137
|
-
|
|
131
|
+
try {
|
|
132
|
+
const formatted = await prettier.format(content, {
|
|
133
|
+
filepath: change.path,
|
|
134
|
+
...(await this.getPrettierConfig()),
|
|
135
|
+
});
|
|
136
|
+
// Only write if content actually changed
|
|
137
|
+
if (formatted !== content) {
|
|
138
|
+
// Debug: log the path being written
|
|
139
|
+
logVerbose(`Writing formatted content to: ${change.path}`);
|
|
140
|
+
await this.modifyFile(change.path, formatted);
|
|
141
|
+
logVerbose(`Formatted ${change.path}`);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
logVerbose(`No formatting changes for ${change.path}`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (prettierError) {
|
|
148
|
+
// Check if it's a parser error
|
|
149
|
+
if (prettierError.message &&
|
|
150
|
+
prettierError.message.includes('No parser could be inferred')) {
|
|
151
|
+
logVerbose(`Skipping ${change.path} - ${prettierError.message}`);
|
|
152
|
+
return; // Skip this file silently
|
|
153
|
+
}
|
|
154
|
+
throw prettierError;
|
|
138
155
|
}
|
|
139
156
|
}
|
|
140
157
|
catch (error) {
|
|
141
|
-
|
|
158
|
+
// Log the full error stack for debugging mkdir issues
|
|
159
|
+
if (error.message && error.message.includes('mkdir')) {
|
|
160
|
+
logger.log('error', `Failed to format ${change.path}: ${error.message}`);
|
|
161
|
+
logger.log('error', `Error stack: ${error.stack}`);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
logger.log('error', `Failed to format ${change.path}: ${error.message}`);
|
|
165
|
+
}
|
|
142
166
|
throw error;
|
|
143
167
|
}
|
|
144
168
|
}
|
|
@@ -156,4 +180,4 @@ export class PrettierFormatter extends BaseFormatter {
|
|
|
156
180
|
});
|
|
157
181
|
}
|
|
158
182
|
}
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldHRpZXIuZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvbW9kX2Zvcm1hdC9mb3JtYXR0ZXJzL3ByZXR0aWVyLmZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFNUQsT0FBTyxLQUFLLE9BQU8sTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTlELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxhQUFhO0lBQ2xELElBQUksSUFBSTtRQUNOLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sT0FBTyxHQUFxQixFQUFFLENBQUM7UUFFckMsbUVBQW1FO1FBQ25FLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFcEQsNEJBQTRCO1FBQzVCLE1BQU0sVUFBVSxHQUFHLG9EQUFvRCxDQUFDO1FBRXhFLHNDQUFzQztRQUN0QyxNQUFNLGVBQWUsR0FBRztZQUN0QixjQUFjO1lBQ2QsZUFBZTtZQUNmLGVBQWU7WUFDZixhQUFhO1lBQ2Isa0JBQWtCO1lBQ2xCLGdCQUFnQjtZQUNoQixXQUFXO1lBQ1gsV0FBVztZQUNYLGNBQWM7WUFDZCxjQUFjO1lBQ2QsK0RBQStEO1lBQy9ELGFBQWE7WUFDYixhQUFhO1lBQ2IsTUFBTTtTQUNQLENBQUM7UUFFRiw4QkFBOEI7UUFDOUIsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO1FBRTlCLHdDQUF3QztRQUN4QyxLQUFLLE1BQU0sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzlCLE1BQU0sV0FBVyxHQUFHLEdBQUcsR0FBRyxTQUFTLFVBQVUsRUFBRSxDQUFDO1lBQ2hELE1BQU0s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
|
|
@@ -145,4 +145,4 @@ export const handleListBackups = async () => {
|
|
|
145
145
|
export const handleCleanBackups = async () => {
|
|
146
146
|
logger.log('info', 'Backup cleaning has been disabled - backup system removed');
|
|
147
147
|
};
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfZm9ybWF0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvRCx3Q0FBd0M7QUFDeEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUvRCxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsS0FBSyxFQUNwQixVQVVJLEVBQUUsRUFDUSxFQUFFO0lBQ2hCLGdDQUFnQztJQUNoQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FB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
|
package/npmextra.json
CHANGED
|
@@ -36,4 +36,4 @@
|
|
|
36
36
|
"tsdoc": {
|
|
37
37
|
"legal": "\n## License and Legal Information\n\nThis repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository. \n\n**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.\n\n### Trademarks\n\nThis project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein. Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines, and any usage must be approved in writing by Task Venture Capital GmbH.\n\n### Company Information\n\nTask Venture Capital GmbH \nRegistered at District court Bremen HRB 35230 HB, Germany\n\nFor any legal inquiries or if you require further information, please contact us via email at hello@task.vc.\n\nBy using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.\n"
|
|
38
38
|
}
|
|
39
|
-
}
|
|
39
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@git.zone/cli",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.16.
|
|
4
|
+
"version": "1.16.9",
|
|
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",
|
package/readme.hints.md
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
# Gitzone CLI - Development Hints
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
- the cli of the git.zone project.
|
|
4
4
|
|
|
5
5
|
## Project Overview
|
|
6
6
|
|
|
7
7
|
Gitzone CLI (`@git.zone/cli`) is a comprehensive toolbelt for streamlining local development cycles. It provides utilities for:
|
|
8
|
+
|
|
8
9
|
- Project initialization and templating (via smartscaf)
|
|
9
10
|
- Code formatting and standardization
|
|
10
11
|
- Version control and commit management
|
|
@@ -14,12 +15,14 @@ Gitzone CLI (`@git.zone/cli`) is a comprehensive toolbelt for streamlining local
|
|
|
14
15
|
## Architecture
|
|
15
16
|
|
|
16
17
|
### Core Structure
|
|
18
|
+
|
|
17
19
|
- Main CLI entry: `cli.ts` / `cli.child.ts`
|
|
18
20
|
- Modular architecture with separate modules in `ts/mod_*` directories
|
|
19
21
|
- Each module handles specific functionality (format, commit, docker, etc.)
|
|
20
22
|
- Extensive use of plugins pattern via `plugins.ts` files
|
|
21
23
|
|
|
22
24
|
### Configuration Management
|
|
25
|
+
|
|
23
26
|
- Uses `npmextra.json` for all tool configuration
|
|
24
27
|
- Configuration stored under `gitzone` key in npmextra
|
|
25
28
|
- No separate `.gitzonerc` file - everything in npmextra.json
|
|
@@ -30,6 +33,7 @@ Gitzone CLI (`@git.zone/cli`) is a comprehensive toolbelt for streamlining local
|
|
|
30
33
|
The format module is responsible for project standardization:
|
|
31
34
|
|
|
32
35
|
#### Current Modules:
|
|
36
|
+
|
|
33
37
|
1. **cleanup** - Removes obsolete files (yarn.lock, tslint.json, etc.)
|
|
34
38
|
2. **copy** - File copying with glob patterns (fully implemented)
|
|
35
39
|
3. **gitignore** - Creates/updates .gitignore from templates
|
|
@@ -42,6 +46,7 @@ The format module is responsible for project standardization:
|
|
|
42
46
|
10. **tsconfig** - Formats TypeScript configuration
|
|
43
47
|
|
|
44
48
|
#### Execution Order (Dependency-Based):
|
|
49
|
+
|
|
45
50
|
- Modules are now executed in parallel groups based on dependencies
|
|
46
51
|
- Independent modules run concurrently for better performance
|
|
47
52
|
- Dependency analyzer ensures correct execution order
|
|
@@ -182,7 +187,7 @@ gitzone format --clean-backups
|
|
|
182
187
|
|
|
183
188
|
## API Changes
|
|
184
189
|
|
|
185
|
-
- smartfile API updated to use fs
|
|
190
|
+
- smartfile API updated to use fs._ and memory._ namespaces
|
|
186
191
|
- smartnpm requires instance creation: `new NpmRegistry()`
|
|
187
192
|
- All file operations now use updated APIs
|
|
188
|
-
- Type imports use `import type` for proper verbatim module syntax
|
|
193
|
+
- Type imports use `import type` for proper verbatim module syntax
|
package/readme.md
CHANGED
|
@@ -47,12 +47,14 @@ gitzone template [template-name]
|
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
**Available templates:**
|
|
50
|
+
|
|
50
51
|
- **`npm`** - TypeScript npm package with testing, CI/CD, and full tooling
|
|
51
52
|
- **`service`** - Microservice architecture with Docker support
|
|
52
|
-
- **`website`** - Modern web application with LitElement and service workers
|
|
53
|
+
- **`website`** - Modern web application with LitElement and service workers
|
|
53
54
|
- **`wcc`** - Web Component Collection for reusable UI components
|
|
54
55
|
|
|
55
56
|
Each template comes pre-configured with:
|
|
57
|
+
|
|
56
58
|
- ✅ TypeScript with modern configurations
|
|
57
59
|
- ✅ Automated testing setup
|
|
58
60
|
- ✅ CI/CD pipelines (GitLab/GitHub)
|
|
@@ -81,6 +83,7 @@ gitzone format --verbose
|
|
|
81
83
|
```
|
|
82
84
|
|
|
83
85
|
**Format features:**
|
|
86
|
+
|
|
84
87
|
- 🔄 **Smart caching** - Only processes changed files
|
|
85
88
|
- 🛡️ **Rollback support** - Undo formatting changes if needed
|
|
86
89
|
- 📊 **Detailed reporting** - See exactly what changed
|
|
@@ -88,6 +91,7 @@ gitzone format --verbose
|
|
|
88
91
|
- 🎯 **Module-specific formatting** - Target specific formatters
|
|
89
92
|
|
|
90
93
|
**Rollback capabilities:**
|
|
94
|
+
|
|
91
95
|
```bash
|
|
92
96
|
# List all available backups
|
|
93
97
|
gitzone format --list-backups
|
|
@@ -103,6 +107,7 @@ gitzone format --clean-backups
|
|
|
103
107
|
```
|
|
104
108
|
|
|
105
109
|
**Formatters included:**
|
|
110
|
+
|
|
106
111
|
- **Prettier** - JavaScript/TypeScript code formatting
|
|
107
112
|
- **License** - Ensure proper licensing
|
|
108
113
|
- **Package.json** - Standardize package configurations
|
|
@@ -121,6 +126,7 @@ gitzone commit
|
|
|
121
126
|
```
|
|
122
127
|
|
|
123
128
|
Features:
|
|
129
|
+
|
|
124
130
|
- 📝 Interactive commit message builder
|
|
125
131
|
- 🏷️ Automatic version bumping (major/minor/patch)
|
|
126
132
|
- 📜 Changelog generation
|
|
@@ -128,6 +134,7 @@ Features:
|
|
|
128
134
|
- 🎯 Conventional commit compliance
|
|
129
135
|
|
|
130
136
|
The commit wizard guides you through:
|
|
137
|
+
|
|
131
138
|
1. **Type selection** (feat/fix/docs/style/refactor/perf/test/chore)
|
|
132
139
|
2. **Scope definition** (component/module affected)
|
|
133
140
|
3. **Description crafting**
|
|
@@ -153,6 +160,7 @@ gitzone meta remove [name]
|
|
|
153
160
|
```
|
|
154
161
|
|
|
155
162
|
Perfect for:
|
|
163
|
+
|
|
156
164
|
- Monorepo management
|
|
157
165
|
- Multi-package projects
|
|
158
166
|
- Coordinated deployments
|
|
@@ -168,6 +176,7 @@ gitzone docker prune
|
|
|
168
176
|
```
|
|
169
177
|
|
|
170
178
|
This command removes:
|
|
179
|
+
|
|
171
180
|
- Stopped containers
|
|
172
181
|
- Unused images
|
|
173
182
|
- Dangling volumes
|
|
@@ -196,6 +205,7 @@ gitzone deprecate
|
|
|
196
205
|
```
|
|
197
206
|
|
|
198
207
|
Interactive wizard for:
|
|
208
|
+
|
|
199
209
|
- Setting deprecation notices
|
|
200
210
|
- Guiding users to replacements
|
|
201
211
|
- Updating registry metadata
|
|
@@ -210,6 +220,7 @@ gitzone start
|
|
|
210
220
|
```
|
|
211
221
|
|
|
212
222
|
Automatically:
|
|
223
|
+
|
|
213
224
|
- Checks out master branch
|
|
214
225
|
- Pulls latest changes
|
|
215
226
|
- Installs dependencies
|
|
@@ -266,18 +277,21 @@ Customize gitzone behavior through `npmextra.json`:
|
|
|
266
277
|
## 🏆 Best Practices
|
|
267
278
|
|
|
268
279
|
### For New Projects
|
|
280
|
+
|
|
269
281
|
1. Start with a template: `gitzone template npm`
|
|
270
282
|
2. Customize the generated structure
|
|
271
283
|
3. Run initial format: `gitzone format`
|
|
272
284
|
4. Set up CI/CD: `gitzone open ci`
|
|
273
285
|
|
|
274
286
|
### For Existing Projects
|
|
287
|
+
|
|
275
288
|
1. Initialize: `gitzone start`
|
|
276
289
|
2. Format codebase: `gitzone format --dry-run` (preview first!)
|
|
277
290
|
3. Apply formatting: `gitzone format --yes`
|
|
278
291
|
4. Commit changes: `gitzone commit`
|
|
279
292
|
|
|
280
293
|
### For Teams
|
|
294
|
+
|
|
281
295
|
1. Document format preferences in `npmextra.json`
|
|
282
296
|
2. Use `--save-plan` for reviewable format changes
|
|
283
297
|
3. Enable rollback for safety
|
|
@@ -286,6 +300,7 @@ Customize gitzone behavior through `npmextra.json`:
|
|
|
286
300
|
## 🎯 Common Workflows
|
|
287
301
|
|
|
288
302
|
### Clean Development Cycle
|
|
303
|
+
|
|
289
304
|
```bash
|
|
290
305
|
# 1. Start fresh
|
|
291
306
|
gitzone start
|
|
@@ -304,6 +319,7 @@ gitzone commit
|
|
|
304
319
|
```
|
|
305
320
|
|
|
306
321
|
### Multi-Repository Management
|
|
322
|
+
|
|
307
323
|
```bash
|
|
308
324
|
# 1. Set up meta repository
|
|
309
325
|
gitzone meta init
|
|
@@ -318,6 +334,7 @@ gitzone meta update
|
|
|
318
334
|
```
|
|
319
335
|
|
|
320
336
|
### Safe Formatting with Rollback
|
|
337
|
+
|
|
321
338
|
```bash
|
|
322
339
|
# 1. Preview changes
|
|
323
340
|
gitzone format --dry-run
|
|
@@ -335,17 +352,20 @@ gitzone format --rollback
|
|
|
335
352
|
## 🔌 Integrations
|
|
336
353
|
|
|
337
354
|
### CI/CD Platforms
|
|
355
|
+
|
|
338
356
|
- **GitLab CI** - Full pipeline support with templates
|
|
339
357
|
- **GitHub Actions** - Automated workflows
|
|
340
358
|
- **Docker** - Container-based deployments
|
|
341
359
|
|
|
342
360
|
### Development Tools
|
|
361
|
+
|
|
343
362
|
- **TypeScript** - First-class support
|
|
344
363
|
- **Prettier** - Code formatting
|
|
345
364
|
- **ESLint** - Linting (via format modules)
|
|
346
365
|
- **npm/pnpm** - Package management
|
|
347
366
|
|
|
348
367
|
### Version Control
|
|
368
|
+
|
|
349
369
|
- **Git** - Deep integration
|
|
350
370
|
- **Semantic Versioning** - Automatic version bumping
|
|
351
371
|
- **Conventional Commits** - Standardized commit messages
|
|
@@ -361,19 +381,25 @@ gitzone format --rollback
|
|
|
361
381
|
## 🐛 Troubleshooting
|
|
362
382
|
|
|
363
383
|
### Format Command Shows "Cancelled"
|
|
384
|
+
|
|
364
385
|
If the format command shows cancelled even after confirming:
|
|
386
|
+
|
|
365
387
|
- Check your `npmextra.json` configuration
|
|
366
388
|
- Try with `--yes` flag to skip confirmation
|
|
367
389
|
- Use `--verbose` for detailed output
|
|
368
390
|
|
|
369
391
|
### Docker Commands Fail
|
|
392
|
+
|
|
370
393
|
Ensure Docker daemon is running:
|
|
394
|
+
|
|
371
395
|
```bash
|
|
372
396
|
docker info
|
|
373
397
|
```
|
|
374
398
|
|
|
375
399
|
### Template Creation Issues
|
|
400
|
+
|
|
376
401
|
Verify npm/pnpm is properly configured:
|
|
402
|
+
|
|
377
403
|
```bash
|
|
378
404
|
npm config get registry
|
|
379
405
|
```
|
|
@@ -381,6 +407,7 @@ npm config get registry
|
|
|
381
407
|
## 📈 Performance
|
|
382
408
|
|
|
383
409
|
gitzone is optimized for speed:
|
|
410
|
+
|
|
384
411
|
- **Parallel processing** for format operations
|
|
385
412
|
- **Smart caching** to avoid redundant work
|
|
386
413
|
- **Incremental updates** for meta repositories
|
|
@@ -388,7 +415,7 @@ gitzone is optimized for speed:
|
|
|
388
415
|
|
|
389
416
|
## License and Legal Information
|
|
390
417
|
|
|
391
|
-
This repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository.
|
|
418
|
+
This repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository.
|
|
392
419
|
|
|
393
420
|
**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.
|
|
394
421
|
|
|
@@ -403,4 +430,4 @@ Registered at District court Bremen HRB 35230 HB, Germany
|
|
|
403
430
|
|
|
404
431
|
For any legal inquiries or if you require further information, please contact us via email at hello@task.vc.
|
|
405
432
|
|
|
406
|
-
By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.
|
|
433
|
+
By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.
|
package/readme.plan.md
CHANGED
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
Please reread /home/philkunz/.claude/CLAUDE.md before proceeding with any implementation.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
|
+
|
|
6
7
|
This plan outlines improvements for the gitzone format module to enhance its functionality, reliability, and maintainability.
|
|
7
8
|
|
|
8
9
|
## Phase 1: Core Improvements (High Priority) - COMPLETED ✅
|
|
9
10
|
|
|
10
11
|
### 1. Enhanced Error Handling & Recovery ✅
|
|
12
|
+
|
|
11
13
|
- [x] Implement rollback mechanism for failed format operations
|
|
12
14
|
- [x] Add detailed error messages with recovery suggestions
|
|
13
15
|
- [x] Create a `--dry-run` flag to preview changes before applying
|
|
@@ -15,12 +17,14 @@ This plan outlines improvements for the gitzone format module to enhance its fun
|
|
|
15
17
|
- [x] Implement plan → action workflow as default behavior
|
|
16
18
|
|
|
17
19
|
### 2. Complete Missing Functionality ✅
|
|
20
|
+
|
|
18
21
|
- [x] Implement the `ensureDependency` function in format.packagejson.ts
|
|
19
22
|
- [x] Develop the copy module for file pattern-based copying
|
|
20
23
|
- [x] Add dependency version constraint management
|
|
21
24
|
- [x] Support workspace/monorepo configurations (via configuration)
|
|
22
25
|
|
|
23
26
|
### 3. Configuration & Flexibility ✅
|
|
27
|
+
|
|
24
28
|
- [x] Extend npmextra.json gitzone configuration section
|
|
25
29
|
- [x] Allow custom license exclusion/inclusion lists
|
|
26
30
|
- [x] Make format steps configurable (skip/include specific modules)
|
|
@@ -28,6 +32,7 @@ This plan outlines improvements for the gitzone format module to enhance its fun
|
|
|
28
32
|
- [x] Add format profiles for different project types
|
|
29
33
|
|
|
30
34
|
### 4. Architecture Changes ✅
|
|
35
|
+
|
|
31
36
|
- [x] Introduce a `FormatContext` class to manage state across modules
|
|
32
37
|
- [x] Create abstract `BaseFormatter` class for consistent module structure
|
|
33
38
|
- [x] Implement event system for inter-module communication (via context)
|
|
@@ -37,12 +42,14 @@ This plan outlines improvements for the gitzone format module to enhance its fun
|
|
|
37
42
|
## Phase 2: Performance & Reporting (Medium Priority) - COMPLETED ✅
|
|
38
43
|
|
|
39
44
|
### 5. Performance Optimizations ✅
|
|
45
|
+
|
|
40
46
|
- [x] Implement parallel execution for independent format modules
|
|
41
47
|
- [x] Add file change detection to skip unchanged files
|
|
42
48
|
- [x] Create format cache to track last formatted state
|
|
43
49
|
- [x] Optimize Prettier runs by batching files
|
|
44
50
|
|
|
45
51
|
### 6. Enhanced Reporting & Visibility ✅
|
|
52
|
+
|
|
46
53
|
- [x] Generate comprehensive format report showing all changes
|
|
47
54
|
- [x] Add diff view for file modifications
|
|
48
55
|
- [x] Create verbose logging option
|
|
@@ -51,30 +58,35 @@ This plan outlines improvements for the gitzone format module to enhance its fun
|
|
|
51
58
|
## Phase 3: Advanced Features (Lower Priority) - PARTIALLY COMPLETED
|
|
52
59
|
|
|
53
60
|
### 7. Better Integration & Extensibility ⏳
|
|
61
|
+
|
|
54
62
|
- [ ] Create plugin system for custom format modules
|
|
55
63
|
- [ ] Add hooks for pre/post format operations
|
|
56
64
|
- [ ] Support custom validation rules
|
|
57
65
|
- [ ] Integrate with git hooks for pre-commit formatting
|
|
58
66
|
|
|
59
67
|
### 8. Improved Template Integration ⏳
|
|
68
|
+
|
|
60
69
|
- [ ] Better error handling when smartscaf operations fail
|
|
61
70
|
- [ ] Add pre/post template hooks for custom processing
|
|
62
71
|
- [ ] Validate template results before proceeding with format
|
|
63
72
|
- [ ] Support skipping template updates via configuration
|
|
64
73
|
|
|
65
74
|
### 9. Enhanced License Management ⏳
|
|
75
|
+
|
|
66
76
|
- [ ] Make license checking configurable (partial)
|
|
67
77
|
- [ ] Add license compatibility matrix
|
|
68
78
|
- [x] Support license exceptions for specific packages
|
|
69
79
|
- [ ] Generate license report for compliance
|
|
70
80
|
|
|
71
81
|
### 10. Better Package.json Management ⏳
|
|
82
|
+
|
|
72
83
|
- [ ] Smart dependency sorting and grouping
|
|
73
84
|
- [ ] Automated script generation based on project type
|
|
74
85
|
- [ ] Support for pnpm workspace configurations
|
|
75
86
|
- [ ] Validation of package.json schema
|
|
76
87
|
|
|
77
88
|
### 11. Quality of Life Improvements ⏳
|
|
89
|
+
|
|
78
90
|
- [ ] Interactive mode for format configuration
|
|
79
91
|
- [ ] Undo/redo capability for format operations
|
|
80
92
|
- [ ] Format presets for common scenarios
|
|
@@ -85,28 +97,33 @@ This plan outlines improvements for the gitzone format module to enhance its fun
|
|
|
85
97
|
### ✅ Completed Features
|
|
86
98
|
|
|
87
99
|
1. **Rollback Mechanism**
|
|
100
|
+
|
|
88
101
|
- Full backup/restore functionality
|
|
89
102
|
- Manifest tracking and integrity checks
|
|
90
103
|
- CLI commands for rollback operations
|
|
91
104
|
|
|
92
105
|
2. **Plan → Action Workflow**
|
|
106
|
+
|
|
93
107
|
- Two-phase approach (analyze then execute)
|
|
94
108
|
- Interactive confirmation
|
|
95
109
|
- Dry-run support
|
|
96
110
|
|
|
97
111
|
3. **Configuration System**
|
|
112
|
+
|
|
98
113
|
- Comprehensive npmextra.json support
|
|
99
114
|
- Module control (skip/only/order)
|
|
100
115
|
- Cache configuration
|
|
101
116
|
- Parallel execution settings
|
|
102
117
|
|
|
103
118
|
4. **Performance Improvements**
|
|
119
|
+
|
|
104
120
|
- Parallel execution by dependency analysis
|
|
105
121
|
- File change caching
|
|
106
122
|
- Prettier batching
|
|
107
123
|
- Execution time tracking
|
|
108
124
|
|
|
109
125
|
5. **Reporting & Statistics**
|
|
126
|
+
|
|
110
127
|
- Detailed diff views
|
|
111
128
|
- Execution statistics
|
|
112
129
|
- Verbose logging mode
|
|
@@ -121,6 +138,7 @@ This plan outlines improvements for the gitzone format module to enhance its fun
|
|
|
121
138
|
### 🚧 Partially Completed
|
|
122
139
|
|
|
123
140
|
1. **License Management**
|
|
141
|
+
|
|
124
142
|
- Basic configuration support
|
|
125
143
|
- Exception handling for specific packages
|
|
126
144
|
- Need: compatibility matrix, compliance reports
|
|
@@ -132,11 +150,13 @@ This plan outlines improvements for the gitzone format module to enhance its fun
|
|
|
132
150
|
### ⏳ Not Started
|
|
133
151
|
|
|
134
152
|
1. **Plugin System**
|
|
153
|
+
|
|
135
154
|
- Need to design plugin API
|
|
136
155
|
- Hook system for pre/post operations
|
|
137
156
|
- Custom validation rules
|
|
138
157
|
|
|
139
158
|
2. **Git Integration**
|
|
159
|
+
|
|
140
160
|
- Pre-commit hooks
|
|
141
161
|
- Automatic formatting on commit
|
|
142
162
|
|
|
@@ -167,4 +187,4 @@ This plan outlines improvements for the gitzone format module to enhance its fun
|
|
|
167
187
|
- ✅ Faster execution through parallel processing and caching
|
|
168
188
|
- ✅ Enhanced user control through configuration
|
|
169
189
|
- ✅ Better visibility through reporting and statistics
|
|
170
|
-
- ✅ Improved maintainability through better architecture
|
|
190
|
+
- ✅ Improved maintainability through better architecture
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/cli',
|
|
6
|
-
version: '1.16.
|
|
6
|
+
version: '1.16.9',
|
|
7
7
|
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.'
|
|
8
8
|
}
|
|
@@ -53,7 +53,19 @@ export abstract class BaseFormatter {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
protected async modifyFile(filepath: string, content: string): Promise<void> {
|
|
56
|
-
|
|
56
|
+
// Validate filepath before writing
|
|
57
|
+
if (!filepath || filepath.trim() === '') {
|
|
58
|
+
throw new Error(`Invalid empty filepath in modifyFile`);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Ensure we have a proper path with directory component
|
|
62
|
+
// If the path has no directory component (e.g., "package.json"), prepend "./"
|
|
63
|
+
let normalizedPath = filepath;
|
|
64
|
+
if (!plugins.path.parse(filepath).dir) {
|
|
65
|
+
normalizedPath = './' + filepath;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
await plugins.smartfile.memory.toFs(content, normalizedPath);
|
|
57
69
|
}
|
|
58
70
|
|
|
59
71
|
protected async createFile(filepath: string, content: string): Promise<void> {
|
|
@@ -8,15 +8,40 @@ const gitignorePath = plugins.path.join(paths.cwd, './.gitignore');
|
|
|
8
8
|
|
|
9
9
|
export const run = async (projectArg: Project) => {
|
|
10
10
|
const gitignoreExists = await plugins.smartfile.fs.fileExists(gitignorePath);
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
let customContent = '';
|
|
12
|
+
|
|
13
13
|
if (gitignoreExists) {
|
|
14
14
|
// lets get the existing gitignore file
|
|
15
15
|
const existingGitIgnoreString =
|
|
16
16
|
plugins.smartfile.fs.toStringSync(gitignorePath);
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
|
|
18
|
+
// Check for different custom section markers
|
|
19
|
+
const customMarkers = ['#------# custom', '# custom'];
|
|
20
|
+
for (const marker of customMarkers) {
|
|
21
|
+
const splitResult = existingGitIgnoreString.split(marker);
|
|
22
|
+
if (splitResult.length > 1) {
|
|
23
|
+
// Get everything after the marker (excluding the marker itself)
|
|
24
|
+
customContent = splitResult[1].trim();
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Write the template
|
|
31
|
+
const templateModule = await import('../mod_template/index.js');
|
|
32
|
+
const ciTemplate = await templateModule.getTemplate('gitignore');
|
|
33
|
+
await ciTemplate.writeToDisk(paths.cwd);
|
|
34
|
+
|
|
35
|
+
// Append the custom content if it exists
|
|
36
|
+
if (customContent) {
|
|
37
|
+
const newGitignoreContent =
|
|
38
|
+
plugins.smartfile.fs.toStringSync(gitignorePath);
|
|
39
|
+
// The template already ends with "#------# custom", so just append the content
|
|
40
|
+
const finalContent =
|
|
41
|
+
newGitignoreContent.trimEnd() + '\n' + customContent + '\n';
|
|
42
|
+
await plugins.smartfile.fs.toFs(finalContent, gitignorePath);
|
|
43
|
+
logger.log('info', 'Updated .gitignore while preserving custom section!');
|
|
44
|
+
} else {
|
|
45
|
+
logger.log('info', 'Added a .gitignore!');
|
|
19
46
|
}
|
|
20
|
-
ciTemplate.writeToDisk(paths.cwd);
|
|
21
|
-
logger.log('info', 'Added a .gitignore!');
|
|
22
47
|
};
|
|
@@ -29,8 +29,9 @@ export class PrettierFormatter extends BaseFormatter {
|
|
|
29
29
|
'README.md',
|
|
30
30
|
'changelog.md',
|
|
31
31
|
'CHANGELOG.md',
|
|
32
|
-
'
|
|
33
|
-
'
|
|
32
|
+
// Skip files without extensions as prettier can't infer parser
|
|
33
|
+
// 'license',
|
|
34
|
+
// 'LICENSE',
|
|
34
35
|
'*.md',
|
|
35
36
|
];
|
|
36
37
|
|
|
@@ -102,40 +103,26 @@ export class PrettierFormatter extends BaseFormatter {
|
|
|
102
103
|
try {
|
|
103
104
|
await this.preExecute();
|
|
104
105
|
|
|
105
|
-
|
|
106
|
-
const batchSize = 10; // Process 10 files at a time
|
|
107
|
-
const batches: IPlannedChange[][] = [];
|
|
106
|
+
logVerbose(`Processing ${changes.length} files sequentially`);
|
|
108
107
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
logVerbose(
|
|
114
|
-
`Processing ${changes.length} files in ${batches.length} batches`,
|
|
115
|
-
);
|
|
116
|
-
|
|
117
|
-
for (let i = 0; i < batches.length; i++) {
|
|
118
|
-
const batch = batches[i];
|
|
108
|
+
// Process files sequentially to avoid prettier cache/state issues
|
|
109
|
+
for (let i = 0; i < changes.length; i++) {
|
|
110
|
+
const change = changes[i];
|
|
119
111
|
logVerbose(
|
|
120
|
-
`Processing
|
|
112
|
+
`Processing file ${i + 1}/${changes.length}: ${change.path}`,
|
|
121
113
|
);
|
|
122
114
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
// Don't throw - continue with other files
|
|
135
|
-
}
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
await Promise.all(promises);
|
|
115
|
+
try {
|
|
116
|
+
await this.applyChange(change);
|
|
117
|
+
this.stats.recordFileOperation(this.name, change.type, true);
|
|
118
|
+
} catch (error) {
|
|
119
|
+
this.stats.recordFileOperation(this.name, change.type, false);
|
|
120
|
+
logger.log(
|
|
121
|
+
'error',
|
|
122
|
+
`Failed to format ${change.path}: ${error.message}`,
|
|
123
|
+
);
|
|
124
|
+
// Don't throw - continue with other files
|
|
125
|
+
}
|
|
139
126
|
}
|
|
140
127
|
|
|
141
128
|
await this.postExecute();
|
|
@@ -151,25 +138,71 @@ export class PrettierFormatter extends BaseFormatter {
|
|
|
151
138
|
if (change.type !== 'modify') return;
|
|
152
139
|
|
|
153
140
|
try {
|
|
141
|
+
// Validate the path before processing
|
|
142
|
+
if (!change.path || change.path.trim() === '') {
|
|
143
|
+
logger.log(
|
|
144
|
+
'error',
|
|
145
|
+
`Invalid empty path in change: ${JSON.stringify(change)}`,
|
|
146
|
+
);
|
|
147
|
+
throw new Error('Invalid empty path');
|
|
148
|
+
}
|
|
149
|
+
|
|
154
150
|
// Read current content
|
|
155
151
|
const content = plugins.smartfile.fs.toStringSync(change.path);
|
|
156
152
|
|
|
157
153
|
// Format with prettier
|
|
158
154
|
const prettier = await import('prettier');
|
|
159
|
-
const formatted = await prettier.format(content, {
|
|
160
|
-
filepath: change.path,
|
|
161
|
-
...(await this.getPrettierConfig()),
|
|
162
|
-
});
|
|
163
155
|
|
|
164
|
-
//
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
156
|
+
// Skip files that prettier can't parse without explicit parser
|
|
157
|
+
const fileExt = plugins.path.extname(change.path).toLowerCase();
|
|
158
|
+
if (!fileExt || fileExt === '') {
|
|
159
|
+
// Files without extensions need explicit parser
|
|
160
|
+
logVerbose(
|
|
161
|
+
`Skipping ${change.path} - no file extension for parser inference`,
|
|
162
|
+
);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
try {
|
|
167
|
+
const formatted = await prettier.format(content, {
|
|
168
|
+
filepath: change.path,
|
|
169
|
+
...(await this.getPrettierConfig()),
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// Only write if content actually changed
|
|
173
|
+
if (formatted !== content) {
|
|
174
|
+
// Debug: log the path being written
|
|
175
|
+
logVerbose(`Writing formatted content to: ${change.path}`);
|
|
176
|
+
await this.modifyFile(change.path, formatted);
|
|
177
|
+
logVerbose(`Formatted ${change.path}`);
|
|
178
|
+
} else {
|
|
179
|
+
logVerbose(`No formatting changes for ${change.path}`);
|
|
180
|
+
}
|
|
181
|
+
} catch (prettierError) {
|
|
182
|
+
// Check if it's a parser error
|
|
183
|
+
if (
|
|
184
|
+
prettierError.message &&
|
|
185
|
+
prettierError.message.includes('No parser could be inferred')
|
|
186
|
+
) {
|
|
187
|
+
logVerbose(`Skipping ${change.path} - ${prettierError.message}`);
|
|
188
|
+
return; // Skip this file silently
|
|
189
|
+
}
|
|
190
|
+
throw prettierError;
|
|
170
191
|
}
|
|
171
192
|
} catch (error) {
|
|
172
|
-
|
|
193
|
+
// Log the full error stack for debugging mkdir issues
|
|
194
|
+
if (error.message && error.message.includes('mkdir')) {
|
|
195
|
+
logger.log(
|
|
196
|
+
'error',
|
|
197
|
+
`Failed to format ${change.path}: ${error.message}`,
|
|
198
|
+
);
|
|
199
|
+
logger.log('error', `Error stack: ${error.stack}`);
|
|
200
|
+
} else {
|
|
201
|
+
logger.log(
|
|
202
|
+
'error',
|
|
203
|
+
`Failed to format ${change.path}: ${error.message}`,
|
|
204
|
+
);
|
|
205
|
+
}
|
|
173
206
|
throw error;
|
|
174
207
|
}
|
|
175
208
|
}
|
package/ts/mod_format/index.ts
CHANGED
|
@@ -185,5 +185,8 @@ export const handleListBackups = async (): Promise<void> => {
|
|
|
185
185
|
};
|
|
186
186
|
|
|
187
187
|
export const handleCleanBackups = async (): Promise<void> => {
|
|
188
|
-
logger.log(
|
|
188
|
+
logger.log(
|
|
189
|
+
'info',
|
|
190
|
+
'Backup cleaning has been disabled - backup system removed',
|
|
191
|
+
);
|
|
189
192
|
};
|