@hatem427/code-guard-ci 1.0.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/.husky/pre-commit +27 -0
- package/LICENSE +21 -0
- package/README.md +646 -0
- package/config/angular.config.ts +223 -0
- package/config/guidelines.config.ts +229 -0
- package/config/nextjs.config.ts +160 -0
- package/config/react.config.ts +330 -0
- package/dist/config/angular.config.d.ts +15 -0
- package/dist/config/angular.config.d.ts.map +1 -0
- package/dist/config/angular.config.js +187 -0
- package/dist/config/angular.config.js.map +1 -0
- package/dist/config/guidelines.config.d.ts +63 -0
- package/dist/config/guidelines.config.d.ts.map +1 -0
- package/dist/config/guidelines.config.js +167 -0
- package/dist/config/guidelines.config.js.map +1 -0
- package/dist/config/nextjs.config.d.ts +18 -0
- package/dist/config/nextjs.config.d.ts.map +1 -0
- package/dist/config/nextjs.config.js +133 -0
- package/dist/config/nextjs.config.js.map +1 -0
- package/dist/config/react.config.d.ts +15 -0
- package/dist/config/react.config.d.ts.map +1 -0
- package/dist/config/react.config.js +287 -0
- package/dist/config/react.config.js.map +1 -0
- package/dist/scripts/auto-fix.d.ts +16 -0
- package/dist/scripts/auto-fix.d.ts.map +1 -0
- package/dist/scripts/auto-fix.js +130 -0
- package/dist/scripts/auto-fix.js.map +1 -0
- package/dist/scripts/cli.d.ts +17 -0
- package/dist/scripts/cli.d.ts.map +1 -0
- package/dist/scripts/cli.js +255 -0
- package/dist/scripts/cli.js.map +1 -0
- package/dist/scripts/delete-bypass-logs.d.ts +17 -0
- package/dist/scripts/delete-bypass-logs.d.ts.map +1 -0
- package/dist/scripts/delete-bypass-logs.js +242 -0
- package/dist/scripts/delete-bypass-logs.js.map +1 -0
- package/dist/scripts/generate-doc.d.ts +18 -0
- package/dist/scripts/generate-doc.d.ts.map +1 -0
- package/dist/scripts/generate-doc.js +300 -0
- package/dist/scripts/generate-doc.js.map +1 -0
- package/dist/scripts/generate-pr-checklist.d.ts +20 -0
- package/dist/scripts/generate-pr-checklist.d.ts.map +1 -0
- package/dist/scripts/generate-pr-checklist.js +276 -0
- package/dist/scripts/generate-pr-checklist.js.map +1 -0
- package/dist/scripts/precommit-check.d.ts +23 -0
- package/dist/scripts/precommit-check.d.ts.map +1 -0
- package/dist/scripts/precommit-check.js +331 -0
- package/dist/scripts/precommit-check.js.map +1 -0
- package/dist/scripts/set-admin-password.d.ts +14 -0
- package/dist/scripts/set-admin-password.d.ts.map +1 -0
- package/dist/scripts/set-admin-password.js +116 -0
- package/dist/scripts/set-admin-password.js.map +1 -0
- package/dist/scripts/set-bypass-password.d.ts +11 -0
- package/dist/scripts/set-bypass-password.d.ts.map +1 -0
- package/dist/scripts/set-bypass-password.js +106 -0
- package/dist/scripts/set-bypass-password.js.map +1 -0
- package/dist/scripts/utils/auto-fixer.d.ts +28 -0
- package/dist/scripts/utils/auto-fixer.d.ts.map +1 -0
- package/dist/scripts/utils/auto-fixer.js +177 -0
- package/dist/scripts/utils/auto-fixer.js.map +1 -0
- package/dist/scripts/utils/bypass-manager.d.ts +101 -0
- package/dist/scripts/utils/bypass-manager.d.ts.map +1 -0
- package/dist/scripts/utils/bypass-manager.js +496 -0
- package/dist/scripts/utils/bypass-manager.js.map +1 -0
- package/dist/scripts/utils/code-analyzer.d.ts +34 -0
- package/dist/scripts/utils/code-analyzer.d.ts.map +1 -0
- package/dist/scripts/utils/code-analyzer.js +323 -0
- package/dist/scripts/utils/code-analyzer.js.map +1 -0
- package/dist/scripts/utils/file-checker.d.ts +93 -0
- package/dist/scripts/utils/file-checker.d.ts.map +1 -0
- package/dist/scripts/utils/file-checker.js +248 -0
- package/dist/scripts/utils/file-checker.js.map +1 -0
- package/dist/scripts/utils/logger.d.ts +26 -0
- package/dist/scripts/utils/logger.d.ts.map +1 -0
- package/dist/scripts/utils/logger.js +86 -0
- package/dist/scripts/utils/logger.js.map +1 -0
- package/dist/scripts/utils/project-detector.d.ts +34 -0
- package/dist/scripts/utils/project-detector.d.ts.map +1 -0
- package/dist/scripts/utils/project-detector.js +124 -0
- package/dist/scripts/utils/project-detector.js.map +1 -0
- package/dist/scripts/utils/rule-engine.d.ts +57 -0
- package/dist/scripts/utils/rule-engine.d.ts.map +1 -0
- package/dist/scripts/utils/rule-engine.js +158 -0
- package/dist/scripts/utils/rule-engine.js.map +1 -0
- package/dist/scripts/view-bypass-log.d.ts +13 -0
- package/dist/scripts/view-bypass-log.d.ts.map +1 -0
- package/dist/scripts/view-bypass-log.js +117 -0
- package/dist/scripts/view-bypass-log.js.map +1 -0
- package/package.json +74 -0
- package/scripts/auto-fix.ts +115 -0
- package/scripts/cli.ts +246 -0
- package/scripts/delete-bypass-logs.ts +253 -0
- package/scripts/generate-doc.ts +317 -0
- package/scripts/generate-pr-checklist.ts +285 -0
- package/scripts/precommit-check.ts +349 -0
- package/scripts/set-admin-password.ts +90 -0
- package/scripts/set-bypass-password.ts +80 -0
- package/scripts/utils/auto-fixer.ts +181 -0
- package/scripts/utils/bypass-manager.ts +566 -0
- package/scripts/utils/code-analyzer.ts +341 -0
- package/scripts/utils/file-checker.ts +253 -0
- package/scripts/utils/logger.ts +88 -0
- package/scripts/utils/project-detector.ts +115 -0
- package/scripts/utils/rule-engine.ts +186 -0
- package/scripts/view-bypass-log.ts +92 -0
- package/templates/feature-doc-api.md +101 -0
- package/templates/feature-doc-service.md +113 -0
- package/templates/feature-doc-ui.md +91 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env ts-node
|
|
2
|
+
/**
|
|
3
|
+
* ============================================================================
|
|
4
|
+
* set-admin-password.ts — CLI tool to set admin password
|
|
5
|
+
* ============================================================================
|
|
6
|
+
*
|
|
7
|
+
* Admin password is required to delete bypass log entries.
|
|
8
|
+
* This provides a higher level of security for log management.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* npm run set-admin-password
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=set-admin-password.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-admin-password.d.ts","sourceRoot":"","sources":["../../scripts/set-admin-password.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env ts-node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* ============================================================================
|
|
5
|
+
* set-admin-password.ts — CLI tool to set admin password
|
|
6
|
+
* ============================================================================
|
|
7
|
+
*
|
|
8
|
+
* Admin password is required to delete bypass log entries.
|
|
9
|
+
* This provides a higher level of security for log management.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* npm run set-admin-password
|
|
13
|
+
*/
|
|
14
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
+
}
|
|
20
|
+
Object.defineProperty(o, k2, desc);
|
|
21
|
+
}) : (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
o[k2] = m[k];
|
|
24
|
+
}));
|
|
25
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
+
}) : function(o, v) {
|
|
28
|
+
o["default"] = v;
|
|
29
|
+
});
|
|
30
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
+
var ownKeys = function(o) {
|
|
32
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
+
var ar = [];
|
|
34
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
+
return ar;
|
|
36
|
+
};
|
|
37
|
+
return ownKeys(o);
|
|
38
|
+
};
|
|
39
|
+
return function (mod) {
|
|
40
|
+
if (mod && mod.__esModule) return mod;
|
|
41
|
+
var result = {};
|
|
42
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
+
__setModuleDefault(result, mod);
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
const bypass_manager_1 = require("./utils/bypass-manager");
|
|
49
|
+
const readline = __importStar(require("readline"));
|
|
50
|
+
function promptPassword(question) {
|
|
51
|
+
return new Promise((resolve) => {
|
|
52
|
+
const rl = readline.createInterface({
|
|
53
|
+
input: process.stdin,
|
|
54
|
+
output: process.stdout,
|
|
55
|
+
});
|
|
56
|
+
const stdin = process.stdin;
|
|
57
|
+
stdin.setRawMode(true);
|
|
58
|
+
let password = '';
|
|
59
|
+
process.stdout.write(question);
|
|
60
|
+
stdin.on('data', (char) => {
|
|
61
|
+
const str = char.toString('utf-8');
|
|
62
|
+
if (str === '\n' || str === '\r' || str === '\u0004') {
|
|
63
|
+
stdin.setRawMode(false);
|
|
64
|
+
process.stdout.write('\n');
|
|
65
|
+
rl.close();
|
|
66
|
+
resolve(password);
|
|
67
|
+
}
|
|
68
|
+
else if (str === '\u0003') {
|
|
69
|
+
// Ctrl+C
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
else if (str === '\u007f' || str === '\b') {
|
|
73
|
+
// Backspace
|
|
74
|
+
if (password.length > 0) {
|
|
75
|
+
password = password.slice(0, -1);
|
|
76
|
+
process.stdout.write('\b \b');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
password += str;
|
|
81
|
+
process.stdout.write('*');
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
async function main() {
|
|
87
|
+
console.log('🔐 Code Guardian — Set Admin Password\n');
|
|
88
|
+
console.log('⚠️ ADMIN PRIVILEGES:');
|
|
89
|
+
console.log(' • View all bypass logs');
|
|
90
|
+
console.log(' • Delete bypass log entries');
|
|
91
|
+
console.log(' • Access archived logs\n');
|
|
92
|
+
console.log('🔒 This password should be highly restricted and secure.\n');
|
|
93
|
+
const password = await promptPassword('Enter new admin password: ');
|
|
94
|
+
if (!password || password.length < 8) {
|
|
95
|
+
console.error('\n❌ Admin password must be at least 8 characters long.');
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
const confirm = await promptPassword('Confirm password: ');
|
|
99
|
+
if (password !== confirm) {
|
|
100
|
+
console.error('\n❌ Passwords do not match.');
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
(0, bypass_manager_1.setAdminPassword)(password);
|
|
104
|
+
console.log('\n✅ Admin password set successfully!');
|
|
105
|
+
console.log('📁 Stored in: .code-guardian/admin-credentials.hash');
|
|
106
|
+
console.log('\n⚠️ IMPORTANT SECURITY NOTES:');
|
|
107
|
+
console.log(' 1. Add .code-guardian/ to .gitignore (if not already done)');
|
|
108
|
+
console.log(' 2. Share this password only with authorized administrators');
|
|
109
|
+
console.log(' 3. Change default password immediately in production');
|
|
110
|
+
console.log(' 4. Store password securely (password manager recommended)');
|
|
111
|
+
}
|
|
112
|
+
main().catch((err) => {
|
|
113
|
+
console.error(`Error: ${err.message}`);
|
|
114
|
+
process.exit(1);
|
|
115
|
+
});
|
|
116
|
+
//# sourceMappingURL=set-admin-password.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-admin-password.js","sourceRoot":"","sources":["../../scripts/set-admin-password.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env ts-node
|
|
2
|
+
/**
|
|
3
|
+
* ============================================================================
|
|
4
|
+
* set-bypass-password.ts — CLI tool to set bypass password
|
|
5
|
+
* ============================================================================
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* npm run set-bypass-password
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=set-bypass-password.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-bypass-password.d.ts","sourceRoot":"","sources":["../../scripts/set-bypass-password.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#!/usr/bin/env ts-node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* ============================================================================
|
|
5
|
+
* set-bypass-password.ts — CLI tool to set bypass password
|
|
6
|
+
* ============================================================================
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npm run set-bypass-password
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
const bypass_manager_1 = require("./utils/bypass-manager");
|
|
46
|
+
const readline = __importStar(require("readline"));
|
|
47
|
+
function promptPassword(question) {
|
|
48
|
+
return new Promise((resolve) => {
|
|
49
|
+
const rl = readline.createInterface({
|
|
50
|
+
input: process.stdin,
|
|
51
|
+
output: process.stdout,
|
|
52
|
+
});
|
|
53
|
+
const stdin = process.stdin;
|
|
54
|
+
stdin.setRawMode(true);
|
|
55
|
+
let password = '';
|
|
56
|
+
process.stdout.write(question);
|
|
57
|
+
stdin.on('data', (char) => {
|
|
58
|
+
const str = char.toString('utf-8');
|
|
59
|
+
if (str === '\n' || str === '\r' || str === '\u0004') {
|
|
60
|
+
stdin.setRawMode(false);
|
|
61
|
+
process.stdout.write('\n');
|
|
62
|
+
rl.close();
|
|
63
|
+
resolve(password);
|
|
64
|
+
}
|
|
65
|
+
else if (str === '\u0003') {
|
|
66
|
+
// Ctrl+C
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
else if (str === '\u007f' || str === '\b') {
|
|
70
|
+
// Backspace
|
|
71
|
+
if (password.length > 0) {
|
|
72
|
+
password = password.slice(0, -1);
|
|
73
|
+
process.stdout.write('\b \b');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
password += str;
|
|
78
|
+
process.stdout.write('*');
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
async function main() {
|
|
84
|
+
console.log('🔐 Code Guardian — Set Bypass Password\n');
|
|
85
|
+
console.log('This password will be required to bypass pre-commit checks.');
|
|
86
|
+
console.log('Share it only with authorized team members.\n');
|
|
87
|
+
const password = await promptPassword('Enter new bypass password: ');
|
|
88
|
+
if (!password || password.length < 6) {
|
|
89
|
+
console.error('\n❌ Password must be at least 6 characters long.');
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
const confirm = await promptPassword('Confirm password: ');
|
|
93
|
+
if (password !== confirm) {
|
|
94
|
+
console.error('\n❌ Passwords do not match.');
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
(0, bypass_manager_1.setBypassPassword)(password);
|
|
98
|
+
console.log('\n✅ Password set successfully!');
|
|
99
|
+
console.log('📁 Stored in: .code-guardian/bypass-password.hash');
|
|
100
|
+
console.log('\n⚠️ Remember to add .code-guardian/ to .gitignore if not already done.');
|
|
101
|
+
}
|
|
102
|
+
main().catch((err) => {
|
|
103
|
+
console.error(`Error: ${err.message}`);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=set-bypass-password.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-bypass-password.js","sourceRoot":"","sources":["../../scripts/set-bypass-password.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ============================================================================
|
|
3
|
+
* auto-fixer.ts — Automatic code fixes for common violations
|
|
4
|
+
* ============================================================================
|
|
5
|
+
*
|
|
6
|
+
* Provides auto-fix capabilities for rules that can be safely automated.
|
|
7
|
+
*/
|
|
8
|
+
import { Violation } from './rule-engine';
|
|
9
|
+
export interface FixResult {
|
|
10
|
+
fixed: boolean;
|
|
11
|
+
message: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Attempt to auto-fix a violation
|
|
15
|
+
*/
|
|
16
|
+
export declare function autoFixViolation(violation: Violation, filePath: string): FixResult;
|
|
17
|
+
/**
|
|
18
|
+
* Auto-fix all fixable violations in a list
|
|
19
|
+
*/
|
|
20
|
+
export declare function autoFixAll(violations: Violation[], rootDir: string): {
|
|
21
|
+
fixed: number;
|
|
22
|
+
failed: number;
|
|
23
|
+
results: Array<{
|
|
24
|
+
violation: Violation;
|
|
25
|
+
result: FixResult;
|
|
26
|
+
}>;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=auto-fixer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-fixer.d.ts","sourceRoot":"","sources":["../../../scripts/utils/auto-fixer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAuBlF;AAsGD;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;CAC7D,CA6BA"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ============================================================================
|
|
4
|
+
* auto-fixer.ts — Automatic code fixes for common violations
|
|
5
|
+
* ============================================================================
|
|
6
|
+
*
|
|
7
|
+
* Provides auto-fix capabilities for rules that can be safely automated.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.autoFixViolation = autoFixViolation;
|
|
44
|
+
exports.autoFixAll = autoFixAll;
|
|
45
|
+
const fs = __importStar(require("fs"));
|
|
46
|
+
/**
|
|
47
|
+
* Attempt to auto-fix a violation
|
|
48
|
+
*/
|
|
49
|
+
function autoFixViolation(violation, filePath) {
|
|
50
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
51
|
+
const lines = content.split('\n');
|
|
52
|
+
switch (violation.ruleId) {
|
|
53
|
+
case 'no-console-log':
|
|
54
|
+
return fixConsoleLog(lines, violation, filePath);
|
|
55
|
+
case 'no-any-type':
|
|
56
|
+
return fixAnyType(lines, violation, filePath);
|
|
57
|
+
case 'react-no-inline-styles':
|
|
58
|
+
return { fixed: false, message: 'Manual fix required - convert to Tailwind classes' };
|
|
59
|
+
case 'require-alt-text':
|
|
60
|
+
return fixMissingAlt(lines, violation, filePath);
|
|
61
|
+
case 'require-button-type':
|
|
62
|
+
return fixButtonType(lines, violation, filePath);
|
|
63
|
+
default:
|
|
64
|
+
return { fixed: false, message: 'No auto-fix available for this rule' };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Remove console.log statements
|
|
69
|
+
*/
|
|
70
|
+
function fixConsoleLog(lines, violation, filePath) {
|
|
71
|
+
if (!violation.line) {
|
|
72
|
+
return { fixed: false, message: 'Cannot determine line number' };
|
|
73
|
+
}
|
|
74
|
+
const lineIndex = violation.line - 1;
|
|
75
|
+
const line = lines[lineIndex];
|
|
76
|
+
// Remove entire line if it only contains console.log
|
|
77
|
+
if (line.trim().match(/^console\.log\(.+\);?\s*$/)) {
|
|
78
|
+
lines.splice(lineIndex, 1);
|
|
79
|
+
fs.writeFileSync(filePath, lines.join('\n'), 'utf-8');
|
|
80
|
+
return { fixed: true, message: 'Removed console.log statement' };
|
|
81
|
+
}
|
|
82
|
+
return { fixed: false, message: 'Console.log is part of larger expression - manual fix required' };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Convert 'any' to 'unknown' (safer)
|
|
86
|
+
*/
|
|
87
|
+
function fixAnyType(lines, violation, filePath) {
|
|
88
|
+
if (!violation.line) {
|
|
89
|
+
return { fixed: false, message: 'Cannot determine line number' };
|
|
90
|
+
}
|
|
91
|
+
const lineIndex = violation.line - 1;
|
|
92
|
+
let line = lines[lineIndex];
|
|
93
|
+
// Replace : any with : unknown
|
|
94
|
+
if (line.includes(': any')) {
|
|
95
|
+
line = line.replace(/:\s*any\b/g, ': unknown');
|
|
96
|
+
lines[lineIndex] = line;
|
|
97
|
+
fs.writeFileSync(filePath, lines.join('\n'), 'utf-8');
|
|
98
|
+
return { fixed: true, message: 'Changed any → unknown' };
|
|
99
|
+
}
|
|
100
|
+
// Replace any[] with unknown[]
|
|
101
|
+
if (line.includes('any[]')) {
|
|
102
|
+
line = line.replace(/\bany\[\]/g, 'unknown[]');
|
|
103
|
+
lines[lineIndex] = line;
|
|
104
|
+
fs.writeFileSync(filePath, lines.join('\n'), 'utf-8');
|
|
105
|
+
return { fixed: true, message: 'Changed any[] → unknown[]' };
|
|
106
|
+
}
|
|
107
|
+
return { fixed: false, message: 'Complex any usage - manual fix required' };
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Add alt="" to images
|
|
111
|
+
*/
|
|
112
|
+
function fixMissingAlt(lines, violation, filePath) {
|
|
113
|
+
if (!violation.line) {
|
|
114
|
+
return { fixed: false, message: 'Cannot determine line number' };
|
|
115
|
+
}
|
|
116
|
+
const lineIndex = violation.line - 1;
|
|
117
|
+
let line = lines[lineIndex];
|
|
118
|
+
// Add alt="" before the closing />
|
|
119
|
+
if (/<img\b/.test(line) && !/alt\s*=/.test(line)) {
|
|
120
|
+
// Add alt before />
|
|
121
|
+
line = line.replace(/\/>/, ' alt="" />');
|
|
122
|
+
// Or before >
|
|
123
|
+
line = line.replace(/([^/])>/, '$1 alt="">');
|
|
124
|
+
lines[lineIndex] = line;
|
|
125
|
+
fs.writeFileSync(filePath, lines.join('\n'), 'utf-8');
|
|
126
|
+
return { fixed: true, message: 'Added alt="" attribute' };
|
|
127
|
+
}
|
|
128
|
+
return { fixed: false, message: 'Could not add alt attribute' };
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Add type="button" to buttons
|
|
132
|
+
*/
|
|
133
|
+
function fixButtonType(lines, violation, filePath) {
|
|
134
|
+
if (!violation.line) {
|
|
135
|
+
return { fixed: false, message: 'Cannot determine line number' };
|
|
136
|
+
}
|
|
137
|
+
const lineIndex = violation.line - 1;
|
|
138
|
+
let line = lines[lineIndex];
|
|
139
|
+
// Add type="button" to <button>
|
|
140
|
+
if (/<button\b/.test(line) && !/type\s*=/.test(line)) {
|
|
141
|
+
line = line.replace(/<button/, '<button type="button"');
|
|
142
|
+
lines[lineIndex] = line;
|
|
143
|
+
fs.writeFileSync(filePath, lines.join('\n'), 'utf-8');
|
|
144
|
+
return { fixed: true, message: 'Added type="button" attribute' };
|
|
145
|
+
}
|
|
146
|
+
return { fixed: false, message: 'Could not add type attribute' };
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Auto-fix all fixable violations in a list
|
|
150
|
+
*/
|
|
151
|
+
function autoFixAll(violations, rootDir) {
|
|
152
|
+
const results = [];
|
|
153
|
+
let fixed = 0;
|
|
154
|
+
let failed = 0;
|
|
155
|
+
// Group by file to avoid multiple reads/writes
|
|
156
|
+
const byFile = new Map();
|
|
157
|
+
for (const v of violations) {
|
|
158
|
+
const existing = byFile.get(v.file) || [];
|
|
159
|
+
existing.push(v);
|
|
160
|
+
byFile.set(v.file, existing);
|
|
161
|
+
}
|
|
162
|
+
for (const [file, fileViolations] of byFile) {
|
|
163
|
+
const fullPath = `${rootDir}/${file}`;
|
|
164
|
+
for (const violation of fileViolations) {
|
|
165
|
+
const result = autoFixViolation(violation, fullPath);
|
|
166
|
+
results.push({ violation, result });
|
|
167
|
+
if (result.fixed) {
|
|
168
|
+
fixed++;
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
failed++;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return { fixed, failed, results };
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=auto-fixer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-fixer.js","sourceRoot":"","sources":["../../../scripts/utils/auto-fixer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ============================================================================
|
|
3
|
+
* bypass-manager.ts — Bypass audit logging with authentication
|
|
4
|
+
* ============================================================================
|
|
5
|
+
*
|
|
6
|
+
* Tracks all bypass attempts with:
|
|
7
|
+
* - Author name (from git config)
|
|
8
|
+
* - Timestamp
|
|
9
|
+
* - Reason
|
|
10
|
+
* - Password verification
|
|
11
|
+
* - Commit hash
|
|
12
|
+
*
|
|
13
|
+
* Bypass log saved to: .code-guardian/bypass-log.json
|
|
14
|
+
*/
|
|
15
|
+
export interface BypassEntry {
|
|
16
|
+
/** Unique ID for this bypass */
|
|
17
|
+
id: string;
|
|
18
|
+
/** Git author name */
|
|
19
|
+
author: string;
|
|
20
|
+
/** Git author email */
|
|
21
|
+
email: string;
|
|
22
|
+
/** When the bypass occurred */
|
|
23
|
+
timestamp: string;
|
|
24
|
+
/** Reason for bypass */
|
|
25
|
+
reason: string;
|
|
26
|
+
/** Commit message */
|
|
27
|
+
commitMessage: string;
|
|
28
|
+
/** Commit hash (after commit) */
|
|
29
|
+
commitHash?: string;
|
|
30
|
+
/** Branch name */
|
|
31
|
+
branch: string;
|
|
32
|
+
/** Files that were bypassed */
|
|
33
|
+
files: string[];
|
|
34
|
+
/** How bypass was triggered (message flag or env var) */
|
|
35
|
+
method: 'commit-message' | 'env-variable' | 'password';
|
|
36
|
+
}
|
|
37
|
+
export interface BypassLog {
|
|
38
|
+
/** All bypass entries */
|
|
39
|
+
entries: BypassEntry[];
|
|
40
|
+
/** Last updated timestamp */
|
|
41
|
+
lastUpdated: string;
|
|
42
|
+
/** Integrity checksum to detect tampering */
|
|
43
|
+
checksum?: string;
|
|
44
|
+
/** Flag indicating if log is immutable (cannot be deleted) */
|
|
45
|
+
immutable: boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Verify a password against the stored hash
|
|
49
|
+
*/
|
|
50
|
+
export declare function verifyBypassPassword(password: string): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Set a new bypass password
|
|
53
|
+
*/
|
|
54
|
+
export declare function setBypassPassword(newPassword: string): void;
|
|
55
|
+
/**
|
|
56
|
+
* Verify admin password
|
|
57
|
+
*/
|
|
58
|
+
export declare function verifyAdminPassword(password: string): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Set a new admin password
|
|
61
|
+
*/
|
|
62
|
+
export declare function setAdminPassword(newPassword: string): void;
|
|
63
|
+
/**
|
|
64
|
+
* Record a bypass attempt in the audit log
|
|
65
|
+
*/
|
|
66
|
+
export declare function recordBypass(reason: string, commitMessage: string, method: 'commit-message' | 'env-variable' | 'password'): void;
|
|
67
|
+
/**
|
|
68
|
+
* Update a bypass entry with the commit hash after commit succeeds
|
|
69
|
+
*/
|
|
70
|
+
export declare function updateBypassWithCommitHash(entryId: string, commitHash: string): void;
|
|
71
|
+
/**
|
|
72
|
+
* Get all bypass entries for a specific author
|
|
73
|
+
*/
|
|
74
|
+
export declare function getBypassesByAuthor(authorEmail: string): BypassEntry[];
|
|
75
|
+
/**
|
|
76
|
+
* Get recent bypass entries (last N days)
|
|
77
|
+
*/
|
|
78
|
+
export declare function getRecentBypasses(days?: number): BypassEntry[];
|
|
79
|
+
/**
|
|
80
|
+
* Delete bypass entries (ADMIN ONLY)
|
|
81
|
+
* @param entryIds - Array of entry IDs to delete
|
|
82
|
+
* @param adminPassword - Admin password for verification
|
|
83
|
+
* @returns Success status and message
|
|
84
|
+
*/
|
|
85
|
+
export declare function deleteBypassEntries(entryIds: string[], adminPassword: string): {
|
|
86
|
+
success: boolean;
|
|
87
|
+
message: string;
|
|
88
|
+
deletedCount: number;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Get all archived logs (deleted and tampered)
|
|
92
|
+
*/
|
|
93
|
+
export declare function getArchivedLogs(): {
|
|
94
|
+
deleted: string[];
|
|
95
|
+
tampered: string[];
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Generate a bypass audit report
|
|
99
|
+
*/
|
|
100
|
+
export declare function generateBypassReport(): string;
|
|
101
|
+
//# sourceMappingURL=bypass-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bypass-manager.d.ts","sourceRoot":"","sources":["../../../scripts/utils/bypass-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,yDAAyD;IACzD,MAAM,EAAE,gBAAgB,GAAG,cAAc,GAAG,UAAU,CAAC;CACxD;AAED,MAAM,WAAW,SAAS;IACxB,yBAAyB;IACzB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,SAAS,EAAE,OAAO,CAAC;CACpB;AA8CD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAY3D;AA0BD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAa1D;AAgLD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,gBAAgB,GAAG,cAAc,GAAG,UAAU,GACrD,IAAI,CA4BN;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAQpF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,EAAE,CAGtE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,MAAW,GAAG,WAAW,EAAE,CAMlE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAAE,EAClB,aAAa,EAAE,MAAM,GACpB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAgD7D;AA6BD;;GAEG;AACH,wBAAgB,eAAe,IAAI;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAa3E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAsC7C"}
|