@git.zone/cli 1.16.4 → 1.16.6
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/assets/templates/ci_default_gitlab/.gitlab-ci.yml +2 -2
- package/assets/templates/ci_default_private_gitlab/.gitlab-ci.yml +2 -2
- package/assets/templates/ci_docker_gitlab/.gitlab-ci.yml +2 -2
- package/assets/templates/meta/.smartscaf.yml +0 -1
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/mod_format/classes.changecache.d.ts +1 -0
- package/dist_ts/mod_format/classes.changecache.js +80 -11
- package/dist_ts/mod_format/formatters/prettier.formatter.js +44 -37
- package/package.json +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/mod_format/classes.changecache.ts +82 -9
- package/ts/mod_format/formatters/prettier.formatter.ts +49 -37
|
@@ -27,8 +27,8 @@ auditProductionDependencies:
|
|
|
27
27
|
image: code.foss.global/hosttoday/ht-docker-node:npmci
|
|
28
28
|
stage: security
|
|
29
29
|
script:
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
- npmci command npm config set registry https://registry.npmjs.org
|
|
31
|
+
- npmci command pnpm audit --audit-level=high --prod
|
|
32
32
|
tags:
|
|
33
33
|
- private
|
|
34
34
|
- docker
|
|
@@ -27,8 +27,8 @@ auditProductionDependencies:
|
|
|
27
27
|
image: code.foss.global/hosttoday/ht-docker-node:npmci
|
|
28
28
|
stage: security
|
|
29
29
|
script:
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
- npmci command npm config set registry https://registry.npmjs.org
|
|
31
|
+
- npmci command pnpm audit --audit-level=high --prod
|
|
32
32
|
tags:
|
|
33
33
|
- private
|
|
34
34
|
- docker
|
|
@@ -25,8 +25,8 @@ auditProductionDependencies:
|
|
|
25
25
|
image: code.foss.global/hosttoday/ht-docker-node:npmci
|
|
26
26
|
stage: security
|
|
27
27
|
script:
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
- npmci command npm config set registry https://registry.npmjs.org
|
|
29
|
+
- npmci command pnpm audit --audit-level=high --prod
|
|
30
30
|
tags:
|
|
31
31
|
- private
|
|
32
32
|
- docker
|
|
@@ -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.6',
|
|
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
|
|
@@ -10,19 +10,65 @@ export class ChangeCache {
|
|
|
10
10
|
await plugins.smartfile.fs.ensureDir(this.cacheDir);
|
|
11
11
|
}
|
|
12
12
|
async getManifest() {
|
|
13
|
+
const defaultManifest = {
|
|
14
|
+
version: this.cacheVersion,
|
|
15
|
+
lastFormat: 0,
|
|
16
|
+
files: []
|
|
17
|
+
};
|
|
13
18
|
const exists = await plugins.smartfile.fs.fileExists(this.manifestPath);
|
|
14
19
|
if (!exists) {
|
|
15
|
-
return
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
return defaultManifest;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const content = plugins.smartfile.fs.toStringSync(this.manifestPath);
|
|
24
|
+
const manifest = JSON.parse(content);
|
|
25
|
+
// Validate the manifest structure
|
|
26
|
+
if (this.isValidManifest(manifest)) {
|
|
27
|
+
return manifest;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
console.warn('Invalid manifest structure, returning default manifest');
|
|
31
|
+
return defaultManifest;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.warn(`Failed to read cache manifest: ${error.message}, returning default manifest`);
|
|
36
|
+
// Try to delete the corrupted file
|
|
37
|
+
try {
|
|
38
|
+
await plugins.smartfile.fs.remove(this.manifestPath);
|
|
39
|
+
}
|
|
40
|
+
catch (removeError) {
|
|
41
|
+
// Ignore removal errors
|
|
42
|
+
}
|
|
43
|
+
return defaultManifest;
|
|
44
|
+
}
|
|
23
45
|
}
|
|
24
46
|
async saveManifest(manifest) {
|
|
25
|
-
|
|
47
|
+
// Validate before saving
|
|
48
|
+
if (!this.isValidManifest(manifest)) {
|
|
49
|
+
throw new Error('Invalid manifest structure, cannot save');
|
|
50
|
+
}
|
|
51
|
+
// Use atomic write: write to temp file, then move it
|
|
52
|
+
const tempPath = `${this.manifestPath}.tmp`;
|
|
53
|
+
try {
|
|
54
|
+
// Write to temporary file
|
|
55
|
+
const jsonContent = JSON.stringify(manifest, null, 2);
|
|
56
|
+
await plugins.smartfile.memory.toFs(jsonContent, tempPath);
|
|
57
|
+
// Move temp file to actual manifest (atomic-like operation)
|
|
58
|
+
// Since smartfile doesn't have rename, we copy and delete
|
|
59
|
+
await plugins.smartfile.fs.copy(tempPath, this.manifestPath);
|
|
60
|
+
await plugins.smartfile.fs.remove(tempPath);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
// Clean up temp file if it exists
|
|
64
|
+
try {
|
|
65
|
+
await plugins.smartfile.fs.remove(tempPath);
|
|
66
|
+
}
|
|
67
|
+
catch (removeError) {
|
|
68
|
+
// Ignore removal errors
|
|
69
|
+
}
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
26
72
|
}
|
|
27
73
|
async hasFileChanged(filePath) {
|
|
28
74
|
const absolutePath = plugins.path.isAbsolute(filePath)
|
|
@@ -62,7 +108,7 @@ export class ChangeCache {
|
|
|
62
108
|
if (stats.isDirectory()) {
|
|
63
109
|
return; // Don't cache directories
|
|
64
110
|
}
|
|
65
|
-
const content =
|
|
111
|
+
const content = plugins.smartfile.fs.toStringSync(absolutePath);
|
|
66
112
|
const checksum = this.calculateChecksum(content);
|
|
67
113
|
// Update manifest
|
|
68
114
|
const manifest = await this.getManifest();
|
|
@@ -109,5 +155,28 @@ export class ChangeCache {
|
|
|
109
155
|
calculateChecksum(content) {
|
|
110
156
|
return plugins.crypto.createHash('sha256').update(content).digest('hex');
|
|
111
157
|
}
|
|
158
|
+
isValidManifest(manifest) {
|
|
159
|
+
// Check if manifest has the required structure
|
|
160
|
+
if (!manifest || typeof manifest !== 'object') {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
// Check required fields
|
|
164
|
+
if (typeof manifest.version !== 'string' ||
|
|
165
|
+
typeof manifest.lastFormat !== 'number' ||
|
|
166
|
+
!Array.isArray(manifest.files)) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
// Check each file entry
|
|
170
|
+
for (const file of manifest.files) {
|
|
171
|
+
if (!file || typeof file !== 'object' ||
|
|
172
|
+
typeof file.path !== 'string' ||
|
|
173
|
+
typeof file.checksum !== 'string' ||
|
|
174
|
+
typeof file.modified !== 'number' ||
|
|
175
|
+
typeof file.size !== 'number') {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
112
181
|
}
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jaGFuZ2VjYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL21vZF9mb3JtYXQvY2xhc3Nlcy5jaGFuZ2VjYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBZXJDLE1BQU0sT0FBTyxXQUFXO0lBS3RCO1FBRlEsaUJBQVksR0FBRyxPQUFPLENBQUM7UUFHN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVO1FBQ2QsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLE1BQU0sZUFBZSxHQUFtQjtZQUN0QyxPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDMUIsVUFBVSxFQUFFLENBQUM7WUFDYixLQUFLLEVBQUUsRUFBRTtTQUNWLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTyxlQUFlLENBQUM7UUFDekIsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFT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
|
|
@@ -7,46 +7,53 @@ export class PrettierFormatter extends BaseFormatter {
|
|
|
7
7
|
}
|
|
8
8
|
async analyze() {
|
|
9
9
|
const changes = [];
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
'
|
|
14
|
-
'
|
|
15
|
-
'
|
|
16
|
-
'dist_*/**',
|
|
17
|
-
'.nogit/**',
|
|
18
|
-
'coverage/**',
|
|
19
|
-
'.nyc_output/**',
|
|
20
|
-
'vendor/**',
|
|
21
|
-
'bower_components/**',
|
|
22
|
-
'jspm_packages/**',
|
|
23
|
-
'*.min.js',
|
|
24
|
-
'*.min.css'
|
|
10
|
+
// Define directories to format (TypeScript directories by default)
|
|
11
|
+
const includeDirs = [
|
|
12
|
+
'ts',
|
|
13
|
+
'ts_*',
|
|
14
|
+
'test',
|
|
15
|
+
'tests'
|
|
25
16
|
];
|
|
17
|
+
// File extensions to format
|
|
18
|
+
const extensions = '{ts,tsx,js,jsx,json,md,css,scss,html,xml,yaml,yml}';
|
|
19
|
+
// Also format root-level config files
|
|
20
|
+
const rootConfigFiles = [
|
|
21
|
+
'package.json',
|
|
22
|
+
'tsconfig.json',
|
|
23
|
+
'npmextra.json',
|
|
24
|
+
'.prettierrc',
|
|
25
|
+
'.prettierrc.json',
|
|
26
|
+
'.prettierrc.js',
|
|
27
|
+
'readme.md',
|
|
28
|
+
'README.md',
|
|
29
|
+
'changelog.md',
|
|
30
|
+
'CHANGELOG.md',
|
|
31
|
+
'license',
|
|
32
|
+
'LICENSE',
|
|
33
|
+
'*.md'
|
|
34
|
+
];
|
|
35
|
+
// Collect all files to format
|
|
36
|
+
const allFiles = [];
|
|
37
|
+
// Add files from TypeScript directories
|
|
38
|
+
for (const dir of includeDirs) {
|
|
39
|
+
const globPattern = `${dir}/**/*.${extensions}`;
|
|
40
|
+
const dirFiles = await plugins.smartfile.fs.listFileTree('.', globPattern);
|
|
41
|
+
allFiles.push(...dirFiles);
|
|
42
|
+
}
|
|
43
|
+
// Add root config files
|
|
44
|
+
for (const pattern of rootConfigFiles) {
|
|
45
|
+
const rootFiles = await plugins.smartfile.fs.listFileTree('.', pattern);
|
|
46
|
+
// Only include files at root level (no slashes in path)
|
|
47
|
+
const rootLevelFiles = rootFiles.filter(f => !f.includes('/'));
|
|
48
|
+
allFiles.push(...rootLevelFiles);
|
|
49
|
+
}
|
|
50
|
+
// Remove duplicates
|
|
51
|
+
const uniqueFiles = [...new Set(allFiles)];
|
|
26
52
|
// Get all files that match the pattern
|
|
27
|
-
const files =
|
|
28
|
-
//
|
|
53
|
+
const files = uniqueFiles;
|
|
54
|
+
// Ensure we only process actual files (not directories)
|
|
29
55
|
const validFiles = [];
|
|
30
56
|
for (const file of files) {
|
|
31
|
-
// Check if file matches any exclude pattern
|
|
32
|
-
let shouldExclude = false;
|
|
33
|
-
for (const pattern of excludePatterns) {
|
|
34
|
-
// Simple pattern matching for common cases
|
|
35
|
-
const patternBase = pattern.replace('/**', '').replace('**/', '').replace('*', '');
|
|
36
|
-
if (pattern.endsWith('/**') && file.startsWith(patternBase + '/')) {
|
|
37
|
-
shouldExclude = true;
|
|
38
|
-
logVerbose(`Excluding ${file} - matches exclude pattern ${pattern}`);
|
|
39
|
-
break;
|
|
40
|
-
}
|
|
41
|
-
else if (pattern.startsWith('*.') && file.endsWith(patternBase)) {
|
|
42
|
-
shouldExclude = true;
|
|
43
|
-
logVerbose(`Excluding ${file} - matches exclude pattern ${pattern}`);
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
if (shouldExclude) {
|
|
48
|
-
continue;
|
|
49
|
-
}
|
|
50
57
|
try {
|
|
51
58
|
const stats = await plugins.smartfile.fs.stat(file);
|
|
52
59
|
if (!stats.isDirectory()) {
|
|
@@ -156,4 +163,4 @@ export class PrettierFormatter extends BaseFormatter {
|
|
|
156
163
|
});
|
|
157
164
|
}
|
|
158
165
|
}
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldHRpZXIuZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvbW9kX2Zvcm1hdC9mb3JtYXR0ZXJzL3ByZXR0aWVyLmZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFNUQsT0FBTyxLQUFLLE9BQU8sTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTlELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxhQUFhO0lBQ2xELElBQUksSUFBSTtRQUNOLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sT0FBTyxHQUFxQixFQUFFLENBQUM7UUFFckMsbUVBQW1FO1FBQ25FLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLElBQUk7WUFDSixNQUFNO1lBQ04sTUFBTTtZQUNOLE9BQU87U0FDUixDQUFDO1FBRUYsNEJBQTRCO1FBQzVCLE1BQU0sVUFBVSxHQUFHLG9EQUFvRCxDQUFDO1FBRXhFLHNDQUFzQztRQUN0QyxNQUFNLGVBQWUsR0FBRztZQUN0QixjQUFjO1lBQ2QsZUFBZTtZQUNmLGVBQWU7WUFDZixhQUFhO1lBQ2Isa0JBQWtCO1lBQ2xCLGdCQUFnQjtZQUNoQixXQUFXO1lBQ1gsV0FBVztZQUNYLGNBQWM7WUFDZCxjQUFjO1lBQ2QsU0FBUztZQUNULFNBQVM7WUFDVCxNQUFNO1NBQ1AsQ0FBQztRQUVGLDhCQUE4QjtRQUM5QixNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFFOUIsd0NBQXdDO1FBQ3hDLEtBQUssTUFBTSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDOUIsTUFBTSxXQUFXLEdBQUcsR0FBRyxHQUFHLFNBQVMsVUFBVSxFQUFFLENBQUM7WUFDaEQsTUFBTSxRQUFRLEdBQUcsTUFB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
|
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.6",
|
|
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/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.6',
|
|
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
|
}
|
|
@@ -29,21 +29,67 @@ export class ChangeCache {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
async getManifest(): Promise<ICacheManifest> {
|
|
32
|
+
const defaultManifest: ICacheManifest = {
|
|
33
|
+
version: this.cacheVersion,
|
|
34
|
+
lastFormat: 0,
|
|
35
|
+
files: []
|
|
36
|
+
};
|
|
37
|
+
|
|
32
38
|
const exists = await plugins.smartfile.fs.fileExists(this.manifestPath);
|
|
33
39
|
if (!exists) {
|
|
34
|
-
return
|
|
35
|
-
version: this.cacheVersion,
|
|
36
|
-
lastFormat: 0,
|
|
37
|
-
files: []
|
|
38
|
-
};
|
|
40
|
+
return defaultManifest;
|
|
39
41
|
}
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
try {
|
|
44
|
+
const content = plugins.smartfile.fs.toStringSync(this.manifestPath);
|
|
45
|
+
const manifest = JSON.parse(content);
|
|
46
|
+
|
|
47
|
+
// Validate the manifest structure
|
|
48
|
+
if (this.isValidManifest(manifest)) {
|
|
49
|
+
return manifest;
|
|
50
|
+
} else {
|
|
51
|
+
console.warn('Invalid manifest structure, returning default manifest');
|
|
52
|
+
return defaultManifest;
|
|
53
|
+
}
|
|
54
|
+
} catch (error) {
|
|
55
|
+
console.warn(`Failed to read cache manifest: ${error.message}, returning default manifest`);
|
|
56
|
+
// Try to delete the corrupted file
|
|
57
|
+
try {
|
|
58
|
+
await plugins.smartfile.fs.remove(this.manifestPath);
|
|
59
|
+
} catch (removeError) {
|
|
60
|
+
// Ignore removal errors
|
|
61
|
+
}
|
|
62
|
+
return defaultManifest;
|
|
63
|
+
}
|
|
43
64
|
}
|
|
44
65
|
|
|
45
66
|
async saveManifest(manifest: ICacheManifest): Promise<void> {
|
|
46
|
-
|
|
67
|
+
// Validate before saving
|
|
68
|
+
if (!this.isValidManifest(manifest)) {
|
|
69
|
+
throw new Error('Invalid manifest structure, cannot save');
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Use atomic write: write to temp file, then move it
|
|
73
|
+
const tempPath = `${this.manifestPath}.tmp`;
|
|
74
|
+
|
|
75
|
+
try {
|
|
76
|
+
// Write to temporary file
|
|
77
|
+
const jsonContent = JSON.stringify(manifest, null, 2);
|
|
78
|
+
await plugins.smartfile.memory.toFs(jsonContent, tempPath);
|
|
79
|
+
|
|
80
|
+
// Move temp file to actual manifest (atomic-like operation)
|
|
81
|
+
// Since smartfile doesn't have rename, we copy and delete
|
|
82
|
+
await plugins.smartfile.fs.copy(tempPath, this.manifestPath);
|
|
83
|
+
await plugins.smartfile.fs.remove(tempPath);
|
|
84
|
+
} catch (error) {
|
|
85
|
+
// Clean up temp file if it exists
|
|
86
|
+
try {
|
|
87
|
+
await plugins.smartfile.fs.remove(tempPath);
|
|
88
|
+
} catch (removeError) {
|
|
89
|
+
// Ignore removal errors
|
|
90
|
+
}
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
47
93
|
}
|
|
48
94
|
|
|
49
95
|
async hasFileChanged(filePath: string): Promise<boolean> {
|
|
@@ -95,7 +141,7 @@ export class ChangeCache {
|
|
|
95
141
|
return; // Don't cache directories
|
|
96
142
|
}
|
|
97
143
|
|
|
98
|
-
const content =
|
|
144
|
+
const content = plugins.smartfile.fs.toStringSync(absolutePath);
|
|
99
145
|
const checksum = this.calculateChecksum(content);
|
|
100
146
|
|
|
101
147
|
// Update manifest
|
|
@@ -153,4 +199,31 @@ export class ChangeCache {
|
|
|
153
199
|
private calculateChecksum(content: string | Buffer): string {
|
|
154
200
|
return plugins.crypto.createHash('sha256').update(content).digest('hex');
|
|
155
201
|
}
|
|
202
|
+
|
|
203
|
+
private isValidManifest(manifest: any): manifest is ICacheManifest {
|
|
204
|
+
// Check if manifest has the required structure
|
|
205
|
+
if (!manifest || typeof manifest !== 'object') {
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Check required fields
|
|
210
|
+
if (typeof manifest.version !== 'string' ||
|
|
211
|
+
typeof manifest.lastFormat !== 'number' ||
|
|
212
|
+
!Array.isArray(manifest.files)) {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Check each file entry
|
|
217
|
+
for (const file of manifest.files) {
|
|
218
|
+
if (!file || typeof file !== 'object' ||
|
|
219
|
+
typeof file.path !== 'string' ||
|
|
220
|
+
typeof file.checksum !== 'string' ||
|
|
221
|
+
typeof file.modified !== 'number' ||
|
|
222
|
+
typeof file.size !== 'number') {
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
156
229
|
}
|
|
@@ -10,50 +10,62 @@ export class PrettierFormatter extends BaseFormatter {
|
|
|
10
10
|
|
|
11
11
|
async analyze(): Promise<IPlannedChange[]> {
|
|
12
12
|
const changes: IPlannedChange[] = [];
|
|
13
|
-
const globPattern = '**/*.{ts,tsx,js,jsx,json,md,css,scss,html,xml,yaml,yml}';
|
|
14
13
|
|
|
15
|
-
//
|
|
16
|
-
const
|
|
17
|
-
'
|
|
18
|
-
'
|
|
19
|
-
'
|
|
20
|
-
'
|
|
21
|
-
'.nogit/**',
|
|
22
|
-
'coverage/**',
|
|
23
|
-
'.nyc_output/**',
|
|
24
|
-
'vendor/**',
|
|
25
|
-
'bower_components/**',
|
|
26
|
-
'jspm_packages/**',
|
|
27
|
-
'*.min.js',
|
|
28
|
-
'*.min.css'
|
|
14
|
+
// Define directories to format (TypeScript directories by default)
|
|
15
|
+
const includeDirs = [
|
|
16
|
+
'ts',
|
|
17
|
+
'ts_*',
|
|
18
|
+
'test',
|
|
19
|
+
'tests'
|
|
29
20
|
];
|
|
30
21
|
|
|
22
|
+
// File extensions to format
|
|
23
|
+
const extensions = '{ts,tsx,js,jsx,json,md,css,scss,html,xml,yaml,yml}';
|
|
24
|
+
|
|
25
|
+
// Also format root-level config files
|
|
26
|
+
const rootConfigFiles = [
|
|
27
|
+
'package.json',
|
|
28
|
+
'tsconfig.json',
|
|
29
|
+
'npmextra.json',
|
|
30
|
+
'.prettierrc',
|
|
31
|
+
'.prettierrc.json',
|
|
32
|
+
'.prettierrc.js',
|
|
33
|
+
'readme.md',
|
|
34
|
+
'README.md',
|
|
35
|
+
'changelog.md',
|
|
36
|
+
'CHANGELOG.md',
|
|
37
|
+
'license',
|
|
38
|
+
'LICENSE',
|
|
39
|
+
'*.md'
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
// Collect all files to format
|
|
43
|
+
const allFiles: string[] = [];
|
|
44
|
+
|
|
45
|
+
// Add files from TypeScript directories
|
|
46
|
+
for (const dir of includeDirs) {
|
|
47
|
+
const globPattern = `${dir}/**/*.${extensions}`;
|
|
48
|
+
const dirFiles = await plugins.smartfile.fs.listFileTree('.', globPattern);
|
|
49
|
+
allFiles.push(...dirFiles);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Add root config files
|
|
53
|
+
for (const pattern of rootConfigFiles) {
|
|
54
|
+
const rootFiles = await plugins.smartfile.fs.listFileTree('.', pattern);
|
|
55
|
+
// Only include files at root level (no slashes in path)
|
|
56
|
+
const rootLevelFiles = rootFiles.filter(f => !f.includes('/'));
|
|
57
|
+
allFiles.push(...rootLevelFiles);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Remove duplicates
|
|
61
|
+
const uniqueFiles = [...new Set(allFiles)];
|
|
62
|
+
|
|
31
63
|
// Get all files that match the pattern
|
|
32
|
-
const files =
|
|
64
|
+
const files = uniqueFiles;
|
|
33
65
|
|
|
34
|
-
//
|
|
66
|
+
// Ensure we only process actual files (not directories)
|
|
35
67
|
const validFiles: string[] = [];
|
|
36
68
|
for (const file of files) {
|
|
37
|
-
// Check if file matches any exclude pattern
|
|
38
|
-
let shouldExclude = false;
|
|
39
|
-
for (const pattern of excludePatterns) {
|
|
40
|
-
// Simple pattern matching for common cases
|
|
41
|
-
const patternBase = pattern.replace('/**', '').replace('**/', '').replace('*', '');
|
|
42
|
-
if (pattern.endsWith('/**') && file.startsWith(patternBase + '/')) {
|
|
43
|
-
shouldExclude = true;
|
|
44
|
-
logVerbose(`Excluding ${file} - matches exclude pattern ${pattern}`);
|
|
45
|
-
break;
|
|
46
|
-
} else if (pattern.startsWith('*.') && file.endsWith(patternBase)) {
|
|
47
|
-
shouldExclude = true;
|
|
48
|
-
logVerbose(`Excluding ${file} - matches exclude pattern ${pattern}`);
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (shouldExclude) {
|
|
54
|
-
continue;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
69
|
try {
|
|
58
70
|
const stats = await plugins.smartfile.fs.stat(file);
|
|
59
71
|
if (!stats.isDirectory()) {
|