@grafema/util 0.3.0-beta

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 (324) hide show
  1. package/LICENSE +190 -0
  2. package/dist/api/GraphAPI.d.ts +87 -0
  3. package/dist/api/GraphAPI.d.ts.map +1 -0
  4. package/dist/api/GraphAPI.js +212 -0
  5. package/dist/api/GraphAPI.js.map +1 -0
  6. package/dist/api/GuaranteeAPI.d.ts +147 -0
  7. package/dist/api/GuaranteeAPI.d.ts.map +1 -0
  8. package/dist/api/GuaranteeAPI.js +290 -0
  9. package/dist/api/GuaranteeAPI.js.map +1 -0
  10. package/dist/config/ConfigLoader.d.ts +214 -0
  11. package/dist/config/ConfigLoader.d.ts.map +1 -0
  12. package/dist/config/ConfigLoader.js +441 -0
  13. package/dist/config/ConfigLoader.js.map +1 -0
  14. package/dist/config/index.d.ts +6 -0
  15. package/dist/config/index.d.ts.map +1 -0
  16. package/dist/config/index.js +5 -0
  17. package/dist/config/index.js.map +1 -0
  18. package/dist/core/CoverageAnalyzer.d.ts +65 -0
  19. package/dist/core/CoverageAnalyzer.d.ts.map +1 -0
  20. package/dist/core/CoverageAnalyzer.js +199 -0
  21. package/dist/core/CoverageAnalyzer.js.map +1 -0
  22. package/dist/core/FileExplainer.d.ts +101 -0
  23. package/dist/core/FileExplainer.d.ts.map +1 -0
  24. package/dist/core/FileExplainer.js +140 -0
  25. package/dist/core/FileExplainer.js.map +1 -0
  26. package/dist/core/FileOverview.d.ts +124 -0
  27. package/dist/core/FileOverview.d.ts.map +1 -0
  28. package/dist/core/FileOverview.js +279 -0
  29. package/dist/core/FileOverview.js.map +1 -0
  30. package/dist/core/GrafemaUri.d.ts +66 -0
  31. package/dist/core/GrafemaUri.d.ts.map +1 -0
  32. package/dist/core/GrafemaUri.js +191 -0
  33. package/dist/core/GrafemaUri.js.map +1 -0
  34. package/dist/core/GraphBackend.d.ts +158 -0
  35. package/dist/core/GraphBackend.d.ts.map +1 -0
  36. package/dist/core/GraphBackend.js +85 -0
  37. package/dist/core/GraphBackend.js.map +1 -0
  38. package/dist/core/GraphFreshnessChecker.d.ts +33 -0
  39. package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
  40. package/dist/core/GraphFreshnessChecker.js +104 -0
  41. package/dist/core/GraphFreshnessChecker.js.map +1 -0
  42. package/dist/core/GuaranteeManager.d.ts +254 -0
  43. package/dist/core/GuaranteeManager.d.ts.map +1 -0
  44. package/dist/core/GuaranteeManager.js +447 -0
  45. package/dist/core/GuaranteeManager.js.map +1 -0
  46. package/dist/core/HashUtils.d.ts +24 -0
  47. package/dist/core/HashUtils.d.ts.map +1 -0
  48. package/dist/core/HashUtils.js +46 -0
  49. package/dist/core/HashUtils.js.map +1 -0
  50. package/dist/core/IncrementalReanalyzer.d.ts +33 -0
  51. package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
  52. package/dist/core/IncrementalReanalyzer.js +67 -0
  53. package/dist/core/IncrementalReanalyzer.js.map +1 -0
  54. package/dist/core/ResourceRegistry.d.ts +17 -0
  55. package/dist/core/ResourceRegistry.d.ts.map +1 -0
  56. package/dist/core/ResourceRegistry.js +32 -0
  57. package/dist/core/ResourceRegistry.js.map +1 -0
  58. package/dist/core/SemanticId.d.ts +159 -0
  59. package/dist/core/SemanticId.d.ts.map +1 -0
  60. package/dist/core/SemanticId.js +291 -0
  61. package/dist/core/SemanticId.js.map +1 -0
  62. package/dist/core/VersionManager.d.ts +166 -0
  63. package/dist/core/VersionManager.d.ts.map +1 -0
  64. package/dist/core/VersionManager.js +239 -0
  65. package/dist/core/VersionManager.js.map +1 -0
  66. package/dist/core/brandNodeInternal.d.ts +14 -0
  67. package/dist/core/brandNodeInternal.d.ts.map +1 -0
  68. package/dist/core/brandNodeInternal.js +4 -0
  69. package/dist/core/brandNodeInternal.js.map +1 -0
  70. package/dist/core/nodes/GuaranteeNode.d.ts +76 -0
  71. package/dist/core/nodes/GuaranteeNode.d.ts.map +1 -0
  72. package/dist/core/nodes/GuaranteeNode.js +118 -0
  73. package/dist/core/nodes/GuaranteeNode.js.map +1 -0
  74. package/dist/core/nodes/IssueNode.d.ts +73 -0
  75. package/dist/core/nodes/IssueNode.d.ts.map +1 -0
  76. package/dist/core/nodes/IssueNode.js +130 -0
  77. package/dist/core/nodes/IssueNode.js.map +1 -0
  78. package/dist/core/nodes/NodeKind.d.ts +104 -0
  79. package/dist/core/nodes/NodeKind.d.ts.map +1 -0
  80. package/dist/core/nodes/NodeKind.js +166 -0
  81. package/dist/core/nodes/NodeKind.js.map +1 -0
  82. package/dist/diagnostics/DiagnosticCollector.d.ts +103 -0
  83. package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
  84. package/dist/diagnostics/DiagnosticCollector.js +133 -0
  85. package/dist/diagnostics/DiagnosticCollector.js.map +1 -0
  86. package/dist/diagnostics/DiagnosticReporter.d.ts +122 -0
  87. package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
  88. package/dist/diagnostics/DiagnosticReporter.js +300 -0
  89. package/dist/diagnostics/DiagnosticReporter.js.map +1 -0
  90. package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
  91. package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
  92. package/dist/diagnostics/DiagnosticWriter.js +44 -0
  93. package/dist/diagnostics/DiagnosticWriter.js.map +1 -0
  94. package/dist/diagnostics/categories.d.ts +57 -0
  95. package/dist/diagnostics/categories.d.ts.map +1 -0
  96. package/dist/diagnostics/categories.js +71 -0
  97. package/dist/diagnostics/categories.js.map +1 -0
  98. package/dist/diagnostics/index.d.ts +17 -0
  99. package/dist/diagnostics/index.d.ts.map +1 -0
  100. package/dist/diagnostics/index.js +15 -0
  101. package/dist/diagnostics/index.js.map +1 -0
  102. package/dist/errors/GrafemaError.d.ts +200 -0
  103. package/dist/errors/GrafemaError.d.ts.map +1 -0
  104. package/dist/errors/GrafemaError.js +209 -0
  105. package/dist/errors/GrafemaError.js.map +1 -0
  106. package/dist/index.d.ts +75 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +76 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/instructions/index.d.ts +8 -0
  111. package/dist/instructions/index.d.ts.map +1 -0
  112. package/dist/instructions/index.js +20 -0
  113. package/dist/instructions/index.js.map +1 -0
  114. package/dist/instructions/onboarding.md +133 -0
  115. package/dist/knowledge/KnowledgeBase.d.ts +113 -0
  116. package/dist/knowledge/KnowledgeBase.d.ts.map +1 -0
  117. package/dist/knowledge/KnowledgeBase.js +420 -0
  118. package/dist/knowledge/KnowledgeBase.js.map +1 -0
  119. package/dist/knowledge/SemanticAddressResolver.d.ts +59 -0
  120. package/dist/knowledge/SemanticAddressResolver.d.ts.map +1 -0
  121. package/dist/knowledge/SemanticAddressResolver.js +160 -0
  122. package/dist/knowledge/SemanticAddressResolver.js.map +1 -0
  123. package/dist/knowledge/git-ingest.d.ts +58 -0
  124. package/dist/knowledge/git-ingest.d.ts.map +1 -0
  125. package/dist/knowledge/git-ingest.js +301 -0
  126. package/dist/knowledge/git-ingest.js.map +1 -0
  127. package/dist/knowledge/git-queries.d.ts +86 -0
  128. package/dist/knowledge/git-queries.d.ts.map +1 -0
  129. package/dist/knowledge/git-queries.js +177 -0
  130. package/dist/knowledge/git-queries.js.map +1 -0
  131. package/dist/knowledge/index.d.ts +14 -0
  132. package/dist/knowledge/index.d.ts.map +1 -0
  133. package/dist/knowledge/index.js +10 -0
  134. package/dist/knowledge/index.js.map +1 -0
  135. package/dist/knowledge/parser.d.ts +39 -0
  136. package/dist/knowledge/parser.d.ts.map +1 -0
  137. package/dist/knowledge/parser.js +292 -0
  138. package/dist/knowledge/parser.js.map +1 -0
  139. package/dist/knowledge/types.d.ts +133 -0
  140. package/dist/knowledge/types.d.ts.map +1 -0
  141. package/dist/knowledge/types.js +8 -0
  142. package/dist/knowledge/types.js.map +1 -0
  143. package/dist/logging/Logger.d.ts +98 -0
  144. package/dist/logging/Logger.d.ts.map +1 -0
  145. package/dist/logging/Logger.js +274 -0
  146. package/dist/logging/Logger.js.map +1 -0
  147. package/dist/notation/archetypes.d.ts +36 -0
  148. package/dist/notation/archetypes.d.ts.map +1 -0
  149. package/dist/notation/archetypes.js +173 -0
  150. package/dist/notation/archetypes.js.map +1 -0
  151. package/dist/notation/fold.d.ts +25 -0
  152. package/dist/notation/fold.d.ts.map +1 -0
  153. package/dist/notation/fold.js +598 -0
  154. package/dist/notation/fold.js.map +1 -0
  155. package/dist/notation/index.d.ts +18 -0
  156. package/dist/notation/index.d.ts.map +1 -0
  157. package/dist/notation/index.js +16 -0
  158. package/dist/notation/index.js.map +1 -0
  159. package/dist/notation/lodExtractor.d.ts +32 -0
  160. package/dist/notation/lodExtractor.d.ts.map +1 -0
  161. package/dist/notation/lodExtractor.js +149 -0
  162. package/dist/notation/lodExtractor.js.map +1 -0
  163. package/dist/notation/nameShortener.d.ts +22 -0
  164. package/dist/notation/nameShortener.d.ts.map +1 -0
  165. package/dist/notation/nameShortener.js +24 -0
  166. package/dist/notation/nameShortener.js.map +1 -0
  167. package/dist/notation/perspectives.d.ts +11 -0
  168. package/dist/notation/perspectives.d.ts.map +1 -0
  169. package/dist/notation/perspectives.js +16 -0
  170. package/dist/notation/perspectives.js.map +1 -0
  171. package/dist/notation/renderer.d.ts +31 -0
  172. package/dist/notation/renderer.d.ts.map +1 -0
  173. package/dist/notation/renderer.js +315 -0
  174. package/dist/notation/renderer.js.map +1 -0
  175. package/dist/notation/traceRenderer.d.ts +39 -0
  176. package/dist/notation/traceRenderer.d.ts.map +1 -0
  177. package/dist/notation/traceRenderer.js +358 -0
  178. package/dist/notation/traceRenderer.js.map +1 -0
  179. package/dist/notation/types.d.ts +66 -0
  180. package/dist/notation/types.d.ts.map +1 -0
  181. package/dist/notation/types.js +10 -0
  182. package/dist/notation/types.js.map +1 -0
  183. package/dist/queries/NodeContext.d.ts +81 -0
  184. package/dist/queries/NodeContext.d.ts.map +1 -0
  185. package/dist/queries/NodeContext.js +196 -0
  186. package/dist/queries/NodeContext.js.map +1 -0
  187. package/dist/queries/findCallsInFunction.d.ts +62 -0
  188. package/dist/queries/findCallsInFunction.d.ts.map +1 -0
  189. package/dist/queries/findCallsInFunction.js +169 -0
  190. package/dist/queries/findCallsInFunction.js.map +1 -0
  191. package/dist/queries/findContainingFunction.d.ts +57 -0
  192. package/dist/queries/findContainingFunction.d.ts.map +1 -0
  193. package/dist/queries/findContainingFunction.js +91 -0
  194. package/dist/queries/findContainingFunction.js.map +1 -0
  195. package/dist/queries/index.d.ts +18 -0
  196. package/dist/queries/index.d.ts.map +1 -0
  197. package/dist/queries/index.js +14 -0
  198. package/dist/queries/index.js.map +1 -0
  199. package/dist/queries/traceDataflow.d.ts +65 -0
  200. package/dist/queries/traceDataflow.d.ts.map +1 -0
  201. package/dist/queries/traceDataflow.js +754 -0
  202. package/dist/queries/traceDataflow.js.map +1 -0
  203. package/dist/queries/traceValues.d.ts +70 -0
  204. package/dist/queries/traceValues.d.ts.map +1 -0
  205. package/dist/queries/traceValues.js +373 -0
  206. package/dist/queries/traceValues.js.map +1 -0
  207. package/dist/queries/types.d.ts +166 -0
  208. package/dist/queries/types.d.ts.map +1 -0
  209. package/dist/queries/types.js +10 -0
  210. package/dist/queries/types.js.map +1 -0
  211. package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
  212. package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
  213. package/dist/schema/GraphSchemaExtractor.js +125 -0
  214. package/dist/schema/GraphSchemaExtractor.js.map +1 -0
  215. package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
  216. package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
  217. package/dist/schema/InterfaceSchemaExtractor.js +113 -0
  218. package/dist/schema/InterfaceSchemaExtractor.js.map +1 -0
  219. package/dist/schema/index.d.ts +5 -0
  220. package/dist/schema/index.d.ts.map +1 -0
  221. package/dist/schema/index.js +3 -0
  222. package/dist/schema/index.js.map +1 -0
  223. package/dist/storage/backends/RFDBServerBackend.d.ts +356 -0
  224. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -0
  225. package/dist/storage/backends/RFDBServerBackend.js +748 -0
  226. package/dist/storage/backends/RFDBServerBackend.js.map +1 -0
  227. package/dist/storage/backends/typeValidation.d.ts +47 -0
  228. package/dist/storage/backends/typeValidation.d.ts.map +1 -0
  229. package/dist/storage/backends/typeValidation.js +141 -0
  230. package/dist/storage/backends/typeValidation.js.map +1 -0
  231. package/dist/utils/findRfdbBinary.d.ts +67 -0
  232. package/dist/utils/findRfdbBinary.d.ts.map +1 -0
  233. package/dist/utils/findRfdbBinary.js +261 -0
  234. package/dist/utils/findRfdbBinary.js.map +1 -0
  235. package/dist/utils/lazyDownload.d.ts +43 -0
  236. package/dist/utils/lazyDownload.d.ts.map +1 -0
  237. package/dist/utils/lazyDownload.js +175 -0
  238. package/dist/utils/lazyDownload.js.map +1 -0
  239. package/dist/utils/moduleResolution.d.ts +134 -0
  240. package/dist/utils/moduleResolution.d.ts.map +1 -0
  241. package/dist/utils/moduleResolution.js +189 -0
  242. package/dist/utils/moduleResolution.js.map +1 -0
  243. package/dist/utils/resolveNodeFile.d.ts +13 -0
  244. package/dist/utils/resolveNodeFile.d.ts.map +1 -0
  245. package/dist/utils/resolveNodeFile.js +18 -0
  246. package/dist/utils/resolveNodeFile.js.map +1 -0
  247. package/dist/utils/startRfdbServer.d.ts +63 -0
  248. package/dist/utils/startRfdbServer.d.ts.map +1 -0
  249. package/dist/utils/startRfdbServer.js +142 -0
  250. package/dist/utils/startRfdbServer.js.map +1 -0
  251. package/dist/validation/PathValidator.d.ts +80 -0
  252. package/dist/validation/PathValidator.d.ts.map +1 -0
  253. package/dist/validation/PathValidator.js +252 -0
  254. package/dist/validation/PathValidator.js.map +1 -0
  255. package/dist/version.d.ts +11 -0
  256. package/dist/version.d.ts.map +1 -0
  257. package/dist/version.js +26 -0
  258. package/dist/version.js.map +1 -0
  259. package/package.json +50 -0
  260. package/src/api/GraphAPI.ts +307 -0
  261. package/src/api/GuaranteeAPI.ts +402 -0
  262. package/src/config/ConfigLoader.ts +653 -0
  263. package/src/config/index.ts +13 -0
  264. package/src/core/CoverageAnalyzer.ts +243 -0
  265. package/src/core/FileExplainer.ts +179 -0
  266. package/src/core/FileOverview.ts +397 -0
  267. package/src/core/GrafemaUri.ts +216 -0
  268. package/src/core/GraphBackend.ts +266 -0
  269. package/src/core/GraphFreshnessChecker.ts +145 -0
  270. package/src/core/GuaranteeManager.ts +684 -0
  271. package/src/core/HashUtils.ts +48 -0
  272. package/src/core/IncrementalReanalyzer.ts +106 -0
  273. package/src/core/ResourceRegistry.ts +39 -0
  274. package/src/core/SemanticId.ts +423 -0
  275. package/src/core/VersionManager.ts +405 -0
  276. package/src/core/brandNodeInternal.ts +16 -0
  277. package/src/core/nodes/GuaranteeNode.ts +162 -0
  278. package/src/core/nodes/IssueNode.ts +177 -0
  279. package/src/core/nodes/NodeKind.ts +192 -0
  280. package/src/diagnostics/DiagnosticCollector.ts +170 -0
  281. package/src/diagnostics/DiagnosticReporter.ts +395 -0
  282. package/src/diagnostics/DiagnosticWriter.ts +50 -0
  283. package/src/diagnostics/categories.ts +104 -0
  284. package/src/diagnostics/index.ts +30 -0
  285. package/src/errors/GrafemaError.ts +297 -0
  286. package/src/index.ts +261 -0
  287. package/src/instructions/index.ts +21 -0
  288. package/src/instructions/onboarding.md +133 -0
  289. package/src/knowledge/KnowledgeBase.ts +486 -0
  290. package/src/knowledge/SemanticAddressResolver.ts +191 -0
  291. package/src/knowledge/git-ingest.ts +402 -0
  292. package/src/knowledge/git-queries.ts +269 -0
  293. package/src/knowledge/index.ts +29 -0
  294. package/src/knowledge/parser.ts +294 -0
  295. package/src/knowledge/types.ts +146 -0
  296. package/src/logging/Logger.ts +303 -0
  297. package/src/notation/archetypes.ts +189 -0
  298. package/src/notation/fold.ts +696 -0
  299. package/src/notation/index.ts +27 -0
  300. package/src/notation/lodExtractor.ts +177 -0
  301. package/src/notation/nameShortener.ts +24 -0
  302. package/src/notation/perspectives.ts +18 -0
  303. package/src/notation/renderer.ts +394 -0
  304. package/src/notation/traceRenderer.ts +458 -0
  305. package/src/notation/types.ts +79 -0
  306. package/src/queries/NodeContext.ts +280 -0
  307. package/src/queries/findCallsInFunction.ts +249 -0
  308. package/src/queries/findContainingFunction.ts +124 -0
  309. package/src/queries/index.ts +44 -0
  310. package/src/queries/traceDataflow.ts +838 -0
  311. package/src/queries/traceValues.ts +531 -0
  312. package/src/queries/types.ts +191 -0
  313. package/src/schema/GraphSchemaExtractor.ts +177 -0
  314. package/src/schema/InterfaceSchemaExtractor.ts +173 -0
  315. package/src/schema/index.ts +5 -0
  316. package/src/storage/backends/RFDBServerBackend.ts +895 -0
  317. package/src/storage/backends/typeValidation.ts +154 -0
  318. package/src/utils/findRfdbBinary.ts +288 -0
  319. package/src/utils/lazyDownload.ts +206 -0
  320. package/src/utils/moduleResolution.ts +271 -0
  321. package/src/utils/resolveNodeFile.ts +18 -0
  322. package/src/utils/startRfdbServer.ts +197 -0
  323. package/src/validation/PathValidator.ts +334 -0
  324. package/src/version.ts +28 -0
@@ -0,0 +1,441 @@
1
+ import { readFileSync, existsSync, statSync } from 'fs';
2
+ import { join, basename } from 'path';
3
+ import { parse as parseYAML } from 'yaml';
4
+ import { GRAFEMA_VERSION, getSchemaVersion } from '../version.js';
5
+ /**
6
+ * Default plugin configuration.
7
+ * Matches current DEFAULT_PLUGINS in analyze.ts and config.ts (MCP).
8
+ */
9
+ export const DEFAULT_CONFIG = {
10
+ version: getSchemaVersion(GRAFEMA_VERSION),
11
+ plugins: {
12
+ discovery: [],
13
+ indexing: ['JSModuleIndexer'],
14
+ analysis: [
15
+ 'CoreV2Analyzer',
16
+ 'ExpressRouteAnalyzer',
17
+ 'ExpressResponseAnalyzer',
18
+ 'NestJSRouteAnalyzer',
19
+ 'SocketIOAnalyzer',
20
+ 'DatabaseAnalyzer',
21
+ 'FetchAnalyzer',
22
+ 'ServiceLayerAnalyzer',
23
+ ],
24
+ enrichment: [
25
+ 'ExportEntityLinker',
26
+ 'CallbackCallResolver',
27
+ 'RejectionPropagationEnricher',
28
+ 'ValueDomainAnalyzer',
29
+ 'MountPointResolver',
30
+ 'ExpressHandlerLinker',
31
+ 'PrefixEvaluator',
32
+ 'ConfigRoutingMapBuilder',
33
+ 'ServiceConnectionEnricher',
34
+ 'RedisEnricher',
35
+ ],
36
+ validation: [
37
+ 'GraphConnectivityValidator',
38
+ 'DataFlowValidator',
39
+ 'EvalBanValidator',
40
+ 'CallResolverValidator',
41
+ 'SQLInjectionValidator',
42
+ 'AwaitInLoopValidator',
43
+ 'ShadowingDetector',
44
+ 'BrokenImportValidator',
45
+ 'UnconnectedRouteValidator',
46
+ 'PackageCoverageValidator',
47
+ ],
48
+ },
49
+ services: [], // Empty by default (uses auto-discovery)
50
+ strict: false, // Graceful degradation by default
51
+ };
52
+ /**
53
+ * Load Grafema config from project directory.
54
+ *
55
+ * Priority:
56
+ * 1. config.yaml (preferred)
57
+ * 2. config.json (deprecated, fallback)
58
+ * 3. DEFAULT_CONFIG (if neither exists)
59
+ *
60
+ * Warnings:
61
+ * - Logs deprecation warning if config.json is used
62
+ * - Logs parse errors but doesn't throw (returns defaults)
63
+ *
64
+ * @param projectPath - Absolute path to project root
65
+ * @param logger - Optional logger for warnings (defaults to console.warn)
66
+ * @returns Parsed config or defaults
67
+ */
68
+ export function loadConfig(projectPath, logger = console) {
69
+ const grafemaDir = join(projectPath, '.grafema');
70
+ const yamlPath = join(grafemaDir, 'config.yaml');
71
+ const jsonPath = join(grafemaDir, 'config.json');
72
+ // 1. Try YAML first (preferred)
73
+ if (existsSync(yamlPath)) {
74
+ let parsed;
75
+ try {
76
+ const content = readFileSync(yamlPath, 'utf-8');
77
+ parsed = parseYAML(content);
78
+ // Validate structure - ensure plugins sections are arrays if they exist
79
+ if (parsed.plugins) {
80
+ for (const phase of ['discovery', 'indexing', 'analysis', 'enrichment', 'validation']) {
81
+ const value = parsed.plugins[phase];
82
+ if (value !== undefined && value !== null && !Array.isArray(value)) {
83
+ throw new Error(`plugins.${phase} must be an array, got ${typeof value}`);
84
+ }
85
+ }
86
+ }
87
+ }
88
+ catch (err) {
89
+ const error = err instanceof Error ? err : new Error(String(err));
90
+ logger.warn(`Failed to parse config.yaml: ${error.message}`);
91
+ logger.warn('Using default configuration');
92
+ return DEFAULT_CONFIG;
93
+ }
94
+ // Validate version compatibility (THROWS on error) - REG-403
95
+ validateVersion(parsed.version);
96
+ // Validate services array if present (THROWS on error per Linus review)
97
+ // This is OUTSIDE try-catch - config errors MUST throw
98
+ validateServices(parsed.services, projectPath);
99
+ // Validate include/exclude patterns (THROWS on error)
100
+ validatePatterns(parsed.include, parsed.exclude, logger);
101
+ // Validate workspace.roots if present (THROWS on error) - REG-76
102
+ validateWorkspace(parsed.workspace, projectPath);
103
+ // Validate routing rules if present (THROWS on error) - REG-256
104
+ validateRouting(parsed.routing, (parsed.services || []));
105
+ // Merge with defaults (user config may be partial)
106
+ return mergeConfig(DEFAULT_CONFIG, parsed);
107
+ }
108
+ // 2. Fallback to JSON (migration path)
109
+ if (existsSync(jsonPath)) {
110
+ logger.warn('⚠ config.json is deprecated. Run "grafema init --force" to migrate to config.yaml');
111
+ let parsed;
112
+ try {
113
+ const content = readFileSync(jsonPath, 'utf-8');
114
+ parsed = JSON.parse(content);
115
+ }
116
+ catch (err) {
117
+ const error = err instanceof Error ? err : new Error(String(err));
118
+ logger.warn(`Failed to parse config.json: ${error.message}`);
119
+ logger.warn('Using default configuration');
120
+ return DEFAULT_CONFIG;
121
+ }
122
+ // Validate version compatibility (THROWS on error) - REG-403
123
+ validateVersion(parsed.version);
124
+ // Validate services array if present (THROWS on error)
125
+ // This is OUTSIDE try-catch - config errors MUST throw
126
+ validateServices(parsed.services, projectPath);
127
+ // Validate include/exclude patterns (THROWS on error)
128
+ validatePatterns(parsed.include, parsed.exclude, logger);
129
+ // Validate workspace.roots if present (THROWS on error) - REG-76
130
+ validateWorkspace(parsed.workspace, projectPath);
131
+ // Validate routing rules if present (THROWS on error) - REG-256
132
+ validateRouting(parsed.routing, (parsed.services || []));
133
+ return mergeConfig(DEFAULT_CONFIG, parsed);
134
+ }
135
+ // 3. No config file - return defaults
136
+ return DEFAULT_CONFIG;
137
+ }
138
+ /**
139
+ * Validate config version compatibility with running Grafema version.
140
+ * THROWS on error (fail loudly per project convention).
141
+ *
142
+ * Compares major.minor.patch (pre-release tags are stripped).
143
+ * If config has no version field, validation passes silently (backward compat).
144
+ *
145
+ * @param configVersion - Version string from config file (may be undefined)
146
+ * @param currentVersion - Override for testing (defaults to GRAFEMA_VERSION)
147
+ */
148
+ export function validateVersion(configVersion, currentVersion) {
149
+ // No version field = backward compat, accept silently
150
+ if (configVersion === undefined || configVersion === null) {
151
+ return;
152
+ }
153
+ if (typeof configVersion !== 'string') {
154
+ throw new Error(`Config error: version must be a string, got ${typeof configVersion}`);
155
+ }
156
+ if (!configVersion.trim()) {
157
+ throw new Error('Config error: version cannot be empty');
158
+ }
159
+ const current = currentVersion ?? GRAFEMA_VERSION;
160
+ const configSchema = getSchemaVersion(configVersion);
161
+ const currentSchema = getSchemaVersion(current);
162
+ if (configSchema !== currentSchema) {
163
+ throw new Error(`Config error: config version "${configVersion}" is not compatible with ` +
164
+ `Grafema ${current}. Expected "${currentSchema}".\n` +
165
+ ` Run: grafema init --force (to regenerate config for current version)`);
166
+ }
167
+ }
168
+ /**
169
+ * Validate services array structure.
170
+ * THROWS on error (fail loudly per Linus review).
171
+ *
172
+ * @param services - Parsed services array (may be undefined)
173
+ * @param projectPath - Project root for path validation
174
+ */
175
+ export function validateServices(services, projectPath) {
176
+ // undefined/null is valid (means use defaults)
177
+ if (services === undefined || services === null) {
178
+ return;
179
+ }
180
+ // Must be an array
181
+ if (!Array.isArray(services)) {
182
+ throw new Error(`Config error: services must be an array, got ${typeof services}`);
183
+ }
184
+ // Validate each service
185
+ for (let i = 0; i < services.length; i++) {
186
+ const svc = services[i];
187
+ // Must be an object
188
+ if (typeof svc !== 'object' || svc === null) {
189
+ throw new Error(`Config error: services[${i}] must be an object`);
190
+ }
191
+ // Name validation - required, non-empty string
192
+ if (typeof svc.name !== 'string') {
193
+ throw new Error(`Config error: services[${i}].name must be a string, got ${typeof svc.name}`);
194
+ }
195
+ if (!svc.name.trim()) {
196
+ throw new Error(`Config error: services[${i}].name cannot be empty or whitespace-only`);
197
+ }
198
+ // Path validation - required, non-empty string
199
+ if (typeof svc.path !== 'string') {
200
+ throw new Error(`Config error: services[${i}].path must be a string, got ${typeof svc.path}`);
201
+ }
202
+ if (!svc.path.trim()) {
203
+ throw new Error(`Config error: services[${i}].path cannot be empty or whitespace-only`);
204
+ }
205
+ // Path validation - must be relative (reject absolute paths per Linus review)
206
+ if (svc.path.startsWith('/') || svc.path.startsWith('~')) {
207
+ throw new Error(`Config error: services[${i}].path must be relative to project root, got "${svc.path}"`);
208
+ }
209
+ // Path validation - must exist
210
+ const absolutePath = join(projectPath, svc.path);
211
+ if (!existsSync(absolutePath)) {
212
+ throw new Error(`Config error: services[${i}].path "${svc.path}" does not exist`);
213
+ }
214
+ // Path validation - must be directory
215
+ if (!statSync(absolutePath).isDirectory()) {
216
+ throw new Error(`Config error: services[${i}].path "${svc.path}" must be a directory`);
217
+ }
218
+ // entryPoint validation (optional field) - must be non-empty string if provided
219
+ if (svc.entryPoint !== undefined) {
220
+ if (typeof svc.entryPoint !== 'string') {
221
+ throw new Error(`Config error: services[${i}].entryPoint must be a string, got ${typeof svc.entryPoint}`);
222
+ }
223
+ if (!svc.entryPoint.trim()) {
224
+ throw new Error(`Config error: services[${i}].entryPoint cannot be empty or whitespace-only`);
225
+ }
226
+ }
227
+ // customerFacing validation (optional field) - must be boolean if provided (REG-256)
228
+ if (svc.customerFacing !== undefined) {
229
+ if (typeof svc.customerFacing !== 'boolean') {
230
+ throw new Error(`Config error: services[${i}].customerFacing must be a boolean, got ${typeof svc.customerFacing}`);
231
+ }
232
+ }
233
+ }
234
+ }
235
+ /**
236
+ * Validate workspace configuration (REG-76).
237
+ * THROWS on error (fail loudly per project convention).
238
+ *
239
+ * Validation rules:
240
+ * 1. workspace.roots must be an array if provided
241
+ * 2. Each root must be a non-empty string
242
+ * 3. Each root path must exist and be a directory
243
+ * 4. Root basenames must be unique (to prevent semantic ID collisions)
244
+ *
245
+ * @param workspace - Parsed workspace config (may be undefined)
246
+ * @param projectPath - Project root for path validation
247
+ */
248
+ export function validateWorkspace(workspace, projectPath) {
249
+ // undefined/null is valid (means single-root mode)
250
+ if (workspace === undefined || workspace === null) {
251
+ return;
252
+ }
253
+ // Must be an object
254
+ if (typeof workspace !== 'object') {
255
+ throw new Error(`Config error: workspace must be an object, got ${typeof workspace}`);
256
+ }
257
+ const ws = workspace;
258
+ // roots is optional, but if provided must be valid
259
+ if (ws.roots === undefined || ws.roots === null) {
260
+ return;
261
+ }
262
+ // roots must be an array
263
+ if (!Array.isArray(ws.roots)) {
264
+ throw new Error(`Config error: workspace.roots must be an array, got ${typeof ws.roots}`);
265
+ }
266
+ // Track root names for duplicate detection
267
+ const seenNames = new Set();
268
+ // Validate each root
269
+ for (let i = 0; i < ws.roots.length; i++) {
270
+ const root = ws.roots[i];
271
+ // Must be a string
272
+ if (typeof root !== 'string') {
273
+ throw new Error(`Config error: workspace.roots[${i}] must be a string, got ${typeof root}`);
274
+ }
275
+ // Must not be empty
276
+ if (!root.trim()) {
277
+ throw new Error(`Config error: workspace.roots[${i}] cannot be empty or whitespace-only`);
278
+ }
279
+ // Must be relative path
280
+ if (root.startsWith('/') || root.startsWith('~')) {
281
+ throw new Error(`Config error: workspace.roots[${i}] must be relative to project root, got "${root}"`);
282
+ }
283
+ // Path must exist
284
+ const absolutePath = join(projectPath, root);
285
+ if (!existsSync(absolutePath)) {
286
+ throw new Error(`Config error: workspace.roots[${i}] "${root}" does not exist`);
287
+ }
288
+ // Path must be a directory
289
+ if (!statSync(absolutePath).isDirectory()) {
290
+ throw new Error(`Config error: workspace.roots[${i}] "${root}" must be a directory`);
291
+ }
292
+ // Check for duplicate root names (basename)
293
+ const rootName = basename(root);
294
+ if (seenNames.has(rootName)) {
295
+ throw new Error(`Config error: Duplicate workspace root name "${rootName}" - root names (basenames) must be unique`);
296
+ }
297
+ seenNames.add(rootName);
298
+ }
299
+ }
300
+ /**
301
+ * Validate routing rules structure (REG-256).
302
+ * THROWS on error (fail loudly per project convention).
303
+ *
304
+ * Validation rules:
305
+ * 1. Must be an array if provided
306
+ * 2. Each rule must have 'from' and 'to' as non-empty strings
307
+ * 3. 'stripPrefix' must start with '/' if provided
308
+ * 4. 'addPrefix' must start with '/' if provided
309
+ * 5. 'from' and 'to' must reference services defined in the services array
310
+ *
311
+ * @param routing - Parsed routing rules (may be undefined)
312
+ * @param services - Parsed services array (for cross-validation)
313
+ */
314
+ export function validateRouting(routing, services) {
315
+ if (routing === undefined || routing === null)
316
+ return;
317
+ if (!Array.isArray(routing)) {
318
+ throw new Error(`Config error: routing must be an array, got ${typeof routing}`);
319
+ }
320
+ const serviceNames = new Set(services.map(s => s.name));
321
+ for (let i = 0; i < routing.length; i++) {
322
+ const rule = routing[i];
323
+ if (typeof rule !== 'object' || rule === null) {
324
+ throw new Error(`Config error: routing[${i}] must be an object`);
325
+ }
326
+ // from — required
327
+ if (typeof rule.from !== 'string' || !rule.from.trim()) {
328
+ throw new Error(`Config error: routing[${i}].from must be a non-empty string`);
329
+ }
330
+ // to — required
331
+ if (typeof rule.to !== 'string' || !rule.to.trim()) {
332
+ throw new Error(`Config error: routing[${i}].to must be a non-empty string`);
333
+ }
334
+ // Cross-validate against services (only if services are defined)
335
+ if (serviceNames.size > 0) {
336
+ if (!serviceNames.has(rule.from)) {
337
+ throw new Error(`Config error: routing[${i}].from "${rule.from}" does not match any service name. ` +
338
+ `Available: ${[...serviceNames].join(', ')}`);
339
+ }
340
+ if (!serviceNames.has(rule.to)) {
341
+ throw new Error(`Config error: routing[${i}].to "${rule.to}" does not match any service name. ` +
342
+ `Available: ${[...serviceNames].join(', ')}`);
343
+ }
344
+ }
345
+ // stripPrefix — optional, must start with /
346
+ if (rule.stripPrefix !== undefined) {
347
+ if (typeof rule.stripPrefix !== 'string') {
348
+ throw new Error(`Config error: routing[${i}].stripPrefix must be a string`);
349
+ }
350
+ if (!rule.stripPrefix.startsWith('/')) {
351
+ throw new Error(`Config error: routing[${i}].stripPrefix must start with '/'`);
352
+ }
353
+ }
354
+ // addPrefix — optional, must start with /
355
+ if (rule.addPrefix !== undefined) {
356
+ if (typeof rule.addPrefix !== 'string') {
357
+ throw new Error(`Config error: routing[${i}].addPrefix must be a string`);
358
+ }
359
+ if (!rule.addPrefix.startsWith('/')) {
360
+ throw new Error(`Config error: routing[${i}].addPrefix must start with '/'`);
361
+ }
362
+ }
363
+ }
364
+ }
365
+ /**
366
+ * Validate include/exclude patterns.
367
+ * THROWS on error (fail loudly per project convention).
368
+ *
369
+ * Validation rules:
370
+ * 1. Must be arrays if provided
371
+ * 2. Array elements must be non-empty strings
372
+ * 3. Warn (don't error) if include array is empty (would exclude everything)
373
+ *
374
+ * @param include - Parsed include patterns (may be undefined)
375
+ * @param exclude - Parsed exclude patterns (may be undefined)
376
+ * @param logger - Logger for warnings
377
+ */
378
+ export function validatePatterns(include, exclude, logger) {
379
+ // Validate include
380
+ if (include !== undefined && include !== null) {
381
+ if (!Array.isArray(include)) {
382
+ throw new Error(`Config error: include must be an array, got ${typeof include}`);
383
+ }
384
+ for (let i = 0; i < include.length; i++) {
385
+ if (typeof include[i] !== 'string') {
386
+ throw new Error(`Config error: include[${i}] must be a string, got ${typeof include[i]}`);
387
+ }
388
+ if (!include[i].trim()) {
389
+ throw new Error(`Config error: include[${i}] cannot be empty or whitespace-only`);
390
+ }
391
+ }
392
+ // Warn if empty array (would exclude everything)
393
+ if (include.length === 0) {
394
+ logger.warn('Warning: include is an empty array - no files will be processed');
395
+ }
396
+ }
397
+ // Validate exclude
398
+ if (exclude !== undefined && exclude !== null) {
399
+ if (!Array.isArray(exclude)) {
400
+ throw new Error(`Config error: exclude must be an array, got ${typeof exclude}`);
401
+ }
402
+ for (let i = 0; i < exclude.length; i++) {
403
+ if (typeof exclude[i] !== 'string') {
404
+ throw new Error(`Config error: exclude[${i}] must be a string, got ${typeof exclude[i]}`);
405
+ }
406
+ if (!exclude[i].trim()) {
407
+ throw new Error(`Config error: exclude[${i}] cannot be empty or whitespace-only`);
408
+ }
409
+ }
410
+ }
411
+ }
412
+ /**
413
+ * Merge user config with defaults.
414
+ * User config takes precedence, but missing sections use defaults.
415
+ */
416
+ function mergeConfig(defaults, user) {
417
+ return {
418
+ version: user.version ?? defaults.version,
419
+ plugins: {
420
+ discovery: user.plugins?.discovery ?? defaults.plugins.discovery,
421
+ indexing: user.plugins?.indexing ?? defaults.plugins.indexing,
422
+ analysis: user.plugins?.analysis ?? defaults.plugins.analysis,
423
+ enrichment: user.plugins?.enrichment ?? defaults.plugins.enrichment,
424
+ validation: user.plugins?.validation ?? defaults.plugins.validation,
425
+ },
426
+ services: user.services ?? defaults.services,
427
+ // Include/exclude patterns: pass through if specified, otherwise undefined
428
+ // (don't merge with defaults - undefined means "no filtering")
429
+ // Note: YAML null becomes undefined here (null ?? undefined = undefined)
430
+ include: user.include ?? undefined,
431
+ exclude: user.exclude ?? undefined,
432
+ strict: user.strict ?? defaults.strict,
433
+ // Routing rules: pass through if specified (REG-256)
434
+ routing: user.routing ?? undefined,
435
+ // Workspace config: pass through if specified (REG-76)
436
+ workspace: user.workspace ?? undefined,
437
+ // URI config: pass through if specified (REG-666)
438
+ uri: user.uri ?? undefined,
439
+ };
440
+ }
441
+ //# sourceMappingURL=ConfigLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigLoader.js","sourceRoot":"","sources":["../../src/config/ConfigLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAuIlE;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C,OAAO,EAAE,gBAAgB,CAAC,eAAe,CAAC;IAC1C,OAAO,EAAE;QACP,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,CAAC,iBAAiB,CAAC;QAC7B,QAAQ,EAAE;YACR,gBAAgB;YAChB,sBAAsB;YACtB,yBAAyB;YACzB,qBAAqB;YACrB,kBAAkB;YAClB,kBAAkB;YAClB,eAAe;YACf,sBAAsB;SACvB;QACD,UAAU,EAAE;YACV,oBAAoB;YACpB,sBAAsB;YACtB,8BAA8B;YAC9B,qBAAqB;YACrB,oBAAoB;YACpB,sBAAsB;YACtB,iBAAiB;YACjB,yBAAyB;YACzB,2BAA2B;YAC3B,eAAe;SAChB;QACD,UAAU,EAAE;YACV,4BAA4B;YAC5B,mBAAmB;YACnB,kBAAkB;YAClB,uBAAuB;YACvB,uBAAuB;YACvB,sBAAsB;YACtB,mBAAmB;YACnB,uBAAuB;YACvB,2BAA2B;YAC3B,0BAA0B;SAC3B;KACF;IACD,QAAQ,EAAE,EAAE,EAAE,yCAAyC;IACvD,MAAM,EAAE,KAAK,EAAE,kCAAkC;CAClD,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,UAAU,CACxB,WAAmB,EACnB,SAA0C,OAAO;IAEjD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAEjD,gCAAgC;IAChC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,IAAI,MAA8B,CAAC;QAEnC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,GAAG,SAAS,CAAC,OAAO,CAA2B,CAAC;YAEtD,wEAAwE;YACxE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,KAAK,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAU,EAAE,CAAC;oBAC/F,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBACpC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBACnE,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,0BAA0B,OAAO,KAAK,EAAE,CAAC,CAAC;oBAC5E,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC3C,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,6DAA6D;QAC7D,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEhC,wEAAwE;QACxE,uDAAuD;QACvD,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE/C,sDAAsD;QACtD,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEzD,iEAAiE;QACjE,iBAAiB,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAEjD,gEAAgE;QAChE,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAwB,CAAC,CAAC;QAEhF,mDAAmD;QACnD,OAAO,WAAW,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,uCAAuC;IACvC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;QAEjG,IAAI,MAA8B,CAAC;QAEnC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA2B,CAAC;QACzD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC3C,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,6DAA6D;QAC7D,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEhC,uDAAuD;QACvD,uDAAuD;QACvD,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE/C,sDAAsD;QACtD,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEzD,iEAAiE;QACjE,iBAAiB,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAEjD,gEAAgE;QAChE,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAwB,CAAC,CAAC;QAEhF,OAAO,WAAW,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,sCAAsC;IACtC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAC7B,aAAsB,EACtB,cAAuB;IAEvB,sDAAsD;IACtD,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,+CAA+C,OAAO,aAAa,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,IAAI,eAAe,CAAC;IAClD,MAAM,YAAY,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAEhD,IAAI,YAAY,KAAK,aAAa,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,iCAAiC,aAAa,2BAA2B;YACzE,WAAW,OAAO,eAAe,aAAa,MAAM;YACpD,yEAAyE,CAC1E,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAiB,EAAE,WAAmB;IACrE,+CAA+C;IAC/C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO;IACT,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,gDAAgD,OAAO,QAAQ,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,wBAAwB;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAExB,oBAAoB;QACpB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,qBAAqB,CAAC,CAAC;QACpE,CAAC;QAED,+CAA+C;QAC/C,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,gCAAgC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,2CAA2C,CAAC,CAAC;QAC1F,CAAC;QAED,+CAA+C;QAC/C,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,gCAAgC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,2CAA2C,CAAC,CAAC;QAC1F,CAAC;QAED,8EAA8E;QAC9E,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,iDAAiD,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QAC3G,CAAC;QAED,+BAA+B;QAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,WAAW,GAAG,CAAC,IAAI,kBAAkB,CAAC,CAAC;QACpF,CAAC;QAED,sCAAsC;QACtC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,WAAW,GAAG,CAAC,IAAI,uBAAuB,CAAC,CAAC;QACzF,CAAC;QAED,gFAAgF;QAChF,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,sCAAsC,OAAO,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YAC5G,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,iDAAiD,CAAC,CAAC;YAChG,CAAC;QACH,CAAC;QAED,qFAAqF;QACrF,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACrC,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,2CAA2C,OAAO,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;YACrH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAkB,EAAE,WAAmB;IACvE,mDAAmD;IACnD,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO;IACT,CAAC;IAED,oBAAoB;IACpB,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,kDAAkD,OAAO,SAAS,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,EAAE,GAAG,SAAgC,CAAC;IAE5C,mDAAmD;IACnD,IAAI,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO;IACT,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,uDAAuD,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,2CAA2C;IAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,qBAAqB;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEzB,mBAAmB;QACnB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,2BAA2B,OAAO,IAAI,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,sCAAsC,CAAC,CAAC;QAC5F,CAAC;QAED,wBAAwB;QACxB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,4CAA4C,IAAI,GAAG,CAAC,CAAC;QACzG,CAAC;QAED,kBAAkB;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,MAAM,IAAI,kBAAkB,CAAC,CAAC;QAClF,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,MAAM,IAAI,uBAAuB,CAAC,CAAC;QACvF,CAAC;QAED,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,gDAAgD,QAAQ,2CAA2C,CAAC,CAAC;QACvH,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB,EAAE,QAA6B;IAC7E,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO;IAEtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,+CAA+C,OAAO,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAExD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAExB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,qBAAqB,CAAC,CAAC;QACnE,CAAC;QAED,kBAAkB;QAClB,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,mCAAmC,CAAC,CAAC;QACjF,CAAC;QAED,gBAAgB;QAChB,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,iCAAiC,CAAC,CAAC;QAC/E,CAAC;QAED,iEAAiE;QACjE,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,yBAAyB,CAAC,WAAW,IAAI,CAAC,IAAI,qCAAqC;oBACnF,cAAc,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7C,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CACb,yBAAyB,CAAC,SAAS,IAAI,CAAC,EAAE,qCAAqC;oBAC/E,cAAc,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7C,CAAC;YACJ,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,gCAAgC,CAAC,CAAC;YAC9E,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,mCAAmC,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,8BAA8B,CAAC,CAAC;YAC5E,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,iCAAiC,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAgB,EAChB,OAAgB,EAChB,MAAuC;IAEvC,mBAAmB;IACnB,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,+CAA+C,OAAO,OAAO,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,2BAA2B,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5F,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,sCAAsC,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;QACD,iDAAiD;QACjD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,+CAA+C,OAAO,OAAO,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,2BAA2B,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5F,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,sCAAsC,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAClB,QAAuB,EACvB,IAA4B;IAE5B,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO;QACzC,OAAO,EAAE;YACP,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,SAAS;YAChE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ;YAC7D,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ;YAC7D,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU;YACnE,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU;SACpE;QACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;QAC5C,2EAA2E;QAC3E,+DAA+D;QAC/D,yEAAyE;QACzE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,SAAS;QAClC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,SAAS;QAClC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;QACtC,qDAAqD;QACrD,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,SAAS;QAClC,uDAAuD;QACvD,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;QACtC,kDAAkD;QAClD,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,SAAS;KAC3B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Configuration loading utilities
3
+ */
4
+ export { loadConfig, DEFAULT_CONFIG, validateVersion, validateServices, validatePatterns, validateWorkspace, validateRouting, } from './ConfigLoader.js';
5
+ export type { GrafemaConfig } from './ConfigLoader.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,UAAU,EACV,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Configuration loading utilities
3
+ */
4
+ export { loadConfig, DEFAULT_CONFIG, validateVersion, validateServices, validatePatterns, validateWorkspace, validateRouting, } from './ConfigLoader.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,UAAU,EACV,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,GAChB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * CoverageAnalyzer - Calculates analysis coverage for a project
3
+ *
4
+ * Determines which files in a project have been analyzed and categorizes
5
+ * files into three groups:
6
+ * - Analyzed: Files that appear as MODULE nodes in the graph
7
+ * - Unsupported: Files with extensions that no indexer can handle
8
+ * - Unreachable: Files with supported extensions but not in the graph
9
+ *
10
+ * Usage:
11
+ * const analyzer = new CoverageAnalyzer(graphBackend, '/path/to/project');
12
+ * const result = await analyzer.analyze();
13
+ */
14
+ import type { GraphBackend } from '@grafema/types';
15
+ /**
16
+ * Coverage analysis result
17
+ */
18
+ export interface CoverageResult {
19
+ projectPath: string;
20
+ total: number;
21
+ analyzed: {
22
+ count: number;
23
+ files: string[];
24
+ };
25
+ unsupported: {
26
+ count: number;
27
+ byExtension: Record<string, string[]>;
28
+ };
29
+ unreachable: {
30
+ count: number;
31
+ files: string[];
32
+ byExtension: Record<string, string[]>;
33
+ };
34
+ percentages: {
35
+ analyzed: number;
36
+ unsupported: number;
37
+ unreachable: number;
38
+ };
39
+ }
40
+ /**
41
+ * CoverageAnalyzer calculates what percentage of a codebase has been analyzed.
42
+ */
43
+ export declare class CoverageAnalyzer {
44
+ private graph;
45
+ private projectPath;
46
+ constructor(graph: GraphBackend, projectPath: string);
47
+ /**
48
+ * Analyze the project and return coverage statistics
49
+ */
50
+ analyze(): Promise<CoverageResult>;
51
+ /**
52
+ * Get list of analyzed files from the graph (MODULE nodes)
53
+ */
54
+ private getAnalyzedFiles;
55
+ /**
56
+ * Scan project directory for all code files
57
+ * Respects common ignore patterns (node_modules, .git, etc.)
58
+ */
59
+ private scanProjectFiles;
60
+ /**
61
+ * Recursively walk directory and collect code files
62
+ */
63
+ private walkDirectory;
64
+ }
65
+ //# sourceMappingURL=CoverageAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoverageAnalyzer.d.ts","sourceRoot":"","sources":["../../src/core/CoverageAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAwCnD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KACvC,CAAC;IACF,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KACvC,CAAC;IACF,WAAW,EAAE;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,WAAW,CAAS;gBAEhB,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM;IAKpD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAsExC;;OAEG;YACW,gBAAgB;IAiB9B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,aAAa;CA0CtB"}