@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,371 @@
1
+ import { readFile } from 'fs/promises';
2
+ import { relative, extname } from 'path';
3
+ import { glob } from '../../utils/glob.js';
4
+ import { logger } from '../../utils/logger.js';
5
+ // Built-in pattern definitions
6
+ const PATTERN_DEFINITIONS = [
7
+ // Architecture patterns
8
+ {
9
+ name: 'Service Layer with Dependency Injection',
10
+ category: 'architecture',
11
+ description: 'Classes that accept dependencies via constructor',
12
+ patterns: [
13
+ /class\s+\w+Service\s*{[\s\S]*?constructor\s*\([^)]*\)/g,
14
+ /class\s+\w+\s*{[\s\S]*?constructor\s*\(\s*(?:private|readonly)\s+\w+:/g,
15
+ ],
16
+ languages: ['typescript', 'javascript'],
17
+ },
18
+ {
19
+ name: 'Repository Pattern',
20
+ category: 'architecture',
21
+ description: 'Data access abstraction layer',
22
+ patterns: [
23
+ /class\s+\w+Repository/g,
24
+ /interface\s+I?\w+Repository/g,
25
+ ],
26
+ languages: ['typescript', 'javascript'],
27
+ },
28
+ {
29
+ name: 'Factory Pattern',
30
+ category: 'architecture',
31
+ description: 'Object creation abstraction',
32
+ patterns: [
33
+ /class\s+\w+Factory/g,
34
+ /function\s+create\w+\s*\(/g,
35
+ /const\s+create\w+\s*=/g,
36
+ ],
37
+ languages: ['typescript', 'javascript'],
38
+ },
39
+ {
40
+ name: 'Singleton Pattern',
41
+ category: 'architecture',
42
+ description: 'Single instance management',
43
+ patterns: [
44
+ /private\s+static\s+instance/g,
45
+ /getInstance\s*\(\s*\)/g,
46
+ ],
47
+ languages: ['typescript', 'javascript'],
48
+ },
49
+ // Data access patterns
50
+ {
51
+ name: 'Async/Await Database Operations',
52
+ category: 'data-access',
53
+ description: 'Asynchronous database queries',
54
+ patterns: [
55
+ /async\s+\w+\s*\([^)]*\)\s*{[\s\S]*?await\s+(?:this\.)?(?:db|database|connection|pool|client)\./g,
56
+ /await\s+(?:prisma|sequelize|typeorm|knex)\./g,
57
+ ],
58
+ languages: ['typescript', 'javascript'],
59
+ },
60
+ {
61
+ name: 'Transaction Management',
62
+ category: 'data-access',
63
+ description: 'Database transaction handling',
64
+ patterns: [
65
+ /\.transaction\s*\(/g,
66
+ /BEGIN\s+TRANSACTION/gi,
67
+ /COMMIT/gi,
68
+ /ROLLBACK/gi,
69
+ ],
70
+ languages: ['typescript', 'javascript', 'sql'],
71
+ },
72
+ // Error handling patterns
73
+ {
74
+ name: 'Try-Catch Error Handling',
75
+ category: 'error-handling',
76
+ description: 'Structured exception handling',
77
+ patterns: [
78
+ /try\s*{[\s\S]*?}\s*catch\s*\(/g,
79
+ ],
80
+ languages: ['typescript', 'javascript'],
81
+ },
82
+ {
83
+ name: 'Custom Error Classes',
84
+ category: 'error-handling',
85
+ description: 'Domain-specific error types',
86
+ patterns: [
87
+ /class\s+\w+Error\s+extends\s+Error/g,
88
+ /class\s+\w+Exception\s+extends/g,
89
+ ],
90
+ languages: ['typescript', 'javascript'],
91
+ },
92
+ {
93
+ name: 'HTTP Exception Pattern',
94
+ category: 'error-handling',
95
+ description: 'HTTP error response handling',
96
+ patterns: [
97
+ /throw\s+new\s+Http\w*Exception/g,
98
+ /throw\s+new\s+\w*HttpError/g,
99
+ /throw\s+new\s+BadRequest/g,
100
+ /throw\s+new\s+NotFound/g,
101
+ /throw\s+new\s+Unauthorized/g,
102
+ ],
103
+ languages: ['typescript', 'javascript'],
104
+ },
105
+ // Security patterns
106
+ {
107
+ name: 'Authentication Middleware',
108
+ category: 'security',
109
+ description: 'Request authentication handling',
110
+ patterns: [
111
+ /(?:auth|authenticate|authorization)\s*(?:middleware|guard|handler)/gi,
112
+ /@(?:Auth|Authorized|UseGuards)/g,
113
+ /isAuthenticated/g,
114
+ ],
115
+ languages: ['typescript', 'javascript'],
116
+ },
117
+ {
118
+ name: 'JWT Token Handling',
119
+ category: 'security',
120
+ description: 'JSON Web Token operations',
121
+ patterns: [
122
+ /jwt\.(?:sign|verify|decode)/g,
123
+ /jsonwebtoken/g,
124
+ /Bearer\s+/g,
125
+ ],
126
+ languages: ['typescript', 'javascript'],
127
+ },
128
+ {
129
+ name: 'Input Validation',
130
+ category: 'security',
131
+ description: 'Request input sanitization',
132
+ patterns: [
133
+ /\.validate\s*\(/g,
134
+ /zod\./g,
135
+ /yup\./g,
136
+ /joi\./g,
137
+ /@IsString|@IsNumber|@IsEmail/g,
138
+ ],
139
+ languages: ['typescript', 'javascript'],
140
+ },
141
+ // Testing patterns
142
+ {
143
+ name: 'Unit Test Structure',
144
+ category: 'testing',
145
+ description: 'Test organization with describe/it blocks',
146
+ patterns: [
147
+ /describe\s*\(\s*['"`][^'"`]+['"`]\s*,/g,
148
+ /it\s*\(\s*['"`][^'"`]+['"`]\s*,/g,
149
+ /test\s*\(\s*['"`][^'"`]+['"`]\s*,/g,
150
+ ],
151
+ languages: ['typescript', 'javascript'],
152
+ },
153
+ {
154
+ name: 'Mock/Stub Pattern',
155
+ category: 'testing',
156
+ description: 'Test double implementations',
157
+ patterns: [
158
+ /jest\.mock\s*\(/g,
159
+ /vi\.mock\s*\(/g,
160
+ /sinon\.stub\s*\(/g,
161
+ /\.mockImplementation\s*\(/g,
162
+ ],
163
+ languages: ['typescript', 'javascript'],
164
+ },
165
+ // API patterns
166
+ {
167
+ name: 'REST Controller Pattern',
168
+ category: 'api',
169
+ description: 'HTTP endpoint handlers',
170
+ patterns: [
171
+ /@(?:Get|Post|Put|Delete|Patch)\s*\(/g,
172
+ /router\.(?:get|post|put|delete|patch)\s*\(/g,
173
+ /app\.(?:get|post|put|delete|patch)\s*\(/g,
174
+ ],
175
+ languages: ['typescript', 'javascript'],
176
+ },
177
+ {
178
+ name: 'API Response Formatting',
179
+ category: 'api',
180
+ description: 'Consistent response structure',
181
+ patterns: [
182
+ /return\s*{\s*(?:data|success|message|error|status)/g,
183
+ /res\.(?:json|send)\s*\(\s*{/g,
184
+ ],
185
+ languages: ['typescript', 'javascript'],
186
+ },
187
+ // State management patterns
188
+ {
189
+ name: 'React Hooks Pattern',
190
+ category: 'state-management',
191
+ description: 'React state and effect hooks',
192
+ patterns: [
193
+ /use(?:State|Effect|Context|Reducer|Callback|Memo|Ref)\s*\(/g,
194
+ ],
195
+ languages: ['typescript', 'javascript'],
196
+ filePatterns: ['*.tsx', '*.jsx'],
197
+ },
198
+ {
199
+ name: 'Redux/Zustand Store',
200
+ category: 'state-management',
201
+ description: 'Global state management',
202
+ patterns: [
203
+ /createSlice\s*\(/g,
204
+ /createStore\s*\(/g,
205
+ /create\s*\(\s*\([^)]*\)\s*=>\s*\(/g, // Zustand
206
+ ],
207
+ languages: ['typescript', 'javascript'],
208
+ },
209
+ ];
210
+ /**
211
+ * Discover patterns in codebase
212
+ */
213
+ export async function discoverPatterns(options) {
214
+ const { rootPath, language, category, silent = false, } = options;
215
+ const discovered = [];
216
+ if (!silent) {
217
+ logger.header('Pattern Discovery');
218
+ logger.info(`Scanning: ${rootPath}`);
219
+ }
220
+ // Determine file extensions to scan
221
+ const extensions = getExtensionsForLanguage(language);
222
+ const patterns = extensions.map((ext) => `**/*${ext}`);
223
+ // Find all source files
224
+ let files = [];
225
+ for (const pattern of patterns) {
226
+ const matches = await glob(pattern, {
227
+ cwd: rootPath,
228
+ absolute: true,
229
+ ignore: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.git/**'],
230
+ });
231
+ files.push(...matches);
232
+ }
233
+ // Deduplicate
234
+ files = [...new Set(files)];
235
+ if (!silent) {
236
+ logger.info(`Found ${files.length} source files`);
237
+ }
238
+ // Filter pattern definitions
239
+ let definitions = PATTERN_DEFINITIONS;
240
+ if (language) {
241
+ definitions = definitions.filter((d) => !d.languages || d.languages.includes(language));
242
+ }
243
+ if (category) {
244
+ definitions = definitions.filter((d) => d.category === category);
245
+ }
246
+ // Scan for patterns
247
+ for (const definition of definitions) {
248
+ const pattern = await scanForPattern(files, rootPath, definition);
249
+ if (pattern.occurrences > 0) {
250
+ discovered.push(pattern);
251
+ }
252
+ }
253
+ // Sort by occurrences
254
+ discovered.sort((a, b) => b.occurrences - a.occurrences);
255
+ if (!silent) {
256
+ logger.newline();
257
+ logger.success(`Discovered ${discovered.length} patterns`);
258
+ for (const pattern of discovered.slice(0, 10)) {
259
+ logger.info(` ${pattern.name}: ${pattern.occurrences} occurrences`);
260
+ }
261
+ }
262
+ return discovered;
263
+ }
264
+ /**
265
+ * Scan files for a specific pattern
266
+ */
267
+ async function scanForPattern(files, rootPath, definition) {
268
+ const examples = [];
269
+ let totalOccurrences = 0;
270
+ for (const file of files) {
271
+ // Check file pattern filter
272
+ if (definition.filePatterns) {
273
+ const ext = extname(file);
274
+ const matches = definition.filePatterns.some((p) => p.endsWith(ext) || p === `*${ext}`);
275
+ if (!matches)
276
+ continue;
277
+ }
278
+ try {
279
+ const content = await readFile(file, 'utf-8');
280
+ const lines = content.split('\n');
281
+ for (const pattern of definition.patterns) {
282
+ // Reset regex
283
+ pattern.lastIndex = 0;
284
+ let match;
285
+ while ((match = pattern.exec(content)) !== null) {
286
+ totalOccurrences++;
287
+ // Only capture first 5 examples
288
+ if (examples.length < 5) {
289
+ // Find line number
290
+ const beforeMatch = content.slice(0, match.index);
291
+ const lineNumber = (beforeMatch.match(/\n/g) ?? []).length + 1;
292
+ // Get line content
293
+ const codeLine = lines[lineNumber - 1] ?? '';
294
+ examples.push({
295
+ file: relative(rootPath, file),
296
+ line: lineNumber,
297
+ code: codeLine.trim().slice(0, 100),
298
+ });
299
+ }
300
+ }
301
+ }
302
+ }
303
+ catch {
304
+ // Skip files that can't be read
305
+ }
306
+ }
307
+ return {
308
+ name: definition.name,
309
+ category: definition.category,
310
+ description: definition.description,
311
+ occurrences: totalOccurrences,
312
+ examples,
313
+ };
314
+ }
315
+ /**
316
+ * Get file extensions for a language
317
+ */
318
+ function getExtensionsForLanguage(language) {
319
+ const extensionMap = {
320
+ typescript: ['.ts', '.tsx'],
321
+ javascript: ['.js', '.jsx', '.mjs'],
322
+ python: ['.py'],
323
+ go: ['.go'],
324
+ rust: ['.rs'],
325
+ java: ['.java'],
326
+ csharp: ['.cs'],
327
+ ruby: ['.rb'],
328
+ php: ['.php'],
329
+ };
330
+ if (language && extensionMap[language]) {
331
+ return extensionMap[language];
332
+ }
333
+ // Default: TypeScript and JavaScript
334
+ return ['.ts', '.tsx', '.js', '.jsx', '.mjs'];
335
+ }
336
+ /**
337
+ * Generate documentation suggestion for a pattern
338
+ */
339
+ export function generatePatternDocumentation(pattern) {
340
+ let doc = `# ${pattern.name}
341
+
342
+ ## Overview
343
+
344
+ ${pattern.description}
345
+
346
+ **Category:** ${pattern.category}
347
+ **Occurrences:** ${pattern.occurrences}
348
+
349
+ ## Examples
350
+
351
+ `;
352
+ for (const example of pattern.examples) {
353
+ doc += `### ${example.file}:${example.line}
354
+
355
+ \`\`\`typescript
356
+ ${example.code}
357
+ \`\`\`
358
+
359
+ `;
360
+ }
361
+ doc += `## Usage Guidelines
362
+
363
+ [Add guidelines for when and how to use this pattern]
364
+
365
+ ## Related Patterns
366
+
367
+ [Add links to related patterns]
368
+ `;
369
+ return doc;
370
+ }
371
+ //# sourceMappingURL=patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/core/discover/patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ export interface StandardsDiscoveryOptions {
2
+ rootPath: string;
3
+ silent?: boolean;
4
+ }
5
+ export interface DiscoveredStandards {
6
+ naming: NamingStandards;
7
+ fileOrganization: FileOrganizationStandards;
8
+ codeStyle: CodeStyleStandards;
9
+ documentation: DocumentationStandards;
10
+ testing: TestingStandards;
11
+ }
12
+ export interface NamingStandards {
13
+ functions: ConventionCompliance;
14
+ classes: ConventionCompliance;
15
+ constants: ConventionCompliance;
16
+ variables: ConventionCompliance;
17
+ files: ConventionCompliance;
18
+ }
19
+ export interface ConventionCompliance {
20
+ convention: string;
21
+ compliance: number;
22
+ examples: {
23
+ name: string;
24
+ file: string;
25
+ compliant: boolean;
26
+ }[];
27
+ }
28
+ export interface FileOrganizationStandards {
29
+ patterns: {
30
+ pattern: string;
31
+ files: number;
32
+ examples: string[];
33
+ }[];
34
+ rootFolders: string[];
35
+ }
36
+ export interface CodeStyleStandards {
37
+ maxLineLength: number;
38
+ indentation: 'spaces' | 'tabs' | 'mixed';
39
+ indentSize?: number;
40
+ semicolons: 'always' | 'never' | 'mixed';
41
+ quotes: 'single' | 'double' | 'mixed';
42
+ trailingCommas: 'always' | 'never' | 'mixed';
43
+ }
44
+ export interface DocumentationStandards {
45
+ docstringStyle: string;
46
+ coverage: number;
47
+ typeHintCoverage: number;
48
+ }
49
+ export interface TestingStandards {
50
+ pattern: string;
51
+ coverage?: number;
52
+ fixturePattern?: string;
53
+ }
54
+ /**
55
+ * Discover implicit standards from codebase
56
+ */
57
+ export declare function discoverStandards(options: StandardsDiscoveryOptions): Promise<DiscoveredStandards>;
58
+ //# sourceMappingURL=standards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standards.d.ts","sourceRoot":"","sources":["../../../src/core/discover/standards.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,eAAe,CAAC;IACxB,gBAAgB,EAAE,yBAAyB,CAAC;IAC5C,SAAS,EAAE,kBAAkB,CAAC;IAC9B,aAAa,EAAE,sBAAsB,CAAC;IACtC,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,oBAAoB,CAAC;IAChC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,SAAS,EAAE,oBAAoB,CAAC;IAChC,SAAS,EAAE,oBAAoB,CAAC;IAChC,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CAChE;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IACnE,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;IACzC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACtC,cAAc,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;CAC9C;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAoD9B"}