@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.
Files changed (107) hide show
  1. package/.husky/pre-commit +27 -0
  2. package/LICENSE +21 -0
  3. package/README.md +646 -0
  4. package/config/angular.config.ts +223 -0
  5. package/config/guidelines.config.ts +229 -0
  6. package/config/nextjs.config.ts +160 -0
  7. package/config/react.config.ts +330 -0
  8. package/dist/config/angular.config.d.ts +15 -0
  9. package/dist/config/angular.config.d.ts.map +1 -0
  10. package/dist/config/angular.config.js +187 -0
  11. package/dist/config/angular.config.js.map +1 -0
  12. package/dist/config/guidelines.config.d.ts +63 -0
  13. package/dist/config/guidelines.config.d.ts.map +1 -0
  14. package/dist/config/guidelines.config.js +167 -0
  15. package/dist/config/guidelines.config.js.map +1 -0
  16. package/dist/config/nextjs.config.d.ts +18 -0
  17. package/dist/config/nextjs.config.d.ts.map +1 -0
  18. package/dist/config/nextjs.config.js +133 -0
  19. package/dist/config/nextjs.config.js.map +1 -0
  20. package/dist/config/react.config.d.ts +15 -0
  21. package/dist/config/react.config.d.ts.map +1 -0
  22. package/dist/config/react.config.js +287 -0
  23. package/dist/config/react.config.js.map +1 -0
  24. package/dist/scripts/auto-fix.d.ts +16 -0
  25. package/dist/scripts/auto-fix.d.ts.map +1 -0
  26. package/dist/scripts/auto-fix.js +130 -0
  27. package/dist/scripts/auto-fix.js.map +1 -0
  28. package/dist/scripts/cli.d.ts +17 -0
  29. package/dist/scripts/cli.d.ts.map +1 -0
  30. package/dist/scripts/cli.js +255 -0
  31. package/dist/scripts/cli.js.map +1 -0
  32. package/dist/scripts/delete-bypass-logs.d.ts +17 -0
  33. package/dist/scripts/delete-bypass-logs.d.ts.map +1 -0
  34. package/dist/scripts/delete-bypass-logs.js +242 -0
  35. package/dist/scripts/delete-bypass-logs.js.map +1 -0
  36. package/dist/scripts/generate-doc.d.ts +18 -0
  37. package/dist/scripts/generate-doc.d.ts.map +1 -0
  38. package/dist/scripts/generate-doc.js +300 -0
  39. package/dist/scripts/generate-doc.js.map +1 -0
  40. package/dist/scripts/generate-pr-checklist.d.ts +20 -0
  41. package/dist/scripts/generate-pr-checklist.d.ts.map +1 -0
  42. package/dist/scripts/generate-pr-checklist.js +276 -0
  43. package/dist/scripts/generate-pr-checklist.js.map +1 -0
  44. package/dist/scripts/precommit-check.d.ts +23 -0
  45. package/dist/scripts/precommit-check.d.ts.map +1 -0
  46. package/dist/scripts/precommit-check.js +331 -0
  47. package/dist/scripts/precommit-check.js.map +1 -0
  48. package/dist/scripts/set-admin-password.d.ts +14 -0
  49. package/dist/scripts/set-admin-password.d.ts.map +1 -0
  50. package/dist/scripts/set-admin-password.js +116 -0
  51. package/dist/scripts/set-admin-password.js.map +1 -0
  52. package/dist/scripts/set-bypass-password.d.ts +11 -0
  53. package/dist/scripts/set-bypass-password.d.ts.map +1 -0
  54. package/dist/scripts/set-bypass-password.js +106 -0
  55. package/dist/scripts/set-bypass-password.js.map +1 -0
  56. package/dist/scripts/utils/auto-fixer.d.ts +28 -0
  57. package/dist/scripts/utils/auto-fixer.d.ts.map +1 -0
  58. package/dist/scripts/utils/auto-fixer.js +177 -0
  59. package/dist/scripts/utils/auto-fixer.js.map +1 -0
  60. package/dist/scripts/utils/bypass-manager.d.ts +101 -0
  61. package/dist/scripts/utils/bypass-manager.d.ts.map +1 -0
  62. package/dist/scripts/utils/bypass-manager.js +496 -0
  63. package/dist/scripts/utils/bypass-manager.js.map +1 -0
  64. package/dist/scripts/utils/code-analyzer.d.ts +34 -0
  65. package/dist/scripts/utils/code-analyzer.d.ts.map +1 -0
  66. package/dist/scripts/utils/code-analyzer.js +323 -0
  67. package/dist/scripts/utils/code-analyzer.js.map +1 -0
  68. package/dist/scripts/utils/file-checker.d.ts +93 -0
  69. package/dist/scripts/utils/file-checker.d.ts.map +1 -0
  70. package/dist/scripts/utils/file-checker.js +248 -0
  71. package/dist/scripts/utils/file-checker.js.map +1 -0
  72. package/dist/scripts/utils/logger.d.ts +26 -0
  73. package/dist/scripts/utils/logger.d.ts.map +1 -0
  74. package/dist/scripts/utils/logger.js +86 -0
  75. package/dist/scripts/utils/logger.js.map +1 -0
  76. package/dist/scripts/utils/project-detector.d.ts +34 -0
  77. package/dist/scripts/utils/project-detector.d.ts.map +1 -0
  78. package/dist/scripts/utils/project-detector.js +124 -0
  79. package/dist/scripts/utils/project-detector.js.map +1 -0
  80. package/dist/scripts/utils/rule-engine.d.ts +57 -0
  81. package/dist/scripts/utils/rule-engine.d.ts.map +1 -0
  82. package/dist/scripts/utils/rule-engine.js +158 -0
  83. package/dist/scripts/utils/rule-engine.js.map +1 -0
  84. package/dist/scripts/view-bypass-log.d.ts +13 -0
  85. package/dist/scripts/view-bypass-log.d.ts.map +1 -0
  86. package/dist/scripts/view-bypass-log.js +117 -0
  87. package/dist/scripts/view-bypass-log.js.map +1 -0
  88. package/package.json +74 -0
  89. package/scripts/auto-fix.ts +115 -0
  90. package/scripts/cli.ts +246 -0
  91. package/scripts/delete-bypass-logs.ts +253 -0
  92. package/scripts/generate-doc.ts +317 -0
  93. package/scripts/generate-pr-checklist.ts +285 -0
  94. package/scripts/precommit-check.ts +349 -0
  95. package/scripts/set-admin-password.ts +90 -0
  96. package/scripts/set-bypass-password.ts +80 -0
  97. package/scripts/utils/auto-fixer.ts +181 -0
  98. package/scripts/utils/bypass-manager.ts +566 -0
  99. package/scripts/utils/code-analyzer.ts +341 -0
  100. package/scripts/utils/file-checker.ts +253 -0
  101. package/scripts/utils/logger.ts +88 -0
  102. package/scripts/utils/project-detector.ts +115 -0
  103. package/scripts/utils/rule-engine.ts +186 -0
  104. package/scripts/view-bypass-log.ts +92 -0
  105. package/templates/feature-doc-api.md +101 -0
  106. package/templates/feature-doc-service.md +113 -0
  107. package/templates/feature-doc-ui.md +91 -0
@@ -0,0 +1,242 @@
1
+ #!/usr/bin/env ts-node
2
+ "use strict";
3
+ /**
4
+ * ============================================================================
5
+ * delete-bypass-logs.ts — Delete bypass log entries (ADMIN ONLY)
6
+ * ============================================================================
7
+ *
8
+ * Requires admin password to delete entries from bypass log.
9
+ * Deleted entries are automatically archived for audit trail.
10
+ *
11
+ * Usage:
12
+ * npm run delete-bypass-logs
13
+ * npm run delete-bypass-logs -- --id="entry-uuid"
14
+ * npm run delete-bypass-logs -- --author="john@example.com"
15
+ * npm run delete-bypass-logs -- --before="2024-01-01"
16
+ */
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || (function () {
34
+ var ownKeys = function(o) {
35
+ ownKeys = Object.getOwnPropertyNames || function (o) {
36
+ var ar = [];
37
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
38
+ return ar;
39
+ };
40
+ return ownKeys(o);
41
+ };
42
+ return function (mod) {
43
+ if (mod && mod.__esModule) return mod;
44
+ var result = {};
45
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
46
+ __setModuleDefault(result, mod);
47
+ return result;
48
+ };
49
+ })();
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ const bypass_manager_1 = require("./utils/bypass-manager");
52
+ const readline = __importStar(require("readline"));
53
+ const fs = __importStar(require("fs"));
54
+ const path = __importStar(require("path"));
55
+ function promptPassword(question) {
56
+ return new Promise((resolve) => {
57
+ const rl = readline.createInterface({
58
+ input: process.stdin,
59
+ output: process.stdout,
60
+ });
61
+ const stdin = process.stdin;
62
+ stdin.setRawMode(true);
63
+ let password = '';
64
+ process.stdout.write(question);
65
+ stdin.on('data', (char) => {
66
+ const str = char.toString('utf-8');
67
+ if (str === '\n' || str === '\r' || str === '\u0004') {
68
+ stdin.setRawMode(false);
69
+ process.stdout.write('\n');
70
+ rl.close();
71
+ resolve(password);
72
+ }
73
+ else if (str === '\u0003') {
74
+ // Ctrl+C
75
+ process.exit(1);
76
+ }
77
+ else if (str === '\u007f' || str === '\b') {
78
+ // Backspace
79
+ if (password.length > 0) {
80
+ password = password.slice(0, -1);
81
+ process.stdout.write('\b \b');
82
+ }
83
+ }
84
+ else {
85
+ password += str;
86
+ process.stdout.write('*');
87
+ }
88
+ });
89
+ });
90
+ }
91
+ function promptConfirmation(question) {
92
+ return new Promise((resolve) => {
93
+ const rl = readline.createInterface({
94
+ input: process.stdin,
95
+ output: process.stdout,
96
+ });
97
+ rl.question(question, (answer) => {
98
+ rl.close();
99
+ resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
100
+ });
101
+ });
102
+ }
103
+ function parseArgs() {
104
+ const args = process.argv.slice(2);
105
+ const opts = {};
106
+ for (const arg of args) {
107
+ const [key, ...valueParts] = arg.replace(/^--/, '').split('=');
108
+ const value = valueParts.join('=').replace(/^["']|["']$/g, '');
109
+ switch (key) {
110
+ case 'id':
111
+ opts.id = value;
112
+ break;
113
+ case 'author':
114
+ opts.author = value;
115
+ break;
116
+ case 'before':
117
+ opts.before = value;
118
+ break;
119
+ }
120
+ }
121
+ return opts;
122
+ }
123
+ function loadBypassLog() {
124
+ const logPath = path.join(process.cwd(), '.code-guardian', 'bypass-log.json');
125
+ if (!fs.existsSync(logPath)) {
126
+ return [];
127
+ }
128
+ try {
129
+ const content = fs.readFileSync(logPath, 'utf-8');
130
+ const log = JSON.parse(content);
131
+ return log.entries || [];
132
+ }
133
+ catch {
134
+ return [];
135
+ }
136
+ }
137
+ async function main() {
138
+ console.log('🗑️ Code Guardian — Delete Bypass Logs (ADMIN ONLY)\n');
139
+ console.log('⚠️ WARNING: This operation requires admin authentication.');
140
+ console.log(' Deleted entries will be archived for audit purposes.\n');
141
+ const opts = parseArgs();
142
+ const allEntries = loadBypassLog();
143
+ if (allEntries.length === 0) {
144
+ console.log('ℹ️ No bypass entries found in the log.');
145
+ return;
146
+ }
147
+ let entriesToDelete = [];
148
+ if (opts.id) {
149
+ // Delete specific entry by ID
150
+ const entry = allEntries.find((e) => e.id === opts.id);
151
+ if (!entry) {
152
+ console.error(`❌ Entry with ID "${opts.id}" not found.`);
153
+ process.exit(1);
154
+ }
155
+ entriesToDelete = [entry];
156
+ console.log(`Found entry to delete:`);
157
+ console.log(` • ID: ${entry.id}`);
158
+ console.log(` • Author: ${entry.author} <${entry.email}>`);
159
+ console.log(` • Date: ${new Date(entry.timestamp).toLocaleString()}`);
160
+ console.log(` • Reason: ${entry.reason}\n`);
161
+ }
162
+ else if (opts.author) {
163
+ // Delete entries by author
164
+ entriesToDelete = allEntries.filter((e) => e.email === opts.author || e.author === opts.author);
165
+ if (entriesToDelete.length === 0) {
166
+ console.error(`❌ No entries found for author "${opts.author}".`);
167
+ process.exit(1);
168
+ }
169
+ console.log(`Found ${entriesToDelete.length} entry(ies) by ${opts.author}:\n`);
170
+ entriesToDelete.forEach((entry) => {
171
+ console.log(` • ${new Date(entry.timestamp).toLocaleString()} - ${entry.reason}`);
172
+ });
173
+ console.log('');
174
+ }
175
+ else if (opts.before) {
176
+ // Delete entries before a certain date
177
+ const cutoffDate = new Date(opts.before);
178
+ if (isNaN(cutoffDate.getTime())) {
179
+ console.error(`❌ Invalid date format: "${opts.before}"`);
180
+ process.exit(1);
181
+ }
182
+ entriesToDelete = allEntries.filter((e) => new Date(e.timestamp) < cutoffDate);
183
+ if (entriesToDelete.length === 0) {
184
+ console.error(`❌ No entries found before ${cutoffDate.toLocaleDateString()}.`);
185
+ process.exit(1);
186
+ }
187
+ console.log(`Found ${entriesToDelete.length} entry(ies) before ${cutoffDate.toLocaleDateString()}:\n`);
188
+ entriesToDelete.slice(0, 5).forEach((entry) => {
189
+ console.log(` • ${new Date(entry.timestamp).toLocaleString()} - ${entry.author}`);
190
+ });
191
+ if (entriesToDelete.length > 5) {
192
+ console.log(` ... and ${entriesToDelete.length - 5} more\n`);
193
+ }
194
+ }
195
+ else {
196
+ // Interactive mode: show all entries
197
+ console.log('Available entries:\n');
198
+ allEntries.forEach((entry, index) => {
199
+ console.log(`${index + 1}. ${new Date(entry.timestamp).toLocaleString()}`);
200
+ console.log(` Author: ${entry.author} <${entry.email}>`);
201
+ console.log(` Reason: ${entry.reason}`);
202
+ console.log(` ID: ${entry.id}\n`);
203
+ });
204
+ const confirmed = await promptConfirmation('Enter entry number(s) to delete (comma-separated) or "all": ');
205
+ if (!confirmed) {
206
+ console.log('Operation cancelled.');
207
+ return;
208
+ }
209
+ // For simplicity in interactive mode, we'll just exit with instructions
210
+ console.log('\n📝 To delete specific entries, use:');
211
+ console.log(' npm run delete-bypass-logs -- --id="<entry-id>"');
212
+ console.log(' npm run delete-bypass-logs -- --author="<email>"');
213
+ console.log(' npm run delete-bypass-logs -- --before="YYYY-MM-DD"');
214
+ return;
215
+ }
216
+ // Confirm deletion
217
+ const confirmDelete = await promptConfirmation(`❗ Are you sure you want to delete ${entriesToDelete.length} entry(ies)? (y/N): `);
218
+ if (!confirmDelete) {
219
+ console.log('Operation cancelled.');
220
+ return;
221
+ }
222
+ // Request admin password
223
+ console.log('');
224
+ const adminPassword = await promptPassword('Enter admin password: ');
225
+ if (!adminPassword) {
226
+ console.error('\n❌ Password is required.');
227
+ process.exit(1);
228
+ }
229
+ // Attempt deletion
230
+ const entryIds = entriesToDelete.map((e) => e.id);
231
+ const result = (0, bypass_manager_1.deleteBypassEntries)(entryIds, adminPassword);
232
+ console.log('\n' + result.message);
233
+ if (result.success) {
234
+ console.log(`📊 Remaining entries: ${allEntries.length - result.deletedCount}`);
235
+ console.log('📦 Deleted entries have been archived for audit purposes.');
236
+ }
237
+ }
238
+ main().catch((err) => {
239
+ console.error(`Error: ${err.message}`);
240
+ process.exit(1);
241
+ });
242
+ //# sourceMappingURL=delete-bypass-logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-bypass-logs.js","sourceRoot":"","sources":["../../scripts/delete-bypass-logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * ============================================================================
3
+ * generate-doc.ts — Feature documentation generator
4
+ * ============================================================================
5
+ *
6
+ * Generates Markdown feature documentation from templates.
7
+ * Supports multiple template types: ui, api, service.
8
+ *
9
+ * Usage:
10
+ * npm run generate-doc -- --name="my-feature" --type=ui
11
+ * npm run generate-doc -- --name="auth-api" --type=api
12
+ * npm run generate-doc -- --name="user-service" --type=service
13
+ *
14
+ * Templates live in /templates/feature-doc-{type}.md
15
+ * Output goes to /docs/features/{name}.md
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=generate-doc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-doc.d.ts","sourceRoot":"","sources":["../../scripts/generate-doc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
@@ -0,0 +1,300 @@
1
+ "use strict";
2
+ /**
3
+ * ============================================================================
4
+ * generate-doc.ts — Feature documentation generator
5
+ * ============================================================================
6
+ *
7
+ * Generates Markdown feature documentation from templates.
8
+ * Supports multiple template types: ui, api, service.
9
+ *
10
+ * Usage:
11
+ * npm run generate-doc -- --name="my-feature" --type=ui
12
+ * npm run generate-doc -- --name="auth-api" --type=api
13
+ * npm run generate-doc -- --name="user-service" --type=service
14
+ *
15
+ * Templates live in /templates/feature-doc-{type}.md
16
+ * Output goes to /docs/features/{name}.md
17
+ */
18
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ var desc = Object.getOwnPropertyDescriptor(m, k);
21
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
22
+ desc = { enumerable: true, get: function() { return m[k]; } };
23
+ }
24
+ Object.defineProperty(o, k2, desc);
25
+ }) : (function(o, m, k, k2) {
26
+ if (k2 === undefined) k2 = k;
27
+ o[k2] = m[k];
28
+ }));
29
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
30
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
31
+ }) : function(o, v) {
32
+ o["default"] = v;
33
+ });
34
+ var __importStar = (this && this.__importStar) || (function () {
35
+ var ownKeys = function(o) {
36
+ ownKeys = Object.getOwnPropertyNames || function (o) {
37
+ var ar = [];
38
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
39
+ return ar;
40
+ };
41
+ return ownKeys(o);
42
+ };
43
+ return function (mod) {
44
+ if (mod && mod.__esModule) return mod;
45
+ var result = {};
46
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
47
+ __setModuleDefault(result, mod);
48
+ return result;
49
+ };
50
+ })();
51
+ Object.defineProperty(exports, "__esModule", { value: true });
52
+ const fs = __importStar(require("fs"));
53
+ const path = __importStar(require("path"));
54
+ const logger = __importStar(require("./utils/logger"));
55
+ const code_analyzer_1 = require("./utils/code-analyzer");
56
+ // ── Argument parsing ────────────────────────────────────────────────────────
57
+ /**
58
+ * Parse CLI arguments into DocOptions.
59
+ * Expected format: --name="feature-name" --type=ui [--description="..."] [--author="..."]
60
+ */
61
+ function parseArgs() {
62
+ const args = process.argv.slice(2);
63
+ const opts = {};
64
+ for (const arg of args) {
65
+ const [key, ...valueParts] = arg.replace(/^--/, '').split('=');
66
+ const value = valueParts.join('=').replace(/^["']|["']$/g, ''); // Remove surrounding quotes
67
+ switch (key) {
68
+ case 'name':
69
+ opts.name = value;
70
+ break;
71
+ case 'type':
72
+ if (['ui', 'api', 'service'].includes(value)) {
73
+ opts.type = value;
74
+ }
75
+ else {
76
+ logger.error(`Invalid type "${value}". Expected: ui, api, or service.`);
77
+ process.exit(1);
78
+ }
79
+ break;
80
+ case 'description':
81
+ opts.description = value;
82
+ break;
83
+ case 'author':
84
+ opts.author = value;
85
+ break;
86
+ case 'auto':
87
+ opts.auto = value === 'true' || value === '' || !value; // --auto or --auto=true
88
+ break;
89
+ case 'file':
90
+ opts.file = value;
91
+ break;
92
+ }
93
+ }
94
+ // Validate required fields
95
+ if (!opts.name) {
96
+ logger.error('Missing required argument: --name="feature-name"');
97
+ logger.dim('Usage: npm run generate-doc -- --name="my-feature" --type=ui');
98
+ process.exit(1);
99
+ }
100
+ if (!opts.type) {
101
+ logger.warn('No --type specified, defaulting to "ui".');
102
+ opts.type = 'ui';
103
+ }
104
+ return opts;
105
+ }
106
+ // ── Template processing ─────────────────────────────────────────────────────
107
+ /**
108
+ * Load and process a template file, replacing placeholders with actual values.
109
+ *
110
+ * Supported placeholders:
111
+ * {{FEATURE_NAME}} — The feature name (kebab-case)
112
+ * {{FEATURE_TITLE}} — The feature name in Title Case
113
+ * {{DATE}} — Today's date in YYYY-MM-DD format
114
+ * {{AUTHOR}} — Author name (or "Team" if not provided)
115
+ * {{DESCRIPTION}} — Pre-filled description (or placeholder text)
116
+ * {{DOC_TYPE}} — The template type (ui, api, service)
117
+ */
118
+ function processTemplate(templatePath, opts) {
119
+ if (!fs.existsSync(templatePath)) {
120
+ logger.error(`Template not found: ${templatePath}`);
121
+ logger.dim('Available templates:');
122
+ logger.dim(' templates/feature-doc-ui.md');
123
+ logger.dim(' templates/feature-doc-api.md');
124
+ logger.dim(' templates/feature-doc-service.md');
125
+ process.exit(1);
126
+ }
127
+ let content = fs.readFileSync(templatePath, 'utf-8');
128
+ // Convert kebab-case to Title Case
129
+ const titleCase = opts.name
130
+ .split('-')
131
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
132
+ .join(' ');
133
+ // Today's date
134
+ const today = new Date().toISOString().split('T')[0];
135
+ // Replace all placeholders
136
+ const replacements = {
137
+ '{{FEATURE_NAME}}': opts.name,
138
+ '{{FEATURE_TITLE}}': titleCase,
139
+ '{{DATE}}': today,
140
+ '{{AUTHOR}}': opts.author || 'Team',
141
+ '{{DESCRIPTION}}': opts.description || 'TODO: Add feature description here.',
142
+ '{{DOC_TYPE}}': opts.type,
143
+ };
144
+ for (const [placeholder, value] of Object.entries(replacements)) {
145
+ content = content.replace(new RegExp(placeholder.replace(/[{}]/g, '\\$&'), 'g'), value);
146
+ }
147
+ return content;
148
+ }
149
+ /**
150
+ * Generate documentation automatically from code analysis
151
+ */
152
+ function generateFromCode(componentInfo, opts) {
153
+ const today = new Date().toISOString().split('T')[0];
154
+ const titleCase = componentInfo.name
155
+ .replace(/([A-Z])/g, ' $1')
156
+ .trim();
157
+ let doc = `# ${titleCase}\n\n`;
158
+ doc += `> **Type**: UI Component \n`;
159
+ doc += `> **Created**: ${today} \n`;
160
+ doc += `> **Author**: ${opts.author || 'Team'} \n`;
161
+ doc += `> **Status**: ✅ Auto-generated\n\n`;
162
+ doc += `---\n\n`;
163
+ // Description
164
+ doc += `## 📝 Description\n\n`;
165
+ if (componentInfo.description) {
166
+ doc += `${componentInfo.description}\n\n`;
167
+ }
168
+ else {
169
+ doc += `_Auto-generated from \`${path.basename(componentInfo.filePath)}\`_\n\n`;
170
+ }
171
+ // Usage
172
+ doc += `## 🚀 Usage\n\n`;
173
+ doc += `\`\`\`tsx\n`;
174
+ doc += `import { ${componentInfo.name} } from './${path.basename(componentInfo.filePath, path.extname(componentInfo.filePath))}';\n\n`;
175
+ if (componentInfo.props.length > 0) {
176
+ doc += `<${componentInfo.name}\n`;
177
+ componentInfo.props.slice(0, 3).forEach(prop => {
178
+ const example = getExampleValue(prop.type);
179
+ doc += ` ${prop.name}={${example}}\n`;
180
+ });
181
+ if (componentInfo.props.length > 3) {
182
+ doc += ` // ... more props\n`;
183
+ }
184
+ doc += `/>\n`;
185
+ }
186
+ else {
187
+ doc += `<${componentInfo.name} />\n`;
188
+ }
189
+ doc += `\`\`\`\n\n`;
190
+ // Props table
191
+ if (componentInfo.props.length > 0) {
192
+ doc += `## 📥 Props\n\n`;
193
+ doc += `| Name | Type | Required | Default | Description |\n`;
194
+ doc += `|------|------|----------|---------|-------------|\n`;
195
+ componentInfo.props.forEach(prop => {
196
+ const req = prop.required ? '✅ Yes' : 'No';
197
+ const def = prop.defaultValue || '-';
198
+ const desc = prop.description || '-';
199
+ doc += `| \`${prop.name}\` | \`${prop.type}\` | ${req} | \`${def}\` | ${desc} |\n`;
200
+ });
201
+ doc += `\n`;
202
+ }
203
+ // Footer
204
+ doc += `## 📝 Notes\n\n`;
205
+ doc += `- Auto-generated from code analysis\n`;
206
+ doc += `- Source file: \`${componentInfo.filePath}\`\n`;
207
+ doc += `- Last analyzed: ${today}\n\n`;
208
+ doc += `---\n\n`;
209
+ doc += `_Generated by Code Guardian — Auto-analysis_\n`;
210
+ return doc;
211
+ }
212
+ /**
213
+ * Get example value for a type
214
+ */
215
+ function getExampleValue(type) {
216
+ if (type.includes('string'))
217
+ return '"example"';
218
+ if (type.includes('number'))
219
+ return '42';
220
+ if (type.includes('boolean'))
221
+ return 'true';
222
+ if (type.includes('Function') || type.includes('=>'))
223
+ return '{handleClick}';
224
+ if (type.includes('[]'))
225
+ return '[]';
226
+ if (type.includes('{}') || type.includes('object'))
227
+ return '{{}}';
228
+ return '...';
229
+ }
230
+ // ── Main ────────────────────────────────────────────────────────────────────
231
+ function main() {
232
+ logger.header('📄 Code Guardian — Feature Doc Generator');
233
+ const opts = parseArgs();
234
+ logger.info(`Generating "${opts.type}" doc for feature: "${opts.name}"`);
235
+ // Resolve paths
236
+ const rootDir = process.cwd();
237
+ const outputDir = path.join(rootDir, 'docs', 'features');
238
+ const outputPath = path.join(outputDir, `${opts.name}.md`);
239
+ // Create output directory if needed
240
+ if (!fs.existsSync(outputDir)) {
241
+ fs.mkdirSync(outputDir, { recursive: true });
242
+ logger.dim(`Created directory: ${outputDir}`);
243
+ }
244
+ // Check if doc already exists
245
+ if (fs.existsSync(outputPath)) {
246
+ logger.warn(`Doc already exists: ${outputPath}`);
247
+ logger.warn('Overwriting with fresh content...');
248
+ }
249
+ let content;
250
+ // Auto-analyze mode
251
+ if (opts.auto) {
252
+ logger.info('Auto-analysis mode enabled — analyzing code...');
253
+ // Find component file
254
+ let componentPath = opts.file;
255
+ if (!componentPath) {
256
+ logger.dim(`Searching for ${opts.name} component...`);
257
+ const foundPath = (0, code_analyzer_1.findComponentFile)(opts.name, rootDir);
258
+ componentPath = foundPath || undefined;
259
+ if (!componentPath) {
260
+ logger.error(`Could not find component file for "${opts.name}"`);
261
+ logger.dim('Use --file="path/to/component.tsx" to specify manually');
262
+ logger.dim('Or use template mode: remove --auto flag');
263
+ process.exit(1);
264
+ }
265
+ logger.dim(`Found: ${componentPath}`);
266
+ }
267
+ // Analyze component
268
+ const componentInfo = (0, code_analyzer_1.analyzeComponent)(componentPath);
269
+ if (!componentInfo || !componentInfo.isReactComponent) {
270
+ logger.error(`Could not analyze component at ${componentPath}`);
271
+ logger.warn('Falling back to template mode...');
272
+ const templatePath = path.join(rootDir, 'templates', `feature-doc-${opts.type}.md`);
273
+ content = processTemplate(templatePath, opts);
274
+ }
275
+ else {
276
+ logger.success(`Analyzed ${componentInfo.name} — found ${componentInfo.props.length} prop(s)`);
277
+ content = generateFromCode(componentInfo, opts);
278
+ }
279
+ }
280
+ else {
281
+ // Template mode
282
+ const templatePath = path.join(rootDir, 'templates', `feature-doc-${opts.type}.md`);
283
+ content = processTemplate(templatePath, opts);
284
+ }
285
+ // Write output
286
+ fs.writeFileSync(outputPath, content, 'utf-8');
287
+ logger.success(`Feature doc generated: ${outputPath}`);
288
+ if (!opts.auto) {
289
+ logger.dim('');
290
+ logger.dim('Next steps:');
291
+ logger.dim(` 1. Open ${outputPath} and fill in the details`);
292
+ logger.dim(' 2. Add it to your commit');
293
+ logger.dim(' 3. The PR checklist will verify doc completeness');
294
+ logger.dim('');
295
+ logger.dim('💡 Tip: Use --auto flag to auto-generate from code!');
296
+ }
297
+ }
298
+ // ── Execute ─────────────────────────────────────────────────────────────────
299
+ main();
300
+ //# sourceMappingURL=generate-doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-doc.js","sourceRoot":"","sources":["../../scripts/generate-doc.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,uDAAyC;AACzC,yDAA2F;AAqB3F,+EAA+E;AAE/E;;;GAGG;AACH,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAwB,EAAE,CAAC;IAErC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,4BAA4B;QAE5F,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7C,IAAI,CAAC,IAAI,GAAG,KAAgB,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,KAAK,CAAC,iBAAiB,KAAK,mCAAmC,CAAC,CAAC;oBACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,MAAM;YACR,KAAK,aAAa;gBAChB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBACzB,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,GAAG,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,wBAAwB;gBAChF,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,MAAM;QACV,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,OAAO,IAAkB,CAAC;AAC5B,CAAC;AAED,+EAA+E;AAE/E;;;;;;;;;;GAUG;AACH,SAAS,eAAe,CAAC,YAAoB,EAAE,IAAgB;IAC7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,uBAAuB,YAAY,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAErD,mCAAmC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI;SACxB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,eAAe;IACf,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAErD,2BAA2B;IAC3B,MAAM,YAAY,GAA2B;QAC3C,kBAAkB,EAAE,IAAI,CAAC,IAAI;QAC7B,mBAAmB,EAAE,SAAS;QAC9B,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM;QACnC,iBAAiB,EAAE,IAAI,CAAC,WAAW,IAAI,qCAAqC;QAC5E,cAAc,EAAE,IAAI,CAAC,IAAI;KAC1B,CAAC;IAEF,KAAK,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAChE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,aAA4B,EAAE,IAAgB;IACtE,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI;SACjC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,IAAI,EAAE,CAAC;IAEV,IAAI,GAAG,GAAG,KAAK,SAAS,MAAM,CAAC;IAC/B,GAAG,IAAI,8BAA8B,CAAC;IACtC,GAAG,IAAI,kBAAkB,KAAK,MAAM,CAAC;IACrC,GAAG,IAAI,iBAAiB,IAAI,CAAC,MAAM,IAAI,MAAM,MAAM,CAAC;IACpD,GAAG,IAAI,oCAAoC,CAAC;IAC5C,GAAG,IAAI,SAAS,CAAC;IAEjB,cAAc;IACd,GAAG,IAAI,uBAAuB,CAAC;IAC/B,IAAI,aAAa,CAAC,WAAW,EAAE,CAAC;QAC9B,GAAG,IAAI,GAAG,aAAa,CAAC,WAAW,MAAM,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,GAAG,IAAI,0BAA0B,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;IAClF,CAAC;IAED,QAAQ;IACR,GAAG,IAAI,iBAAiB,CAAC;IACzB,GAAG,IAAI,aAAa,CAAC;IACrB,GAAG,IAAI,YAAY,aAAa,CAAC,IAAI,cAAc,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;IAEvI,IAAI,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,GAAG,IAAI,IAAI,aAAa,CAAC,IAAI,IAAI,CAAC;QAClC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC7C,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,GAAG,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,KAAK,CAAC;QACzC,CAAC,CAAC,CAAC;QACH,IAAI,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,GAAG,IAAI,uBAAuB,CAAC;QACjC,CAAC;QACD,GAAG,IAAI,MAAM,CAAC;IAChB,CAAC;SAAM,CAAC;QACN,GAAG,IAAI,IAAI,aAAa,CAAC,IAAI,OAAO,CAAC;IACvC,CAAC;IACD,GAAG,IAAI,YAAY,CAAC;IAEpB,cAAc;IACd,IAAI,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,GAAG,IAAI,iBAAiB,CAAC;QACzB,GAAG,IAAI,sDAAsD,CAAC;QAC9D,GAAG,IAAI,sDAAsD,CAAC;QAE9D,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,IAAI,GAAG,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC;YACrC,GAAG,IAAI,OAAO,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,QAAQ,GAAG,QAAQ,GAAG,QAAQ,IAAI,MAAM,CAAC;QACrF,CAAC,CAAC,CAAC;QACH,GAAG,IAAI,IAAI,CAAC;IACd,CAAC;IAED,SAAS;IACT,GAAG,IAAI,iBAAiB,CAAC;IACzB,GAAG,IAAI,uCAAuC,CAAC;IAC/C,GAAG,IAAI,oBAAoB,aAAa,CAAC,QAAQ,MAAM,CAAC;IACxD,GAAG,IAAI,oBAAoB,KAAK,MAAM,CAAC;IACvC,GAAG,IAAI,SAAS,CAAC;IACjB,GAAG,IAAI,gDAAgD,CAAC;IAExD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,WAAW,CAAC;IAChD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,MAAM,CAAC;IAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,eAAe,CAAC;IAC7E,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC;IAClE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAE/E,SAAS,IAAI;IACX,MAAM,CAAC,MAAM,CAAC,0CAA0C,CAAC,CAAC;IAE1D,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IAEzB,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,uBAAuB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IAEzE,gBAAgB;IAChB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;IAE3D,oCAAoC;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,8BAA8B;IAC9B,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,OAAe,CAAC;IAEpB,oBAAoB;IACpB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAE9D,sBAAsB;QACtB,IAAI,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,IAAI,eAAe,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,IAAA,iCAAiB,EAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxD,aAAa,GAAG,SAAS,IAAI,SAAS,CAAC;YAEvC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,CAAC,KAAK,CAAC,sCAAsC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;gBACjE,MAAM,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;gBACrE,MAAM,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;gBACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,UAAU,aAAa,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,oBAAoB;QACpB,MAAM,aAAa,GAAG,IAAA,gCAAgB,EAAC,aAAa,CAAC,CAAC;QAEtD,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,kCAAkC,aAAa,EAAE,CAAC,CAAC;YAChE,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAChD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,eAAe,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;YACpF,OAAO,GAAG,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,YAAY,aAAa,CAAC,IAAI,YAAY,aAAa,CAAC,KAAK,CAAC,MAAM,UAAU,CAAC,CAAC;YAC/F,OAAO,GAAG,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,gBAAgB;QAChB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,eAAe,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;QACpF,OAAO,GAAG,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,eAAe;IACf,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAE/C,MAAM,CAAC,OAAO,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;IAEvD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,aAAa,UAAU,0BAA0B,CAAC,CAAC;QAC9D,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,+EAA+E;AAE/E,IAAI,EAAE,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * ============================================================================
3
+ * generate-pr-checklist.ts — PR Checklist Generator
4
+ * ============================================================================
5
+ *
6
+ * Generates a Markdown checklist suitable for pasting into a GitHub PR
7
+ * description or comment. The checklist includes:
8
+ * - All active coding rules (grouped by category)
9
+ * - Feature doc verification
10
+ * - Pre-commit check result summary
11
+ *
12
+ * Usage:
13
+ * npm run generate-pr-checklist
14
+ * npm run generate-pr-checklist -- --output=pr-checklist.md
15
+ * npm run generate-pr-checklist -- --project=angular
16
+ */
17
+ import '../config/angular.config';
18
+ import '../config/react.config';
19
+ import '../config/nextjs.config';
20
+ //# sourceMappingURL=generate-pr-checklist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-pr-checklist.d.ts","sourceRoot":"","sources":["../../scripts/generate-pr-checklist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAaH,OAAO,0BAA0B,CAAC;AAClC,OAAO,wBAAwB,CAAC;AAChC,OAAO,yBAAyB,CAAC"}