@theglitchking/hit-em-with-the-docs 2.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 (200) hide show
  1. package/.claude-plugin/marketplace.json +46 -0
  2. package/.claude-plugin/plugin.json +114 -0
  3. package/LICENSE +21 -0
  4. package/MIGRATION.md +255 -0
  5. package/README.backup.md +714 -0
  6. package/README.md +869 -0
  7. package/action.yml +56 -0
  8. package/dist/action/action/index.d.ts +2 -0
  9. package/dist/action/action/index.d.ts.map +1 -0
  10. package/dist/action/cli/index.d.ts +3 -0
  11. package/dist/action/cli/index.d.ts.map +1 -0
  12. package/dist/action/core/audit/auditor.d.ts +43 -0
  13. package/dist/action/core/audit/auditor.d.ts.map +1 -0
  14. package/dist/action/core/audit/rules.d.ts +37 -0
  15. package/dist/action/core/audit/rules.d.ts.map +1 -0
  16. package/dist/action/core/discover/antipatterns.d.ts +24 -0
  17. package/dist/action/core/discover/antipatterns.d.ts.map +1 -0
  18. package/dist/action/core/discover/dependencies.d.ts +57 -0
  19. package/dist/action/core/discover/dependencies.d.ts.map +1 -0
  20. package/dist/action/core/discover/patterns.d.ts +38 -0
  21. package/dist/action/core/discover/patterns.d.ts.map +1 -0
  22. package/dist/action/core/discover/standards.d.ts +58 -0
  23. package/dist/action/core/discover/standards.d.ts.map +1 -0
  24. package/dist/action/core/domains/classifier.d.ts +41 -0
  25. package/dist/action/core/domains/classifier.d.ts.map +1 -0
  26. package/dist/action/core/domains/constants.d.ts +40 -0
  27. package/dist/action/core/domains/constants.d.ts.map +1 -0
  28. package/dist/action/core/domains/detector.d.ts +35 -0
  29. package/dist/action/core/domains/detector.d.ts.map +1 -0
  30. package/dist/action/core/integrate/integrator.d.ts +35 -0
  31. package/dist/action/core/integrate/integrator.d.ts.map +1 -0
  32. package/dist/action/core/links/checker.d.ts +64 -0
  33. package/dist/action/core/links/checker.d.ts.map +1 -0
  34. package/dist/action/core/links/tracker.d.ts +69 -0
  35. package/dist/action/core/links/tracker.d.ts.map +1 -0
  36. package/dist/action/core/maintain/orchestrator.d.ts +39 -0
  37. package/dist/action/core/maintain/orchestrator.d.ts.map +1 -0
  38. package/dist/action/core/metadata/generator.d.ts +26 -0
  39. package/dist/action/core/metadata/generator.d.ts.map +1 -0
  40. package/dist/action/core/metadata/schema.d.ts +201 -0
  41. package/dist/action/core/metadata/schema.d.ts.map +1 -0
  42. package/dist/action/core/metadata/sync.d.ts +36 -0
  43. package/dist/action/core/metadata/sync.d.ts.map +1 -0
  44. package/dist/action/generators/index-generator.d.ts +19 -0
  45. package/dist/action/generators/index-generator.d.ts.map +1 -0
  46. package/dist/action/generators/registry-generator.d.ts +11 -0
  47. package/dist/action/generators/registry-generator.d.ts.map +1 -0
  48. package/dist/action/generators/scaffold.d.ts +30 -0
  49. package/dist/action/generators/scaffold.d.ts.map +1 -0
  50. package/dist/action/generators/templates/document.d.ts +14 -0
  51. package/dist/action/generators/templates/document.d.ts.map +1 -0
  52. package/dist/action/generators/templates/domain-index.d.ts +6 -0
  53. package/dist/action/generators/templates/domain-index.d.ts.map +1 -0
  54. package/dist/action/generators/templates/domain-registry.d.ts +6 -0
  55. package/dist/action/generators/templates/domain-registry.d.ts.map +1 -0
  56. package/dist/action/index.d.ts +31 -0
  57. package/dist/action/index.d.ts.map +1 -0
  58. package/dist/action/index.js +17 -0
  59. package/dist/action/index.js.map +1 -0
  60. package/dist/action/package.json +3 -0
  61. package/dist/action/reports/audit-report.d.ts +15 -0
  62. package/dist/action/reports/audit-report.d.ts.map +1 -0
  63. package/dist/action/reports/health-report.d.ts +15 -0
  64. package/dist/action/reports/health-report.d.ts.map +1 -0
  65. package/dist/action/reports/link-report.d.ts +15 -0
  66. package/dist/action/reports/link-report.d.ts.map +1 -0
  67. package/dist/action/utils/frontmatter.d.ts +50 -0
  68. package/dist/action/utils/frontmatter.d.ts.map +1 -0
  69. package/dist/action/utils/glob.d.ts +63 -0
  70. package/dist/action/utils/glob.d.ts.map +1 -0
  71. package/dist/action/utils/logger.d.ts +42 -0
  72. package/dist/action/utils/logger.d.ts.map +1 -0
  73. package/dist/action/utils/markdown.d.ts +89 -0
  74. package/dist/action/utils/markdown.d.ts.map +1 -0
  75. package/dist/cli/index.d.ts +3 -0
  76. package/dist/cli/index.d.ts.map +1 -0
  77. package/dist/cli/index.js +287 -0
  78. package/dist/cli/index.js.map +1 -0
  79. package/dist/core/audit/auditor.d.ts +43 -0
  80. package/dist/core/audit/auditor.d.ts.map +1 -0
  81. package/dist/core/audit/auditor.js +273 -0
  82. package/dist/core/audit/auditor.js.map +1 -0
  83. package/dist/core/audit/rules.d.ts +37 -0
  84. package/dist/core/audit/rules.d.ts.map +1 -0
  85. package/dist/core/audit/rules.js +223 -0
  86. package/dist/core/audit/rules.js.map +1 -0
  87. package/dist/core/discover/antipatterns.d.ts +24 -0
  88. package/dist/core/discover/antipatterns.d.ts.map +1 -0
  89. package/dist/core/discover/antipatterns.js +354 -0
  90. package/dist/core/discover/antipatterns.js.map +1 -0
  91. package/dist/core/discover/dependencies.d.ts +57 -0
  92. package/dist/core/discover/dependencies.d.ts.map +1 -0
  93. package/dist/core/discover/dependencies.js +311 -0
  94. package/dist/core/discover/dependencies.js.map +1 -0
  95. package/dist/core/discover/patterns.d.ts +38 -0
  96. package/dist/core/discover/patterns.d.ts.map +1 -0
  97. package/dist/core/discover/patterns.js +371 -0
  98. package/dist/core/discover/patterns.js.map +1 -0
  99. package/dist/core/discover/standards.d.ts +58 -0
  100. package/dist/core/discover/standards.d.ts.map +1 -0
  101. package/dist/core/discover/standards.js +359 -0
  102. package/dist/core/discover/standards.js.map +1 -0
  103. package/dist/core/domains/classifier.d.ts +41 -0
  104. package/dist/core/domains/classifier.d.ts.map +1 -0
  105. package/dist/core/domains/classifier.js +208 -0
  106. package/dist/core/domains/classifier.js.map +1 -0
  107. package/dist/core/domains/constants.d.ts +40 -0
  108. package/dist/core/domains/constants.d.ts.map +1 -0
  109. package/dist/core/domains/constants.js +252 -0
  110. package/dist/core/domains/constants.js.map +1 -0
  111. package/dist/core/domains/detector.d.ts +35 -0
  112. package/dist/core/domains/detector.d.ts.map +1 -0
  113. package/dist/core/domains/detector.js +176 -0
  114. package/dist/core/domains/detector.js.map +1 -0
  115. package/dist/core/integrate/integrator.d.ts +35 -0
  116. package/dist/core/integrate/integrator.d.ts.map +1 -0
  117. package/dist/core/integrate/integrator.js +216 -0
  118. package/dist/core/integrate/integrator.js.map +1 -0
  119. package/dist/core/links/checker.d.ts +64 -0
  120. package/dist/core/links/checker.d.ts.map +1 -0
  121. package/dist/core/links/checker.js +190 -0
  122. package/dist/core/links/checker.js.map +1 -0
  123. package/dist/core/links/tracker.d.ts +69 -0
  124. package/dist/core/links/tracker.d.ts.map +1 -0
  125. package/dist/core/links/tracker.js +184 -0
  126. package/dist/core/links/tracker.js.map +1 -0
  127. package/dist/core/maintain/orchestrator.d.ts +39 -0
  128. package/dist/core/maintain/orchestrator.d.ts.map +1 -0
  129. package/dist/core/maintain/orchestrator.js +372 -0
  130. package/dist/core/maintain/orchestrator.js.map +1 -0
  131. package/dist/core/metadata/generator.d.ts +26 -0
  132. package/dist/core/metadata/generator.d.ts.map +1 -0
  133. package/dist/core/metadata/generator.js +221 -0
  134. package/dist/core/metadata/generator.js.map +1 -0
  135. package/dist/core/metadata/schema.d.ts +201 -0
  136. package/dist/core/metadata/schema.d.ts.map +1 -0
  137. package/dist/core/metadata/schema.js +184 -0
  138. package/dist/core/metadata/schema.js.map +1 -0
  139. package/dist/core/metadata/sync.d.ts +36 -0
  140. package/dist/core/metadata/sync.d.ts.map +1 -0
  141. package/dist/core/metadata/sync.js +195 -0
  142. package/dist/core/metadata/sync.js.map +1 -0
  143. package/dist/generators/index-generator.d.ts +19 -0
  144. package/dist/generators/index-generator.d.ts.map +1 -0
  145. package/dist/generators/index-generator.js +191 -0
  146. package/dist/generators/index-generator.js.map +1 -0
  147. package/dist/generators/registry-generator.d.ts +11 -0
  148. package/dist/generators/registry-generator.d.ts.map +1 -0
  149. package/dist/generators/registry-generator.js +156 -0
  150. package/dist/generators/registry-generator.js.map +1 -0
  151. package/dist/generators/scaffold.d.ts +30 -0
  152. package/dist/generators/scaffold.d.ts.map +1 -0
  153. package/dist/generators/scaffold.js +213 -0
  154. package/dist/generators/scaffold.js.map +1 -0
  155. package/dist/generators/templates/document.d.ts +14 -0
  156. package/dist/generators/templates/document.d.ts.map +1 -0
  157. package/dist/generators/templates/document.js +305 -0
  158. package/dist/generators/templates/document.js.map +1 -0
  159. package/dist/generators/templates/domain-index.d.ts +6 -0
  160. package/dist/generators/templates/domain-index.d.ts.map +1 -0
  161. package/dist/generators/templates/domain-index.js +68 -0
  162. package/dist/generators/templates/domain-index.js.map +1 -0
  163. package/dist/generators/templates/domain-registry.d.ts +6 -0
  164. package/dist/generators/templates/domain-registry.d.ts.map +1 -0
  165. package/dist/generators/templates/domain-registry.js +59 -0
  166. package/dist/generators/templates/domain-registry.js.map +1 -0
  167. package/dist/index.d.ts +32 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +39 -0
  170. package/dist/index.js.map +1 -0
  171. package/dist/reports/audit-report.d.ts +15 -0
  172. package/dist/reports/audit-report.d.ts.map +1 -0
  173. package/dist/reports/audit-report.js +150 -0
  174. package/dist/reports/audit-report.js.map +1 -0
  175. package/dist/reports/health-report.d.ts +15 -0
  176. package/dist/reports/health-report.d.ts.map +1 -0
  177. package/dist/reports/health-report.js +175 -0
  178. package/dist/reports/health-report.js.map +1 -0
  179. package/dist/reports/link-report.d.ts +15 -0
  180. package/dist/reports/link-report.d.ts.map +1 -0
  181. package/dist/reports/link-report.js +165 -0
  182. package/dist/reports/link-report.js.map +1 -0
  183. package/dist/utils/frontmatter.d.ts +50 -0
  184. package/dist/utils/frontmatter.d.ts.map +1 -0
  185. package/dist/utils/frontmatter.js +93 -0
  186. package/dist/utils/frontmatter.js.map +1 -0
  187. package/dist/utils/glob.d.ts +63 -0
  188. package/dist/utils/glob.d.ts.map +1 -0
  189. package/dist/utils/glob.js +128 -0
  190. package/dist/utils/glob.js.map +1 -0
  191. package/dist/utils/logger.d.ts +42 -0
  192. package/dist/utils/logger.d.ts.map +1 -0
  193. package/dist/utils/logger.js +118 -0
  194. package/dist/utils/logger.js.map +1 -0
  195. package/dist/utils/markdown.d.ts +89 -0
  196. package/dist/utils/markdown.d.ts.map +1 -0
  197. package/dist/utils/markdown.js +192 -0
  198. package/dist/utils/markdown.js.map +1 -0
  199. package/package.json +100 -0
  200. package/templates/claude/CLAUDE.md +204 -0
@@ -0,0 +1,24 @@
1
+ export interface AntiPatternDiscoveryOptions {
2
+ rootPath: string;
3
+ silent?: boolean;
4
+ }
5
+ export interface DiscoveredAntiPattern {
6
+ name: string;
7
+ severity: 'high' | 'medium' | 'low';
8
+ type: AntiPatternType;
9
+ description: string;
10
+ locations: AntiPatternLocation[];
11
+ recommendation: string;
12
+ }
13
+ export interface AntiPatternLocation {
14
+ file: string;
15
+ line: number;
16
+ code: string;
17
+ context?: string;
18
+ }
19
+ export type AntiPatternType = 'hardcoded-credentials' | 'sql-injection' | 'missing-error-handling' | 'code-duplication' | 'god-object' | 'long-function' | 'magic-numbers' | 'missing-types' | 'console-log' | 'any-type' | 'unused-import' | 'deprecated-api';
20
+ /**
21
+ * Discover anti-patterns in codebase
22
+ */
23
+ export declare function discoverAntiPatterns(options: AntiPatternDiscoveryOptions): Promise<DiscoveredAntiPattern[]>;
24
+ //# sourceMappingURL=antipatterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antipatterns.d.ts","sourceRoot":"","sources":["../../../src/core/discover/antipatterns.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,eAAe,GACvB,uBAAuB,GACvB,eAAe,GACf,wBAAwB,GACxB,kBAAkB,GAClB,YAAY,GACZ,eAAe,GACf,eAAe,GACf,eAAe,GACf,aAAa,GACb,UAAU,GACV,eAAe,GACf,gBAAgB,CAAC;AAgIrB;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CA2ElC"}
@@ -0,0 +1,354 @@
1
+ import { readFile } from 'fs/promises';
2
+ import { relative } from 'path';
3
+ import { glob } from '../../utils/glob.js';
4
+ import { logger } from '../../utils/logger.js';
5
+ const ANTI_PATTERN_DEFINITIONS = [
6
+ // High severity
7
+ {
8
+ name: 'Hardcoded Credentials',
9
+ type: 'hardcoded-credentials',
10
+ severity: 'high',
11
+ description: 'Sensitive credentials hardcoded in source code',
12
+ patterns: [
13
+ /(?:password|passwd|pwd)\s*[:=]\s*['"][^'"]+['"]/gi,
14
+ /(?:api[_-]?key|apikey)\s*[:=]\s*['"][^'"]+['"]/gi,
15
+ /(?:secret|token)\s*[:=]\s*['"][a-zA-Z0-9]{20,}['"]/gi,
16
+ /(?:auth|bearer)\s*[:=]\s*['"][^'"]+['"]/gi,
17
+ ],
18
+ recommendation: 'Move credentials to environment variables or a secrets manager',
19
+ exclude: [/\.test\.|\.spec\.|mock|fixture|example/i],
20
+ },
21
+ {
22
+ name: 'Potential SQL Injection',
23
+ type: 'sql-injection',
24
+ severity: 'high',
25
+ description: 'String interpolation in SQL queries',
26
+ patterns: [
27
+ /`SELECT\s+.+\$\{/gi,
28
+ /`INSERT\s+.+\$\{/gi,
29
+ /`UPDATE\s+.+\$\{/gi,
30
+ /`DELETE\s+.+\$\{/gi,
31
+ /['"]SELECT\s+.+['"]\s*\+/gi,
32
+ ],
33
+ recommendation: 'Use parameterized queries or prepared statements',
34
+ },
35
+ {
36
+ name: 'Missing Error Handling',
37
+ type: 'missing-error-handling',
38
+ severity: 'high',
39
+ description: 'Async operations without try-catch or .catch()',
40
+ patterns: [
41
+ /await\s+[^;]+;(?!\s*}\s*catch)/g,
42
+ ],
43
+ recommendation: 'Wrap async operations in try-catch blocks',
44
+ },
45
+ // Medium severity
46
+ {
47
+ name: 'Console.log in Production Code',
48
+ type: 'console-log',
49
+ severity: 'medium',
50
+ description: 'Debug console statements left in code',
51
+ patterns: [
52
+ /console\.log\s*\(/g,
53
+ /console\.debug\s*\(/g,
54
+ /console\.info\s*\(/g,
55
+ ],
56
+ recommendation: 'Remove console statements or use a proper logging library',
57
+ exclude: [/\.test\.|\.spec\./i],
58
+ },
59
+ {
60
+ name: 'TypeScript "any" Type',
61
+ type: 'any-type',
62
+ severity: 'medium',
63
+ description: 'Using "any" type defeats TypeScript benefits',
64
+ patterns: [
65
+ /:\s*any\s*[;,)=]/g,
66
+ /as\s+any/g,
67
+ /<any>/g,
68
+ ],
69
+ recommendation: 'Use proper types or "unknown" with type guards',
70
+ },
71
+ {
72
+ name: 'Magic Numbers',
73
+ type: 'magic-numbers',
74
+ severity: 'medium',
75
+ description: 'Unexplained numeric literals in code',
76
+ patterns: [
77
+ /(?:if|while|for).*[<>=]+\s*\d{2,}/g,
78
+ /setTimeout\s*\([^,]+,\s*\d{4,}\)/g,
79
+ /setInterval\s*\([^,]+,\s*\d{4,}\)/g,
80
+ ],
81
+ recommendation: 'Extract to named constants with descriptive names',
82
+ exclude: [/\b(?:0|1|2|100|1000)\b/],
83
+ },
84
+ {
85
+ name: 'Long Function',
86
+ type: 'long-function',
87
+ severity: 'medium',
88
+ description: 'Functions exceeding recommended length',
89
+ patterns: [
90
+ // This is detected differently - by line count
91
+ ],
92
+ recommendation: 'Break down into smaller, focused functions',
93
+ },
94
+ // Low severity
95
+ {
96
+ name: 'Unused Imports',
97
+ type: 'unused-import',
98
+ severity: 'low',
99
+ description: 'Imported modules that are not used',
100
+ patterns: [
101
+ // This requires more complex analysis
102
+ ],
103
+ recommendation: 'Remove unused imports to reduce bundle size',
104
+ },
105
+ {
106
+ name: 'Deprecated API Usage',
107
+ type: 'deprecated-api',
108
+ severity: 'low',
109
+ description: 'Using deprecated methods or APIs',
110
+ patterns: [
111
+ /@deprecated/gi,
112
+ /\.substr\s*\(/g, // Use slice instead
113
+ /new\s+Buffer\s*\(/g, // Use Buffer.from()
114
+ ],
115
+ recommendation: 'Update to use current API versions',
116
+ },
117
+ ];
118
+ /**
119
+ * Discover anti-patterns in codebase
120
+ */
121
+ export async function discoverAntiPatterns(options) {
122
+ const { rootPath, silent = false } = options;
123
+ const discovered = [];
124
+ if (!silent) {
125
+ logger.header('Anti-Pattern Discovery');
126
+ logger.info(`Scanning: ${rootPath}`);
127
+ }
128
+ // Find all source files
129
+ const patterns = ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'];
130
+ let files = [];
131
+ for (const pattern of patterns) {
132
+ const matches = await glob(pattern, {
133
+ cwd: rootPath,
134
+ absolute: true,
135
+ ignore: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.git/**'],
136
+ });
137
+ files.push(...matches);
138
+ }
139
+ files = [...new Set(files)];
140
+ if (!silent) {
141
+ logger.info(`Scanning ${files.length} files...`);
142
+ }
143
+ // Check for each anti-pattern
144
+ for (const definition of ANTI_PATTERN_DEFINITIONS) {
145
+ if (definition.patterns.length === 0)
146
+ continue;
147
+ const antiPattern = await scanForAntiPattern(files, rootPath, definition);
148
+ if (antiPattern.locations.length > 0) {
149
+ discovered.push(antiPattern);
150
+ }
151
+ }
152
+ // Check for long functions
153
+ const longFunctions = await findLongFunctions(files, rootPath);
154
+ if (longFunctions.locations.length > 0) {
155
+ discovered.push(longFunctions);
156
+ }
157
+ // Check for god objects
158
+ const godObjects = await findGodObjects(files, rootPath);
159
+ if (godObjects.locations.length > 0) {
160
+ discovered.push(godObjects);
161
+ }
162
+ // Sort by severity
163
+ const severityOrder = { high: 0, medium: 1, low: 2 };
164
+ discovered.sort((a, b) => severityOrder[a.severity] - severityOrder[b.severity]);
165
+ if (!silent) {
166
+ logger.newline();
167
+ logger.success(`Found ${discovered.length} anti-pattern types`);
168
+ const high = discovered.filter((d) => d.severity === 'high');
169
+ const medium = discovered.filter((d) => d.severity === 'medium');
170
+ const low = discovered.filter((d) => d.severity === 'low');
171
+ if (high.length > 0) {
172
+ logger.error(`High severity: ${high.length} types, ${high.reduce((s, d) => s + d.locations.length, 0)} occurrences`);
173
+ }
174
+ if (medium.length > 0) {
175
+ logger.warn(`Medium severity: ${medium.length} types, ${medium.reduce((s, d) => s + d.locations.length, 0)} occurrences`);
176
+ }
177
+ if (low.length > 0) {
178
+ logger.info(`Low severity: ${low.length} types, ${low.reduce((s, d) => s + d.locations.length, 0)} occurrences`);
179
+ }
180
+ }
181
+ return discovered;
182
+ }
183
+ /**
184
+ * Scan for a specific anti-pattern
185
+ */
186
+ async function scanForAntiPattern(files, rootPath, definition) {
187
+ const locations = [];
188
+ for (const file of files) {
189
+ // Check exclusions
190
+ if (definition.exclude?.some((ex) => ex.test(file))) {
191
+ continue;
192
+ }
193
+ try {
194
+ const content = await readFile(file, 'utf-8');
195
+ const lines = content.split('\n');
196
+ for (const pattern of definition.patterns) {
197
+ pattern.lastIndex = 0;
198
+ let match;
199
+ while ((match = pattern.exec(content)) !== null) {
200
+ // Check if excluded pattern
201
+ if (definition.exclude?.some((ex) => ex.test(match[0]))) {
202
+ continue;
203
+ }
204
+ const beforeMatch = content.slice(0, match.index);
205
+ const lineNumber = (beforeMatch.match(/\n/g) ?? []).length + 1;
206
+ const codeLine = lines[lineNumber - 1] ?? '';
207
+ // Skip if in comments
208
+ if (codeLine.trim().startsWith('//') || codeLine.trim().startsWith('*')) {
209
+ continue;
210
+ }
211
+ locations.push({
212
+ file: relative(rootPath, file),
213
+ line: lineNumber,
214
+ code: codeLine.trim().slice(0, 100),
215
+ });
216
+ // Limit locations per anti-pattern
217
+ if (locations.length >= 20)
218
+ break;
219
+ }
220
+ if (locations.length >= 20)
221
+ break;
222
+ }
223
+ }
224
+ catch {
225
+ // Skip unreadable files
226
+ }
227
+ }
228
+ return {
229
+ name: definition.name,
230
+ severity: definition.severity,
231
+ type: definition.type,
232
+ description: definition.description,
233
+ locations,
234
+ recommendation: definition.recommendation,
235
+ };
236
+ }
237
+ /**
238
+ * Find long functions (> 50 lines)
239
+ */
240
+ async function findLongFunctions(files, rootPath) {
241
+ const locations = [];
242
+ const threshold = 50;
243
+ for (const file of files) {
244
+ try {
245
+ const content = await readFile(file, 'utf-8');
246
+ const lines = content.split('\n');
247
+ // Simple heuristic: count lines between function declarations and closing braces
248
+ const functionPattern = /(?:function\s+\w+|(?:async\s+)?(?:const|let|var)\s+\w+\s*=\s*(?:async\s*)?\([^)]*\)\s*=>|(?:async\s+)?\w+\s*\([^)]*\)\s*{)/g;
249
+ let match;
250
+ while ((match = functionPattern.exec(content)) !== null) {
251
+ const startLine = (content.slice(0, match.index).match(/\n/g) ?? []).length + 1;
252
+ // Count function length (simple brace counting)
253
+ let braceCount = 0;
254
+ let started = false;
255
+ let endLine = startLine;
256
+ for (let i = startLine - 1; i < lines.length; i++) {
257
+ const line = lines[i] ?? '';
258
+ if (line.includes('{')) {
259
+ braceCount += (line.match(/{/g) ?? []).length;
260
+ started = true;
261
+ }
262
+ if (line.includes('}')) {
263
+ braceCount -= (line.match(/}/g) ?? []).length;
264
+ }
265
+ if (started && braceCount === 0) {
266
+ endLine = i + 1;
267
+ break;
268
+ }
269
+ }
270
+ const length = endLine - startLine;
271
+ if (length > threshold) {
272
+ locations.push({
273
+ file: relative(rootPath, file),
274
+ line: startLine,
275
+ code: `Function spans ${length} lines`,
276
+ });
277
+ if (locations.length >= 10)
278
+ break;
279
+ }
280
+ }
281
+ }
282
+ catch {
283
+ // Skip
284
+ }
285
+ }
286
+ return {
287
+ name: 'Long Function',
288
+ severity: 'medium',
289
+ type: 'long-function',
290
+ description: `Functions exceeding ${threshold} lines`,
291
+ locations,
292
+ recommendation: 'Break down into smaller, focused functions',
293
+ };
294
+ }
295
+ /**
296
+ * Find god objects (classes > 500 lines)
297
+ */
298
+ async function findGodObjects(files, rootPath) {
299
+ const locations = [];
300
+ const threshold = 500;
301
+ for (const file of files) {
302
+ try {
303
+ const content = await readFile(file, 'utf-8');
304
+ const lines = content.split('\n');
305
+ // Find class declarations
306
+ const classPattern = /class\s+(\w+)/g;
307
+ let match;
308
+ while ((match = classPattern.exec(content)) !== null) {
309
+ const className = match[1];
310
+ const startLine = (content.slice(0, match.index).match(/\n/g) ?? []).length + 1;
311
+ // Count class length
312
+ let braceCount = 0;
313
+ let started = false;
314
+ let endLine = startLine;
315
+ for (let i = startLine - 1; i < lines.length; i++) {
316
+ const line = lines[i] ?? '';
317
+ if (line.includes('{')) {
318
+ braceCount += (line.match(/{/g) ?? []).length;
319
+ started = true;
320
+ }
321
+ if (line.includes('}')) {
322
+ braceCount -= (line.match(/}/g) ?? []).length;
323
+ }
324
+ if (started && braceCount === 0) {
325
+ endLine = i + 1;
326
+ break;
327
+ }
328
+ }
329
+ const length = endLine - startLine;
330
+ if (length > threshold) {
331
+ locations.push({
332
+ file: relative(rootPath, file),
333
+ line: startLine,
334
+ code: `Class ${className} spans ${length} lines`,
335
+ });
336
+ if (locations.length >= 10)
337
+ break;
338
+ }
339
+ }
340
+ }
341
+ catch {
342
+ // Skip
343
+ }
344
+ }
345
+ return {
346
+ name: 'God Object',
347
+ severity: 'medium',
348
+ type: 'god-object',
349
+ description: `Classes exceeding ${threshold} lines with too many responsibilities`,
350
+ locations,
351
+ recommendation: 'Split into smaller classes with single responsibilities',
352
+ };
353
+ }
354
+ //# sourceMappingURL=antipatterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antipatterns.js","sourceRoot":"","sources":["../../../src/core/discover/antipatterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ export interface DependencyAnalysisOptions {
2
+ rootPath: string;
3
+ silent?: boolean;
4
+ }
5
+ export interface DependencyAnalysis {
6
+ packages: PackageAnalysis;
7
+ modules: ModuleAnalysis;
8
+ security: SecurityAnalysis;
9
+ unused: UnusedDependency[];
10
+ }
11
+ export interface PackageAnalysis {
12
+ total: number;
13
+ production: number;
14
+ development: number;
15
+ dependencies: PackageInfo[];
16
+ devDependencies: PackageInfo[];
17
+ }
18
+ export interface PackageInfo {
19
+ name: string;
20
+ version: string;
21
+ type: 'production' | 'development';
22
+ outdated?: boolean;
23
+ latestVersion?: string;
24
+ }
25
+ export interface ModuleAnalysis {
26
+ totalFiles: number;
27
+ imports: number;
28
+ circularDependencies: CircularDependency[];
29
+ highCoupling: HighCouplingModule[];
30
+ }
31
+ export interface CircularDependency {
32
+ files: string[];
33
+ }
34
+ export interface HighCouplingModule {
35
+ file: string;
36
+ imports: number;
37
+ importedBy: number;
38
+ }
39
+ export interface SecurityAnalysis {
40
+ vulnerabilities: SecurityVulnerability[];
41
+ }
42
+ export interface SecurityVulnerability {
43
+ package: string;
44
+ severity: 'low' | 'moderate' | 'high' | 'critical';
45
+ title: string;
46
+ recommendation: string;
47
+ }
48
+ export interface UnusedDependency {
49
+ name: string;
50
+ type: 'production' | 'development';
51
+ reason: string;
52
+ }
53
+ /**
54
+ * Analyze project dependencies
55
+ */
56
+ export declare function analyzeDependencies(options: DependencyAnalysisOptions): Promise<DependencyAnalysis>;
57
+ //# sourceMappingURL=dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../../src/core/discover/dependencies.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,eAAe,EAAE,WAAW,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,kBAAkB,EAAE,CAAC;IAC3C,YAAY,EAAE,kBAAkB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,qBAAqB,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAyC7B"}