@skillsmith/core 0.2.0 → 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 (233) hide show
  1. package/README.md +233 -2
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/analysis/__tests__/incremental.test.d.ts +13 -0
  4. package/dist/src/analysis/__tests__/incremental.test.d.ts.map +1 -0
  5. package/dist/src/analysis/__tests__/incremental.test.js +515 -0
  6. package/dist/src/analysis/__tests__/incremental.test.js.map +1 -0
  7. package/dist/src/analysis/__tests__/integration.test.d.ts +14 -0
  8. package/dist/src/analysis/__tests__/integration.test.d.ts.map +1 -0
  9. package/dist/src/analysis/__tests__/integration.test.js +1059 -0
  10. package/dist/src/analysis/__tests__/integration.test.js.map +1 -0
  11. package/dist/src/analysis/__tests__/metrics.test.d.ts +9 -0
  12. package/dist/src/analysis/__tests__/metrics.test.d.ts.map +1 -0
  13. package/dist/src/analysis/__tests__/metrics.test.js +369 -0
  14. package/dist/src/analysis/__tests__/metrics.test.js.map +1 -0
  15. package/dist/src/analysis/__tests__/performance.test.d.ts +15 -0
  16. package/dist/src/analysis/__tests__/performance.test.d.ts.map +1 -0
  17. package/dist/src/analysis/__tests__/performance.test.js +402 -0
  18. package/dist/src/analysis/__tests__/performance.test.js.map +1 -0
  19. package/dist/src/analysis/adapters/__tests__/go.test.d.ts +12 -0
  20. package/dist/src/analysis/adapters/__tests__/go.test.d.ts.map +1 -0
  21. package/dist/src/analysis/adapters/__tests__/go.test.js +561 -0
  22. package/dist/src/analysis/adapters/__tests__/go.test.js.map +1 -0
  23. package/dist/src/analysis/adapters/__tests__/python.test.d.ts +11 -0
  24. package/dist/src/analysis/adapters/__tests__/python.test.d.ts.map +1 -0
  25. package/dist/src/analysis/adapters/__tests__/python.test.js +669 -0
  26. package/dist/src/analysis/adapters/__tests__/python.test.js.map +1 -0
  27. package/dist/src/analysis/adapters/__tests__/rust.test.d.ts +12 -0
  28. package/dist/src/analysis/adapters/__tests__/rust.test.d.ts.map +1 -0
  29. package/dist/src/analysis/adapters/__tests__/rust.test.js +676 -0
  30. package/dist/src/analysis/adapters/__tests__/rust.test.js.map +1 -0
  31. package/dist/src/analysis/adapters/__tests__/typescript.test.d.ts +14 -0
  32. package/dist/src/analysis/adapters/__tests__/typescript.test.d.ts.map +1 -0
  33. package/dist/src/analysis/adapters/__tests__/typescript.test.js +381 -0
  34. package/dist/src/analysis/adapters/__tests__/typescript.test.js.map +1 -0
  35. package/dist/src/analysis/adapters/base.d.ts +83 -0
  36. package/dist/src/analysis/adapters/base.d.ts.map +1 -0
  37. package/dist/src/analysis/adapters/base.js +40 -0
  38. package/dist/src/analysis/adapters/base.js.map +1 -0
  39. package/dist/src/analysis/adapters/factory.d.ts +150 -0
  40. package/dist/src/analysis/adapters/factory.d.ts.map +1 -0
  41. package/dist/src/analysis/adapters/factory.js +244 -0
  42. package/dist/src/analysis/adapters/factory.js.map +1 -0
  43. package/dist/src/analysis/adapters/go.d.ts +131 -0
  44. package/dist/src/analysis/adapters/go.d.ts.map +1 -0
  45. package/dist/src/analysis/adapters/go.js +414 -0
  46. package/dist/src/analysis/adapters/go.js.map +1 -0
  47. package/dist/src/analysis/adapters/index.d.ts +20 -0
  48. package/dist/src/analysis/adapters/index.d.ts.map +1 -0
  49. package/dist/src/analysis/adapters/index.js +23 -0
  50. package/dist/src/analysis/adapters/index.js.map +1 -0
  51. package/dist/src/analysis/adapters/java.d.ts +154 -0
  52. package/dist/src/analysis/adapters/java.d.ts.map +1 -0
  53. package/dist/src/analysis/adapters/java.js +407 -0
  54. package/dist/src/analysis/adapters/java.js.map +1 -0
  55. package/dist/src/analysis/adapters/python.d.ts +165 -0
  56. package/dist/src/analysis/adapters/python.d.ts.map +1 -0
  57. package/dist/src/analysis/adapters/python.js +475 -0
  58. package/dist/src/analysis/adapters/python.js.map +1 -0
  59. package/dist/src/analysis/adapters/rust.d.ts +116 -0
  60. package/dist/src/analysis/adapters/rust.d.ts.map +1 -0
  61. package/dist/src/analysis/adapters/rust.js +476 -0
  62. package/dist/src/analysis/adapters/rust.js.map +1 -0
  63. package/dist/src/analysis/adapters/typescript.d.ts +68 -0
  64. package/dist/src/analysis/adapters/typescript.d.ts.map +1 -0
  65. package/dist/src/analysis/adapters/typescript.js +79 -0
  66. package/dist/src/analysis/adapters/typescript.js.map +1 -0
  67. package/dist/src/analysis/aggregator.d.ts +193 -0
  68. package/dist/src/analysis/aggregator.d.ts.map +1 -0
  69. package/dist/src/analysis/aggregator.js +283 -0
  70. package/dist/src/analysis/aggregator.js.map +1 -0
  71. package/dist/src/analysis/cache.d.ts +180 -0
  72. package/dist/src/analysis/cache.d.ts.map +1 -0
  73. package/dist/src/analysis/cache.js +279 -0
  74. package/dist/src/analysis/cache.js.map +1 -0
  75. package/dist/src/analysis/file-streamer.d.ts +136 -0
  76. package/dist/src/analysis/file-streamer.d.ts.map +1 -0
  77. package/dist/src/analysis/file-streamer.js +291 -0
  78. package/dist/src/analysis/file-streamer.js.map +1 -0
  79. package/dist/src/analysis/incremental-parser.d.ts +186 -0
  80. package/dist/src/analysis/incremental-parser.d.ts.map +1 -0
  81. package/dist/src/analysis/incremental-parser.js +291 -0
  82. package/dist/src/analysis/incremental-parser.js.map +1 -0
  83. package/dist/src/analysis/incremental.d.ts +186 -0
  84. package/dist/src/analysis/incremental.d.ts.map +1 -0
  85. package/dist/src/analysis/incremental.js +247 -0
  86. package/dist/src/analysis/incremental.js.map +1 -0
  87. package/dist/src/analysis/index.d.ts +25 -3
  88. package/dist/src/analysis/index.d.ts.map +1 -1
  89. package/dist/src/analysis/index.js +45 -3
  90. package/dist/src/analysis/index.js.map +1 -1
  91. package/dist/src/analysis/language-detector.d.ts +92 -0
  92. package/dist/src/analysis/language-detector.d.ts.map +1 -0
  93. package/dist/src/analysis/language-detector.js +602 -0
  94. package/dist/src/analysis/language-detector.js.map +1 -0
  95. package/dist/src/analysis/memory-monitor.d.ts +199 -0
  96. package/dist/src/analysis/memory-monitor.d.ts.map +1 -0
  97. package/dist/src/analysis/memory-monitor.js +271 -0
  98. package/dist/src/analysis/memory-monitor.js.map +1 -0
  99. package/dist/src/analysis/metrics.d.ts +300 -0
  100. package/dist/src/analysis/metrics.d.ts.map +1 -0
  101. package/dist/src/analysis/metrics.js +537 -0
  102. package/dist/src/analysis/metrics.js.map +1 -0
  103. package/dist/src/analysis/router.d.ts +264 -0
  104. package/dist/src/analysis/router.d.ts.map +1 -0
  105. package/dist/src/analysis/router.js +398 -0
  106. package/dist/src/analysis/router.js.map +1 -0
  107. package/dist/src/analysis/tree-cache.d.ts +208 -0
  108. package/dist/src/analysis/tree-cache.d.ts.map +1 -0
  109. package/dist/src/analysis/tree-cache.js +288 -0
  110. package/dist/src/analysis/tree-cache.js.map +1 -0
  111. package/dist/src/analysis/tree-sitter/manager.d.ts +141 -0
  112. package/dist/src/analysis/tree-sitter/manager.d.ts.map +1 -0
  113. package/dist/src/analysis/tree-sitter/manager.js +239 -0
  114. package/dist/src/analysis/tree-sitter/manager.js.map +1 -0
  115. package/dist/src/analysis/types.d.ts +69 -6
  116. package/dist/src/analysis/types.d.ts.map +1 -1
  117. package/dist/src/analysis/types.js +23 -2
  118. package/dist/src/analysis/types.js.map +1 -1
  119. package/dist/src/analysis/worker-pool.d.ts +141 -0
  120. package/dist/src/analysis/worker-pool.d.ts.map +1 -0
  121. package/dist/src/analysis/worker-pool.js +418 -0
  122. package/dist/src/analysis/worker-pool.js.map +1 -0
  123. package/dist/src/analytics/schema.d.ts +1 -1
  124. package/dist/src/analytics/schema.d.ts.map +1 -1
  125. package/dist/src/analytics/schema.js +72 -0
  126. package/dist/src/analytics/schema.js.map +1 -1
  127. package/dist/src/api/cache.d.ts +24 -1
  128. package/dist/src/api/cache.d.ts.map +1 -1
  129. package/dist/src/api/cache.js +50 -2
  130. package/dist/src/api/cache.js.map +1 -1
  131. package/dist/src/api/client.d.ts +132 -2
  132. package/dist/src/api/client.d.ts.map +1 -1
  133. package/dist/src/api/client.js +214 -18
  134. package/dist/src/api/client.js.map +1 -1
  135. package/dist/src/api/index.d.ts +2 -0
  136. package/dist/src/api/index.d.ts.map +1 -1
  137. package/dist/src/api/index.js +7 -0
  138. package/dist/src/api/index.js.map +1 -1
  139. package/dist/src/api/types.d.ts +251 -0
  140. package/dist/src/api/types.d.ts.map +1 -0
  141. package/dist/src/api/types.js +9 -0
  142. package/dist/src/api/types.js.map +1 -0
  143. package/dist/src/benchmarks/memory/MemoryProfiler.d.ts.map +1 -1
  144. package/dist/src/benchmarks/memory/MemoryProfiler.js.map +1 -1
  145. package/dist/src/embeddings/index.d.ts.map +1 -1
  146. package/dist/src/embeddings/index.js.map +1 -1
  147. package/dist/src/errors.d.ts +1 -0
  148. package/dist/src/errors.d.ts.map +1 -1
  149. package/dist/src/errors.js +1 -0
  150. package/dist/src/errors.js.map +1 -1
  151. package/dist/src/index.d.ts +3 -3
  152. package/dist/src/index.d.ts.map +1 -1
  153. package/dist/src/index.js +4 -4
  154. package/dist/src/index.js.map +1 -1
  155. package/dist/src/repositories/IndexerRepository.d.ts.map +1 -1
  156. package/dist/src/repositories/IndexerRepository.js +1 -0
  157. package/dist/src/repositories/IndexerRepository.js.map +1 -1
  158. package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
  159. package/dist/src/repositories/SkillRepository.js +1 -0
  160. package/dist/src/repositories/SkillRepository.js.map +1 -1
  161. package/dist/src/repositories/quarantine/QuarantineRepository.d.ts.map +1 -1
  162. package/dist/src/repositories/quarantine/QuarantineRepository.js.map +1 -1
  163. package/dist/src/repositories/quarantine/query-builder.d.ts.map +1 -1
  164. package/dist/src/repositories/quarantine/query-builder.js +1 -1
  165. package/dist/src/repositories/quarantine/query-builder.js.map +1 -1
  166. package/dist/src/scripts/__tests__/scan-imported-skills.test.js +3 -3
  167. package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
  168. package/dist/src/scripts/github-import/index.js.map +1 -1
  169. package/dist/src/scripts/import-github-skills.js +1 -1
  170. package/dist/src/scripts/import-github-skills.js.map +1 -1
  171. package/dist/src/scripts/skill-scanner/reporter.d.ts.map +1 -1
  172. package/dist/src/scripts/skill-scanner/reporter.js.map +1 -1
  173. package/dist/src/scripts/skill-scanner/scanner.d.ts.map +1 -1
  174. package/dist/src/scripts/skill-scanner/scanner.js.map +1 -1
  175. package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -1
  176. package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -1
  177. package/dist/src/scripts/validation/index.js +1 -2
  178. package/dist/src/scripts/validation/index.js.map +1 -1
  179. package/dist/src/scripts/validation/pipeline.d.ts.map +1 -1
  180. package/dist/src/scripts/validation/pipeline.js.map +1 -1
  181. package/dist/src/scripts/validation/types.d.ts +2 -2
  182. package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
  183. package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
  184. package/dist/src/services/SearchService.d.ts.map +1 -1
  185. package/dist/src/services/SearchService.js +1 -0
  186. package/dist/src/services/SearchService.js.map +1 -1
  187. package/dist/src/session/SessionHealthMonitor.d.ts +1 -1
  188. package/dist/src/session/SessionHealthMonitor.d.ts.map +1 -1
  189. package/dist/src/session/SessionHealthMonitor.js +1 -1
  190. package/dist/src/session/SessionHealthMonitor.js.map +1 -1
  191. package/dist/src/telemetry/index.d.ts +1 -1
  192. package/dist/src/telemetry/index.d.ts.map +1 -1
  193. package/dist/src/telemetry/index.js +2 -2
  194. package/dist/src/telemetry/index.js.map +1 -1
  195. package/dist/src/telemetry/posthog.d.ts +27 -5
  196. package/dist/src/telemetry/posthog.d.ts.map +1 -1
  197. package/dist/src/telemetry/posthog.js +20 -5
  198. package/dist/src/telemetry/posthog.js.map +1 -1
  199. package/dist/src/types/skill.d.ts +3 -0
  200. package/dist/src/types/skill.d.ts.map +1 -1
  201. package/dist/src/types.d.ts +2 -1
  202. package/dist/src/types.d.ts.map +1 -1
  203. package/dist/src/types.js +2 -2
  204. package/dist/src/types.js.map +1 -1
  205. package/dist/tests/adapters-factory.test.d.ts +13 -0
  206. package/dist/tests/adapters-factory.test.d.ts.map +1 -0
  207. package/dist/tests/adapters-factory.test.js +308 -0
  208. package/dist/tests/adapters-factory.test.js.map +1 -0
  209. package/dist/tests/adapters-java.test.d.ts +13 -0
  210. package/dist/tests/adapters-java.test.d.ts.map +1 -0
  211. package/dist/tests/adapters-java.test.js +925 -0
  212. package/dist/tests/adapters-java.test.js.map +1 -0
  213. package/dist/tests/api/client.validation.test.d.ts +7 -0
  214. package/dist/tests/api/client.validation.test.d.ts.map +1 -0
  215. package/dist/tests/api/client.validation.test.js +183 -0
  216. package/dist/tests/api/client.validation.test.js.map +1 -0
  217. package/dist/tests/language-detector.test.d.ts +13 -0
  218. package/dist/tests/language-detector.test.d.ts.map +1 -0
  219. package/dist/tests/language-detector.test.js +674 -0
  220. package/dist/tests/language-detector.test.js.map +1 -0
  221. package/dist/tests/telemetry/posthog.test.d.ts +13 -0
  222. package/dist/tests/telemetry/posthog.test.d.ts.map +1 -0
  223. package/dist/tests/telemetry/posthog.test.js +600 -0
  224. package/dist/tests/telemetry/posthog.test.js.map +1 -0
  225. package/package.json +5 -6
  226. package/dist/src/security/RateLimiter.d.ts +0 -337
  227. package/dist/src/security/RateLimiter.d.ts.map +0 -1
  228. package/dist/src/security/RateLimiter.js +0 -782
  229. package/dist/src/security/RateLimiter.js.map +0 -1
  230. package/dist/src/security/scanner.d.ts +0 -151
  231. package/dist/src/security/scanner.d.ts.map +0 -1
  232. package/dist/src/security/scanner.js +0 -599
  233. package/dist/src/security/scanner.js.map +0 -1
@@ -0,0 +1,402 @@
1
+ /**
2
+ * SMI-1308: Performance Benchmarks
3
+ *
4
+ * Benchmark suite for multi-language AST analysis performance.
5
+ *
6
+ * Performance Targets:
7
+ * - 10k files: < 5 seconds
8
+ * - Incremental parse: < 100ms
9
+ * - Memory budget: 500MB
10
+ * - Cache hit rate: > 80%
11
+ *
12
+ * @see docs/architecture/multi-language-analysis.md
13
+ */
14
+ import { describe, it, expect, beforeAll, afterAll, beforeEach } from 'vitest';
15
+ import { ParserWorkerPool } from '../worker-pool.js';
16
+ import { MemoryMonitor } from '../memory-monitor.js';
17
+ import { batchReadFiles, streamFiles, filterByExtension } from '../file-streamer.js';
18
+ import { LanguageRouter } from '../router.js';
19
+ import { TypeScriptAdapter } from '../adapters/typescript.js';
20
+ import { PythonAdapter } from '../adapters/python.js';
21
+ import { GoAdapter } from '../adapters/go.js';
22
+ import { ParseCache } from '../cache.js';
23
+ describe('Performance Benchmarks', () => {
24
+ describe('ParserWorkerPool', () => {
25
+ it('should parse 100 TypeScript files under 1 second', async () => {
26
+ const pool = new ParserWorkerPool({ poolSize: 4 });
27
+ // Generate mock tasks with realistic TypeScript content
28
+ const tasks = Array.from({ length: 100 }, (_, i) => ({
29
+ filePath: `test-${i}.ts`,
30
+ content: `
31
+ import { useState, useEffect } from 'react'
32
+ import type { FC } from 'react'
33
+
34
+ export interface Props${i} {
35
+ name: string
36
+ value: number
37
+ }
38
+
39
+ export const Component${i}: FC<Props${i}> = ({ name, value }) => {
40
+ const [state, setState] = useState(value)
41
+
42
+ useEffect(() => {
43
+ console.log('Component ${i} mounted')
44
+ }, [])
45
+
46
+ return <div>{name}: {state}</div>
47
+ }
48
+
49
+ export function helper${i}(a: number, b: number): number {
50
+ return a + b
51
+ }
52
+
53
+ export async function fetchData${i}(): Promise<void> {
54
+ await fetch('/api/data/${i}')
55
+ }
56
+ `.trim(),
57
+ language: 'typescript',
58
+ }));
59
+ const start = performance.now();
60
+ const results = await pool.parseFiles(tasks);
61
+ const duration = performance.now() - start;
62
+ expect(results).toHaveLength(100);
63
+ expect(duration).toBeLessThan(1000); // 1 second
64
+ // Verify parsing worked
65
+ const successCount = results.filter((r) => !r.error).length;
66
+ expect(successCount).toBeGreaterThan(90); // Allow some failures
67
+ pool.dispose();
68
+ });
69
+ it('should parse mixed language files', async () => {
70
+ const pool = new ParserWorkerPool({ poolSize: 4 });
71
+ const tasks = [
72
+ // TypeScript files
73
+ ...Array.from({ length: 30 }, (_, i) => ({
74
+ filePath: `ts-${i}.ts`,
75
+ content: `export const value${i} = ${i}`,
76
+ language: 'typescript',
77
+ })),
78
+ // Python files
79
+ ...Array.from({ length: 30 }, (_, i) => ({
80
+ filePath: `py-${i}.py`,
81
+ content: `def func${i}(): return ${i}`,
82
+ language: 'python',
83
+ })),
84
+ // Go files
85
+ ...Array.from({ length: 30 }, (_, i) => ({
86
+ filePath: `go-${i}.go`,
87
+ content: `func Func${i}() int { return ${i} }`,
88
+ language: 'go',
89
+ })),
90
+ ];
91
+ const start = performance.now();
92
+ const results = await pool.parseFiles(tasks);
93
+ const duration = performance.now() - start;
94
+ expect(results).toHaveLength(90);
95
+ expect(duration).toBeLessThan(2000); // 2 seconds for 90 files
96
+ pool.dispose();
97
+ });
98
+ it('should handle empty task list', async () => {
99
+ const pool = new ParserWorkerPool();
100
+ const results = await pool.parseFiles([]);
101
+ expect(results).toHaveLength(0);
102
+ pool.dispose();
103
+ });
104
+ it('should report pool statistics', () => {
105
+ const pool = new ParserWorkerPool({ poolSize: 8 });
106
+ const stats = pool.getStats();
107
+ expect(stats.poolSize).toBe(8);
108
+ expect(stats.activeWorkers).toBe(0);
109
+ expect(stats.queuedTasks).toBe(0);
110
+ pool.dispose();
111
+ });
112
+ it('should throw when disposed', async () => {
113
+ const pool = new ParserWorkerPool();
114
+ pool.dispose();
115
+ await expect(pool.parseFiles([{ filePath: 'a.ts', content: '', language: 'typescript' }])).rejects.toThrow('Worker pool has been disposed');
116
+ });
117
+ });
118
+ describe('MemoryMonitor', () => {
119
+ it('should track memory usage', () => {
120
+ const monitor = new MemoryMonitor({ thresholdMB: 100 });
121
+ const stats = monitor.getStats();
122
+ expect(stats.heapUsed).toBeGreaterThan(0);
123
+ expect(stats.heapTotal).toBeGreaterThan(0);
124
+ expect(stats.rss).toBeGreaterThan(0);
125
+ expect(stats.threshold).toBe(100 * 1024 * 1024);
126
+ expect(typeof stats.isOverThreshold).toBe('boolean');
127
+ });
128
+ it('should format bytes correctly', () => {
129
+ expect(MemoryMonitor.formatBytes(0)).toBe('0.00 B');
130
+ expect(MemoryMonitor.formatBytes(1024)).toBe('1.00 KB');
131
+ expect(MemoryMonitor.formatBytes(1024 * 1024)).toBe('1.00 MB');
132
+ expect(MemoryMonitor.formatBytes(1024 * 1024 * 1024)).toBe('1.00 GB');
133
+ expect(MemoryMonitor.formatBytes(1536)).toBe('1.50 KB');
134
+ });
135
+ it('should provide summary', () => {
136
+ const monitor = new MemoryMonitor({ thresholdMB: 500 });
137
+ const summary = monitor.getSummary();
138
+ expect(summary).toContain('Heap:');
139
+ expect(summary).toContain('RSS:');
140
+ expect(summary).toContain('Threshold:');
141
+ expect(summary).toContain('Cleanups:');
142
+ });
143
+ it('should track cleanup count', () => {
144
+ const cache = new ParseCache({ maxMemoryMB: 10 });
145
+ const monitor = new MemoryMonitor({ thresholdMB: 0.001, cache }); // Very low threshold
146
+ expect(monitor.getCleanupCount()).toBe(0);
147
+ // Force cleanup by setting threshold very low
148
+ monitor.forceCleanup();
149
+ expect(monitor.getCleanupCount()).toBe(1);
150
+ });
151
+ it('should start and stop monitoring', () => {
152
+ const monitor = new MemoryMonitor();
153
+ expect(monitor.isMonitoring()).toBe(false);
154
+ const stop = monitor.startMonitoring(60000); // Long interval for test
155
+ expect(monitor.isMonitoring()).toBe(true);
156
+ stop();
157
+ expect(monitor.isMonitoring()).toBe(false);
158
+ });
159
+ it('should integrate with ParseCache', () => {
160
+ const cache = new ParseCache({ maxMemoryMB: 10 });
161
+ const monitor = new MemoryMonitor({ cache });
162
+ // Add items to cache
163
+ for (let i = 0; i < 100; i++) {
164
+ cache.set(`file${i}.ts`, `content${i}`, {
165
+ imports: [],
166
+ exports: [],
167
+ functions: [],
168
+ });
169
+ }
170
+ expect(cache.size).toBeGreaterThan(0);
171
+ // Force cleanup
172
+ monitor.forceCleanup();
173
+ // Cache should be cleared
174
+ expect(cache.size).toBe(0);
175
+ });
176
+ });
177
+ describe('ParseCache', () => {
178
+ let cache;
179
+ beforeEach(() => {
180
+ cache = new ParseCache({ maxMemoryMB: 10 });
181
+ });
182
+ it('should achieve >80% cache hit rate on repeated parses', () => {
183
+ const content = 'export const foo = 1;';
184
+ const result = { imports: [], exports: [], functions: [] };
185
+ // First access - miss
186
+ expect(cache.get('test.ts', content)).toBeNull();
187
+ cache.set('test.ts', content, result);
188
+ // Repeated access - hits
189
+ let hits = 0;
190
+ for (let i = 0; i < 100; i++) {
191
+ if (cache.get('test.ts', content)) {
192
+ hits++;
193
+ }
194
+ }
195
+ const hitRate = hits / 100;
196
+ expect(hitRate).toBeGreaterThan(0.8);
197
+ const stats = cache.getStats();
198
+ expect(stats.hitRate).toBeGreaterThan(0.8);
199
+ });
200
+ it('should invalidate on content change', () => {
201
+ const result = { imports: [], exports: [], functions: [] };
202
+ cache.set('test.ts', 'original content', result);
203
+ expect(cache.get('test.ts', 'original content')).toEqual(result);
204
+ // Content changed - should miss
205
+ expect(cache.get('test.ts', 'modified content')).toBeNull();
206
+ });
207
+ it('should support pattern invalidation', () => {
208
+ const result = { imports: [], exports: [], functions: [] };
209
+ cache.set('src/a.ts', 'a', result);
210
+ cache.set('src/b.ts', 'b', result);
211
+ cache.set('lib/c.ts', 'c', result);
212
+ cache.invalidatePattern('src/*.ts');
213
+ expect(cache.has('src/a.ts')).toBe(false);
214
+ expect(cache.has('src/b.ts')).toBe(false);
215
+ expect(cache.has('lib/c.ts')).toBe(true);
216
+ });
217
+ });
218
+ describe('File Streamer', () => {
219
+ it('should filter files by extension', () => {
220
+ const paths = ['a.ts', 'b.tsx', 'c.js', 'd.py', 'e.go', 'f.txt'];
221
+ const tsFiles = filterByExtension(paths, ['.ts', '.tsx']);
222
+ expect(tsFiles).toEqual(['a.ts', 'b.tsx']);
223
+ const pyFiles = filterByExtension(paths, ['.py']);
224
+ expect(pyFiles).toEqual(['d.py']);
225
+ });
226
+ it('should stream files with generator', async () => {
227
+ // Create temporary test files
228
+ const fs = await import('fs/promises');
229
+ const path = await import('path');
230
+ const os = await import('os');
231
+ const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'bench-'));
232
+ const testFiles = [];
233
+ try {
234
+ // Create test files
235
+ for (let i = 0; i < 5; i++) {
236
+ const filePath = path.join(tempDir, `test${i}.ts`);
237
+ await fs.writeFile(filePath, `export const value${i} = ${i}`);
238
+ testFiles.push(filePath);
239
+ }
240
+ // Stream files
241
+ const results = [];
242
+ for await (const file of streamFiles(testFiles)) {
243
+ results.push({ path: file.path, lineCount: file.lineCount });
244
+ }
245
+ expect(results).toHaveLength(5);
246
+ }
247
+ finally {
248
+ // Cleanup
249
+ for (const file of testFiles) {
250
+ await fs.unlink(file).catch(() => { });
251
+ }
252
+ await fs.rmdir(tempDir).catch(() => { });
253
+ }
254
+ });
255
+ it('should batch read files with concurrency', async () => {
256
+ const fs = await import('fs/promises');
257
+ const path = await import('path');
258
+ const os = await import('os');
259
+ const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'bench-batch-'));
260
+ const testFiles = [];
261
+ try {
262
+ // Create test files
263
+ for (let i = 0; i < 20; i++) {
264
+ const filePath = path.join(tempDir, `batch${i}.ts`);
265
+ await fs.writeFile(filePath, `export const batch${i} = ${i}`);
266
+ testFiles.push(filePath);
267
+ }
268
+ // Batch read with limited concurrency
269
+ const start = performance.now();
270
+ const results = await batchReadFiles(testFiles, { concurrency: 5 });
271
+ const duration = performance.now() - start;
272
+ expect(results).toHaveLength(20);
273
+ expect(duration).toBeLessThan(1000); // Should be fast
274
+ }
275
+ finally {
276
+ // Cleanup
277
+ for (const file of testFiles) {
278
+ await fs.unlink(file).catch(() => { });
279
+ }
280
+ await fs.rmdir(tempDir).catch(() => { });
281
+ }
282
+ });
283
+ });
284
+ describe('LanguageRouter Performance', () => {
285
+ let router;
286
+ beforeAll(() => {
287
+ router = new LanguageRouter();
288
+ router.registerAdapter(new TypeScriptAdapter());
289
+ router.registerAdapter(new PythonAdapter());
290
+ router.registerAdapter(new GoAdapter());
291
+ });
292
+ afterAll(() => {
293
+ router.dispose();
294
+ });
295
+ it('should parse 1000 TypeScript files under 5 seconds', async () => {
296
+ const files = Array.from({ length: 1000 }, (_, i) => ({
297
+ path: `file${i}.ts`,
298
+ content: `
299
+ import { useState } from 'react'
300
+ export const Component${i} = () => useState(${i})
301
+ export function helper${i}() { return ${i} }
302
+ `.trim(),
303
+ }));
304
+ const start = performance.now();
305
+ for (const file of files) {
306
+ router.parseFile(file.content, file.path);
307
+ }
308
+ const duration = performance.now() - start;
309
+ // Should be well under 5 seconds for 1000 files
310
+ expect(duration).toBeLessThan(5000);
311
+ // Log actual performance
312
+ console.log(`Parsed 1000 TypeScript files in ${duration.toFixed(2)}ms`);
313
+ console.log(`Average: ${(duration / 1000).toFixed(2)}ms per file`);
314
+ });
315
+ it('should parse incrementally under 100ms', async () => {
316
+ const content = 'def new_function(): pass';
317
+ const adapter = router.getAdapterByLanguage('python');
318
+ if (adapter) {
319
+ const start = performance.now();
320
+ adapter.parseIncremental(content, 'test.py');
321
+ const duration = performance.now() - start;
322
+ expect(duration).toBeLessThan(100);
323
+ }
324
+ });
325
+ });
326
+ describe('Memory Budget Compliance', () => {
327
+ it('should stay within 500MB memory budget for 10k file simulation', () => {
328
+ const monitor = new MemoryMonitor({ thresholdMB: 500 });
329
+ const cache = new ParseCache({ maxMemoryMB: 200 });
330
+ // Simulate caching results for many files
331
+ for (let i = 0; i < 1000; i++) {
332
+ cache.set(`file${i}.ts`, `content${i}`, {
333
+ imports: Array.from({ length: 5 }, (_, j) => ({
334
+ module: `module${j}`,
335
+ namedImports: ['a', 'b', 'c'],
336
+ isTypeOnly: false,
337
+ sourceFile: `file${i}.ts`,
338
+ })),
339
+ exports: Array.from({ length: 3 }, (_, j) => ({
340
+ name: `export${j}`,
341
+ kind: 'function',
342
+ isDefault: false,
343
+ sourceFile: `file${i}.ts`,
344
+ })),
345
+ functions: Array.from({ length: 10 }, (_, j) => ({
346
+ name: `func${j}`,
347
+ parameterCount: 2,
348
+ isAsync: j % 2 === 0,
349
+ isExported: true,
350
+ sourceFile: `file${i}.ts`,
351
+ line: j * 10,
352
+ })),
353
+ });
354
+ }
355
+ const stats = monitor.getStats();
356
+ // Memory should be well under threshold
357
+ expect(stats.heapUsed).toBeLessThan(500 * 1024 * 1024);
358
+ // Cache should have evicted entries if needed
359
+ const cacheStats = cache.getStats();
360
+ expect(cacheStats.size).toBeLessThanOrEqual(cacheStats.maxSize);
361
+ cache.clear();
362
+ });
363
+ });
364
+ describe('Integration Benchmarks', () => {
365
+ it('should parse, cache, and reparse with high hit rate', async () => {
366
+ const cache = new ParseCache({ maxMemoryMB: 50 });
367
+ const router = new LanguageRouter();
368
+ router.registerAdapter(new TypeScriptAdapter());
369
+ const files = Array.from({ length: 100 }, (_, i) => ({
370
+ path: `src/component${i}.ts`,
371
+ content: `
372
+ import React from 'react'
373
+ export const Component${i} = () => <div>Hello ${i}</div>
374
+ `.trim(),
375
+ }));
376
+ // First pass - all misses
377
+ let misses = 0;
378
+ for (const file of files) {
379
+ const cached = cache.get(file.path, file.content);
380
+ if (!cached) {
381
+ misses++;
382
+ const result = router.parseFile(file.content, file.path);
383
+ cache.set(file.path, file.content, result);
384
+ }
385
+ }
386
+ expect(misses).toBe(100); // All misses on first pass
387
+ // Second pass - all hits (same content)
388
+ let hits = 0;
389
+ for (const file of files) {
390
+ if (cache.get(file.path, file.content)) {
391
+ hits++;
392
+ }
393
+ }
394
+ expect(hits).toBe(100); // All hits on second pass
395
+ const stats = cache.getStats();
396
+ expect(stats.hitRate).toBeGreaterThan(0.4); // At least 40% overall (100 hits / 200 total)
397
+ router.dispose();
398
+ cache.clear();
399
+ });
400
+ });
401
+ });
402
+ //# sourceMappingURL=performance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.test.js","sourceRoot":"","sources":["../../../../src/analysis/__tests__/performance.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * SMI-1305: Go Language Adapter Tests
3
+ *
4
+ * Comprehensive tests for the Go adapter including:
5
+ * - Import extraction (single and block imports)
6
+ * - Export detection (capitalization-based visibility)
7
+ * - Function extraction (with receivers)
8
+ * - go.mod parsing
9
+ * - Framework detection rules
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=go.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go.test.d.ts","sourceRoot":"","sources":["../../../../../src/analysis/adapters/__tests__/go.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}