driftdetect-core 0.4.1 → 0.4.3

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 (238) hide show
  1. package/LICENSE +21 -0
  2. package/dist/boundaries/boundary-scanner.d.ts +76 -0
  3. package/dist/boundaries/boundary-scanner.d.ts.map +1 -0
  4. package/dist/boundaries/boundary-scanner.js +801 -0
  5. package/dist/boundaries/boundary-scanner.js.map +1 -0
  6. package/dist/boundaries/data-access-learner.d.ts +126 -0
  7. package/dist/boundaries/data-access-learner.d.ts.map +1 -0
  8. package/dist/boundaries/data-access-learner.js +486 -0
  9. package/dist/boundaries/data-access-learner.js.map +1 -0
  10. package/dist/boundaries/index.d.ts +6 -0
  11. package/dist/boundaries/index.d.ts.map +1 -1
  12. package/dist/boundaries/index.js +6 -0
  13. package/dist/boundaries/index.js.map +1 -1
  14. package/dist/boundaries/security-prioritizer.d.ts +118 -0
  15. package/dist/boundaries/security-prioritizer.d.ts.map +1 -0
  16. package/dist/boundaries/security-prioritizer.js +316 -0
  17. package/dist/boundaries/security-prioritizer.js.map +1 -0
  18. package/dist/call-graph/analysis/coverage-analyzer.d.ts +201 -0
  19. package/dist/call-graph/analysis/coverage-analyzer.d.ts.map +1 -0
  20. package/dist/call-graph/analysis/coverage-analyzer.js +553 -0
  21. package/dist/call-graph/analysis/coverage-analyzer.js.map +1 -0
  22. package/dist/call-graph/analysis/dead-code-detector.d.ts +145 -0
  23. package/dist/call-graph/analysis/dead-code-detector.d.ts.map +1 -0
  24. package/dist/call-graph/analysis/dead-code-detector.js +391 -0
  25. package/dist/call-graph/analysis/dead-code-detector.js.map +1 -0
  26. package/dist/call-graph/analysis/graph-builder.d.ts +142 -0
  27. package/dist/call-graph/analysis/graph-builder.d.ts.map +1 -0
  28. package/dist/call-graph/analysis/graph-builder.js +624 -0
  29. package/dist/call-graph/analysis/graph-builder.js.map +1 -0
  30. package/dist/call-graph/analysis/impact-analyzer.d.ts +150 -0
  31. package/dist/call-graph/analysis/impact-analyzer.d.ts.map +1 -0
  32. package/dist/call-graph/analysis/impact-analyzer.js +329 -0
  33. package/dist/call-graph/analysis/impact-analyzer.js.map +1 -0
  34. package/dist/call-graph/analysis/index.d.ts +11 -0
  35. package/dist/call-graph/analysis/index.d.ts.map +1 -0
  36. package/dist/call-graph/analysis/index.js +9 -0
  37. package/dist/call-graph/analysis/index.js.map +1 -0
  38. package/dist/call-graph/analysis/path-finder.d.ts +117 -0
  39. package/dist/call-graph/analysis/path-finder.d.ts.map +1 -0
  40. package/dist/call-graph/analysis/path-finder.js +360 -0
  41. package/dist/call-graph/analysis/path-finder.js.map +1 -0
  42. package/dist/call-graph/analysis/reachability.d.ts +56 -0
  43. package/dist/call-graph/analysis/reachability.d.ts.map +1 -0
  44. package/dist/call-graph/analysis/reachability.js +357 -0
  45. package/dist/call-graph/analysis/reachability.js.map +1 -0
  46. package/dist/call-graph/demo.d.ts +11 -0
  47. package/dist/call-graph/demo.d.ts.map +1 -0
  48. package/dist/call-graph/demo.js +339 -0
  49. package/dist/call-graph/demo.js.map +1 -0
  50. package/dist/call-graph/enrichment/enrichment-engine.d.ts +126 -0
  51. package/dist/call-graph/enrichment/enrichment-engine.d.ts.map +1 -0
  52. package/dist/call-graph/enrichment/enrichment-engine.js +760 -0
  53. package/dist/call-graph/enrichment/enrichment-engine.js.map +1 -0
  54. package/dist/call-graph/enrichment/impact-scorer.d.ts +59 -0
  55. package/dist/call-graph/enrichment/impact-scorer.d.ts.map +1 -0
  56. package/dist/call-graph/enrichment/impact-scorer.js +328 -0
  57. package/dist/call-graph/enrichment/impact-scorer.js.map +1 -0
  58. package/dist/call-graph/enrichment/index.d.ts +12 -0
  59. package/dist/call-graph/enrichment/index.d.ts.map +1 -0
  60. package/dist/call-graph/enrichment/index.js +15 -0
  61. package/dist/call-graph/enrichment/index.js.map +1 -0
  62. package/dist/call-graph/enrichment/remediation-generator.d.ts +41 -0
  63. package/dist/call-graph/enrichment/remediation-generator.d.ts.map +1 -0
  64. package/dist/call-graph/enrichment/remediation-generator.js +609 -0
  65. package/dist/call-graph/enrichment/remediation-generator.js.map +1 -0
  66. package/dist/call-graph/enrichment/sensitivity-classifier.d.ts +71 -0
  67. package/dist/call-graph/enrichment/sensitivity-classifier.d.ts.map +1 -0
  68. package/dist/call-graph/enrichment/sensitivity-classifier.js +454 -0
  69. package/dist/call-graph/enrichment/sensitivity-classifier.js.map +1 -0
  70. package/dist/call-graph/enrichment/types.d.ts +402 -0
  71. package/dist/call-graph/enrichment/types.d.ts.map +1 -0
  72. package/dist/call-graph/enrichment/types.js +9 -0
  73. package/dist/call-graph/enrichment/types.js.map +1 -0
  74. package/dist/call-graph/extractors/base-extractor.d.ts +112 -0
  75. package/dist/call-graph/extractors/base-extractor.d.ts.map +1 -0
  76. package/dist/call-graph/extractors/base-extractor.js +140 -0
  77. package/dist/call-graph/extractors/base-extractor.js.map +1 -0
  78. package/dist/call-graph/extractors/csharp-data-access-extractor.d.ts +76 -0
  79. package/dist/call-graph/extractors/csharp-data-access-extractor.d.ts.map +1 -0
  80. package/dist/call-graph/extractors/csharp-data-access-extractor.js +387 -0
  81. package/dist/call-graph/extractors/csharp-data-access-extractor.js.map +1 -0
  82. package/dist/call-graph/extractors/csharp-extractor.d.ts +87 -0
  83. package/dist/call-graph/extractors/csharp-extractor.d.ts.map +1 -0
  84. package/dist/call-graph/extractors/csharp-extractor.js +470 -0
  85. package/dist/call-graph/extractors/csharp-extractor.js.map +1 -0
  86. package/dist/call-graph/extractors/data-access-extractor.d.ts +76 -0
  87. package/dist/call-graph/extractors/data-access-extractor.d.ts.map +1 -0
  88. package/dist/call-graph/extractors/data-access-extractor.js +234 -0
  89. package/dist/call-graph/extractors/data-access-extractor.js.map +1 -0
  90. package/dist/call-graph/extractors/index.d.ts +26 -0
  91. package/dist/call-graph/extractors/index.d.ts.map +1 -0
  92. package/dist/call-graph/extractors/index.js +36 -0
  93. package/dist/call-graph/extractors/index.js.map +1 -0
  94. package/dist/call-graph/extractors/java-data-access-extractor.d.ts +101 -0
  95. package/dist/call-graph/extractors/java-data-access-extractor.d.ts.map +1 -0
  96. package/dist/call-graph/extractors/java-data-access-extractor.js +611 -0
  97. package/dist/call-graph/extractors/java-data-access-extractor.js.map +1 -0
  98. package/dist/call-graph/extractors/java-extractor.d.ts +87 -0
  99. package/dist/call-graph/extractors/java-extractor.d.ts.map +1 -0
  100. package/dist/call-graph/extractors/java-extractor.js +510 -0
  101. package/dist/call-graph/extractors/java-extractor.js.map +1 -0
  102. package/dist/call-graph/extractors/php-data-access-extractor.d.ts +93 -0
  103. package/dist/call-graph/extractors/php-data-access-extractor.d.ts.map +1 -0
  104. package/dist/call-graph/extractors/php-data-access-extractor.js +589 -0
  105. package/dist/call-graph/extractors/php-data-access-extractor.js.map +1 -0
  106. package/dist/call-graph/extractors/php-extractor.d.ts +104 -0
  107. package/dist/call-graph/extractors/php-extractor.d.ts.map +1 -0
  108. package/dist/call-graph/extractors/php-extractor.js +619 -0
  109. package/dist/call-graph/extractors/php-extractor.js.map +1 -0
  110. package/dist/call-graph/extractors/python-data-access-extractor.d.ts +90 -0
  111. package/dist/call-graph/extractors/python-data-access-extractor.d.ts.map +1 -0
  112. package/dist/call-graph/extractors/python-data-access-extractor.js +537 -0
  113. package/dist/call-graph/extractors/python-data-access-extractor.js.map +1 -0
  114. package/dist/call-graph/extractors/python-extractor.d.ts +98 -0
  115. package/dist/call-graph/extractors/python-extractor.d.ts.map +1 -0
  116. package/dist/call-graph/extractors/python-extractor.js +681 -0
  117. package/dist/call-graph/extractors/python-extractor.js.map +1 -0
  118. package/dist/call-graph/extractors/semantic-data-access-scanner.d.ts +91 -0
  119. package/dist/call-graph/extractors/semantic-data-access-scanner.d.ts.map +1 -0
  120. package/dist/call-graph/extractors/semantic-data-access-scanner.js +498 -0
  121. package/dist/call-graph/extractors/semantic-data-access-scanner.js.map +1 -0
  122. package/dist/call-graph/extractors/typescript-data-access-extractor.d.ts +122 -0
  123. package/dist/call-graph/extractors/typescript-data-access-extractor.d.ts.map +1 -0
  124. package/dist/call-graph/extractors/typescript-data-access-extractor.js +788 -0
  125. package/dist/call-graph/extractors/typescript-data-access-extractor.js.map +1 -0
  126. package/dist/call-graph/extractors/typescript-extractor.d.ts +145 -0
  127. package/dist/call-graph/extractors/typescript-extractor.d.ts.map +1 -0
  128. package/dist/call-graph/extractors/typescript-extractor.js +904 -0
  129. package/dist/call-graph/extractors/typescript-extractor.js.map +1 -0
  130. package/dist/call-graph/index.d.ts +127 -0
  131. package/dist/call-graph/index.d.ts.map +1 -0
  132. package/dist/call-graph/index.js +247 -0
  133. package/dist/call-graph/index.js.map +1 -0
  134. package/dist/call-graph/store/call-graph-store.d.ts +70 -0
  135. package/dist/call-graph/store/call-graph-store.d.ts.map +1 -0
  136. package/dist/call-graph/store/call-graph-store.js +210 -0
  137. package/dist/call-graph/store/call-graph-store.js.map +1 -0
  138. package/dist/call-graph/store/index.d.ts +7 -0
  139. package/dist/call-graph/store/index.d.ts.map +1 -0
  140. package/dist/call-graph/store/index.js +7 -0
  141. package/dist/call-graph/store/index.js.map +1 -0
  142. package/dist/call-graph/types.d.ts +376 -0
  143. package/dist/call-graph/types.d.ts.map +1 -0
  144. package/dist/call-graph/types.js +8 -0
  145. package/dist/call-graph/types.js.map +1 -0
  146. package/dist/index.d.ts +8 -0
  147. package/dist/index.d.ts.map +1 -1
  148. package/dist/index.js +12 -0
  149. package/dist/index.js.map +1 -1
  150. package/dist/lake/callgraph-shard-store.d.ts +168 -0
  151. package/dist/lake/callgraph-shard-store.d.ts.map +1 -0
  152. package/dist/lake/callgraph-shard-store.js +466 -0
  153. package/dist/lake/callgraph-shard-store.js.map +1 -0
  154. package/dist/lake/examples-store.d.ts +127 -0
  155. package/dist/lake/examples-store.d.ts.map +1 -0
  156. package/dist/lake/examples-store.js +389 -0
  157. package/dist/lake/examples-store.js.map +1 -0
  158. package/dist/lake/index-store.d.ts +82 -0
  159. package/dist/lake/index-store.d.ts.map +1 -0
  160. package/dist/lake/index-store.js +359 -0
  161. package/dist/lake/index-store.js.map +1 -0
  162. package/dist/lake/index.d.ts +93 -0
  163. package/dist/lake/index.d.ts.map +1 -0
  164. package/dist/lake/index.js +138 -0
  165. package/dist/lake/index.js.map +1 -0
  166. package/dist/lake/lake.bak/index-store.d.ts +82 -0
  167. package/dist/lake/lake.bak/index-store.d.ts.map +1 -0
  168. package/dist/lake/lake.bak/index-store.js +357 -0
  169. package/dist/lake/lake.bak/index-store.js.map +1 -0
  170. package/dist/lake/lake.bak/index.d.ts +81 -0
  171. package/dist/lake/lake.bak/index.d.ts.map +1 -0
  172. package/dist/lake/lake.bak/index.js +114 -0
  173. package/dist/lake/lake.bak/index.js.map +1 -0
  174. package/dist/lake/lake.bak/manifest-store.d.ts +51 -0
  175. package/dist/lake/lake.bak/manifest-store.d.ts.map +1 -0
  176. package/dist/lake/lake.bak/manifest-store.js +347 -0
  177. package/dist/lake/lake.bak/manifest-store.js.map +1 -0
  178. package/dist/lake/lake.bak/query-engine.d.ts +112 -0
  179. package/dist/lake/lake.bak/query-engine.d.ts.map +1 -0
  180. package/dist/lake/lake.bak/query-engine.js +370 -0
  181. package/dist/lake/lake.bak/query-engine.js.map +1 -0
  182. package/dist/lake/lake.bak/types.d.ts +428 -0
  183. package/dist/lake/lake.bak/types.d.ts.map +1 -0
  184. package/dist/lake/lake.bak/types.js +46 -0
  185. package/dist/lake/lake.bak/types.js.map +1 -0
  186. package/dist/lake/lake.bak/view-materializer.d.ts +70 -0
  187. package/dist/lake/lake.bak/view-materializer.d.ts.map +1 -0
  188. package/dist/lake/lake.bak/view-materializer.js +314 -0
  189. package/dist/lake/lake.bak/view-materializer.js.map +1 -0
  190. package/dist/lake/lake.bak/view-store.d.ts +57 -0
  191. package/dist/lake/lake.bak/view-store.d.ts.map +1 -0
  192. package/dist/lake/lake.bak/view-store.js +348 -0
  193. package/dist/lake/lake.bak/view-store.js.map +1 -0
  194. package/dist/lake/manifest-store.d.ts +51 -0
  195. package/dist/lake/manifest-store.d.ts.map +1 -0
  196. package/dist/lake/manifest-store.js +348 -0
  197. package/dist/lake/manifest-store.js.map +1 -0
  198. package/dist/lake/pattern-shard-store.d.ts +87 -0
  199. package/dist/lake/pattern-shard-store.d.ts.map +1 -0
  200. package/dist/lake/pattern-shard-store.js +347 -0
  201. package/dist/lake/pattern-shard-store.js.map +1 -0
  202. package/dist/lake/query-engine.d.ts +124 -0
  203. package/dist/lake/query-engine.d.ts.map +1 -0
  204. package/dist/lake/query-engine.js +453 -0
  205. package/dist/lake/query-engine.js.map +1 -0
  206. package/dist/lake/security-shard-store.d.ts +156 -0
  207. package/dist/lake/security-shard-store.d.ts.map +1 -0
  208. package/dist/lake/security-shard-store.js +498 -0
  209. package/dist/lake/security-shard-store.js.map +1 -0
  210. package/dist/lake/types.d.ts +428 -0
  211. package/dist/lake/types.d.ts.map +1 -0
  212. package/dist/lake/types.js +46 -0
  213. package/dist/lake/types.js.map +1 -0
  214. package/dist/lake/view-materializer.d.ts +70 -0
  215. package/dist/lake/view-materializer.d.ts.map +1 -0
  216. package/dist/lake/view-materializer.js +314 -0
  217. package/dist/lake/view-materializer.js.map +1 -0
  218. package/dist/lake/view-store.d.ts +57 -0
  219. package/dist/lake/view-store.d.ts.map +1 -0
  220. package/dist/lake/view-store.js +348 -0
  221. package/dist/lake/view-store.js.map +1 -0
  222. package/dist/parsers/tree-sitter/index.d.ts +1 -0
  223. package/dist/parsers/tree-sitter/index.d.ts.map +1 -1
  224. package/dist/parsers/tree-sitter/index.js +4 -0
  225. package/dist/parsers/tree-sitter/index.js.map +1 -1
  226. package/dist/parsers/tree-sitter/typescript-loader.d.ts +58 -0
  227. package/dist/parsers/tree-sitter/typescript-loader.d.ts.map +1 -0
  228. package/dist/parsers/tree-sitter/typescript-loader.js +250 -0
  229. package/dist/parsers/tree-sitter/typescript-loader.js.map +1 -0
  230. package/dist/store/project-config.d.ts +154 -0
  231. package/dist/store/project-config.d.ts.map +1 -0
  232. package/dist/store/project-config.js +235 -0
  233. package/dist/store/project-config.js.map +1 -0
  234. package/dist/store/project-registry.d.ts +241 -0
  235. package/dist/store/project-registry.d.ts.map +1 -0
  236. package/dist/store/project-registry.js +557 -0
  237. package/dist/store/project-registry.js.map +1 -0
  238. package/package.json +16 -14
@@ -0,0 +1,359 @@
1
+ /**
2
+ * Index Store
3
+ *
4
+ * Manages pre-built indexes for fast lookups.
5
+ * Indexes map common query dimensions to IDs for O(1) access.
6
+ *
7
+ * Key indexes:
8
+ * - by-file: file path → pattern/function/access IDs
9
+ * - by-category: category → pattern IDs
10
+ * - by-table: table name → access point/function IDs
11
+ * - by-entry-point: entry point → reachable function IDs
12
+ */
13
+ import * as fs from 'node:fs/promises';
14
+ import * as path from 'node:path';
15
+ import { EventEmitter } from 'node:events';
16
+ import { LAKE_DIRS, INDEX_FILES, DEFAULT_DATA_LAKE_CONFIG, } from './types.js';
17
+ // ============================================================================
18
+ // Helper Functions
19
+ // ============================================================================
20
+ async function fileExists(filePath) {
21
+ try {
22
+ await fs.access(filePath);
23
+ return true;
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ }
29
+ async function ensureDir(dirPath) {
30
+ await fs.mkdir(dirPath, { recursive: true });
31
+ }
32
+ // ============================================================================
33
+ // Index Store Class
34
+ // ============================================================================
35
+ export class IndexStore extends EventEmitter {
36
+ config;
37
+ indexesDir;
38
+ // In-memory cache
39
+ fileIndexCache = null;
40
+ categoryIndexCache = null;
41
+ tableIndexCache = null;
42
+ entryPointIndexCache = null;
43
+ constructor(config = {}) {
44
+ super();
45
+ this.config = { ...DEFAULT_DATA_LAKE_CONFIG, ...config };
46
+ this.indexesDir = path.join(this.config.rootDir, LAKE_DIRS.root, LAKE_DIRS.indexes);
47
+ }
48
+ // ==========================================================================
49
+ // Initialization
50
+ // ==========================================================================
51
+ async initialize() {
52
+ await ensureDir(this.indexesDir);
53
+ }
54
+ // ==========================================================================
55
+ // File Index
56
+ // ==========================================================================
57
+ async getFileIndex() {
58
+ if (this.fileIndexCache) {
59
+ return this.fileIndexCache;
60
+ }
61
+ const filePath = path.join(this.indexesDir, INDEX_FILES.byFile);
62
+ if (!(await fileExists(filePath))) {
63
+ return null;
64
+ }
65
+ try {
66
+ const content = await fs.readFile(filePath, 'utf-8');
67
+ this.fileIndexCache = JSON.parse(content);
68
+ return this.fileIndexCache;
69
+ }
70
+ catch {
71
+ return null;
72
+ }
73
+ }
74
+ async saveFileIndex(index) {
75
+ await ensureDir(this.indexesDir);
76
+ const filePath = path.join(this.indexesDir, INDEX_FILES.byFile);
77
+ await fs.writeFile(filePath, JSON.stringify(index, null, 2));
78
+ this.fileIndexCache = index;
79
+ this.emit('index:saved', 'byFile', index);
80
+ }
81
+ /**
82
+ * Build file index from patterns
83
+ */
84
+ buildFileIndex(patterns) {
85
+ const patternsByFile = {};
86
+ for (const pattern of patterns) {
87
+ for (const location of pattern.locations) {
88
+ if (!patternsByFile[location.file]) {
89
+ patternsByFile[location.file] = [];
90
+ }
91
+ const filePatterns = patternsByFile[location.file];
92
+ if (filePatterns && !filePatterns.includes(pattern.id)) {
93
+ filePatterns.push(pattern.id);
94
+ }
95
+ }
96
+ for (const outlier of pattern.outliers) {
97
+ if (!patternsByFile[outlier.file]) {
98
+ patternsByFile[outlier.file] = [];
99
+ }
100
+ const filePatterns = patternsByFile[outlier.file];
101
+ if (filePatterns && !filePatterns.includes(pattern.id)) {
102
+ filePatterns.push(pattern.id);
103
+ }
104
+ }
105
+ }
106
+ return {
107
+ generatedAt: new Date().toISOString(),
108
+ patterns: patternsByFile,
109
+ accessPoints: {}, // Populated by boundary scanner
110
+ functions: {}, // Populated by call graph builder
111
+ };
112
+ }
113
+ /**
114
+ * Get pattern IDs for a specific file
115
+ */
116
+ async getPatternIdsForFile(file) {
117
+ const index = await this.getFileIndex();
118
+ return index?.patterns[file] ?? [];
119
+ }
120
+ /**
121
+ * Update file index for specific files (incremental)
122
+ */
123
+ async updateFileIndex(file, patternIds, accessPointIds, functionIds) {
124
+ let index = await this.getFileIndex();
125
+ if (!index) {
126
+ index = {
127
+ generatedAt: new Date().toISOString(),
128
+ patterns: {},
129
+ accessPoints: {},
130
+ functions: {},
131
+ };
132
+ }
133
+ index.patterns[file] = patternIds;
134
+ if (accessPointIds) {
135
+ index.accessPoints[file] = accessPointIds;
136
+ }
137
+ if (functionIds) {
138
+ index.functions[file] = functionIds;
139
+ }
140
+ index.generatedAt = new Date().toISOString();
141
+ await this.saveFileIndex(index);
142
+ }
143
+ // ==========================================================================
144
+ // Category Index
145
+ // ==========================================================================
146
+ async getCategoryIndex() {
147
+ if (this.categoryIndexCache) {
148
+ return this.categoryIndexCache;
149
+ }
150
+ const filePath = path.join(this.indexesDir, INDEX_FILES.byCategory);
151
+ if (!(await fileExists(filePath))) {
152
+ return null;
153
+ }
154
+ try {
155
+ const content = await fs.readFile(filePath, 'utf-8');
156
+ this.categoryIndexCache = JSON.parse(content);
157
+ return this.categoryIndexCache;
158
+ }
159
+ catch {
160
+ return null;
161
+ }
162
+ }
163
+ async saveCategoryIndex(index) {
164
+ await ensureDir(this.indexesDir);
165
+ const filePath = path.join(this.indexesDir, INDEX_FILES.byCategory);
166
+ await fs.writeFile(filePath, JSON.stringify(index, null, 2));
167
+ this.categoryIndexCache = index;
168
+ this.emit('index:saved', 'byCategory', index);
169
+ }
170
+ /**
171
+ * Build category index from patterns
172
+ */
173
+ buildCategoryIndex(patterns) {
174
+ const patternsByCategory = {};
175
+ const counts = {};
176
+ for (const pattern of patterns) {
177
+ if (!patternsByCategory[pattern.category]) {
178
+ patternsByCategory[pattern.category] = [];
179
+ counts[pattern.category] = 0;
180
+ }
181
+ patternsByCategory[pattern.category].push(pattern.id);
182
+ counts[pattern.category]++;
183
+ }
184
+ return {
185
+ generatedAt: new Date().toISOString(),
186
+ patterns: patternsByCategory,
187
+ counts,
188
+ };
189
+ }
190
+ /**
191
+ * Get pattern IDs for a specific category
192
+ */
193
+ async getPatternIdsForCategory(category) {
194
+ const index = await this.getCategoryIndex();
195
+ return index?.patterns[category] ?? [];
196
+ }
197
+ // ==========================================================================
198
+ // Table Index
199
+ // ==========================================================================
200
+ async getTableIndex() {
201
+ if (this.tableIndexCache) {
202
+ return this.tableIndexCache;
203
+ }
204
+ const filePath = path.join(this.indexesDir, INDEX_FILES.byTable);
205
+ if (!(await fileExists(filePath))) {
206
+ return null;
207
+ }
208
+ try {
209
+ const content = await fs.readFile(filePath, 'utf-8');
210
+ this.tableIndexCache = JSON.parse(content);
211
+ return this.tableIndexCache;
212
+ }
213
+ catch {
214
+ return null;
215
+ }
216
+ }
217
+ async saveTableIndex(index) {
218
+ await ensureDir(this.indexesDir);
219
+ const filePath = path.join(this.indexesDir, INDEX_FILES.byTable);
220
+ await fs.writeFile(filePath, JSON.stringify(index, null, 2));
221
+ this.tableIndexCache = index;
222
+ this.emit('index:saved', 'byTable', index);
223
+ }
224
+ /**
225
+ * Get access point IDs for a specific table
226
+ */
227
+ async getAccessPointIdsForTable(table) {
228
+ const index = await this.getTableIndex();
229
+ return index?.accessPoints[table] ?? [];
230
+ }
231
+ /**
232
+ * Get function IDs that access a specific table
233
+ */
234
+ async getAccessorIdsForTable(table) {
235
+ const index = await this.getTableIndex();
236
+ return index?.accessors[table] ?? [];
237
+ }
238
+ // ==========================================================================
239
+ // Entry Point Index
240
+ // ==========================================================================
241
+ async getEntryPointIndex() {
242
+ if (this.entryPointIndexCache) {
243
+ return this.entryPointIndexCache;
244
+ }
245
+ const filePath = path.join(this.indexesDir, INDEX_FILES.byEntryPoint);
246
+ if (!(await fileExists(filePath))) {
247
+ return null;
248
+ }
249
+ try {
250
+ const content = await fs.readFile(filePath, 'utf-8');
251
+ this.entryPointIndexCache = JSON.parse(content);
252
+ return this.entryPointIndexCache;
253
+ }
254
+ catch {
255
+ return null;
256
+ }
257
+ }
258
+ async saveEntryPointIndex(index) {
259
+ await ensureDir(this.indexesDir);
260
+ const filePath = path.join(this.indexesDir, INDEX_FILES.byEntryPoint);
261
+ await fs.writeFile(filePath, JSON.stringify(index, null, 2));
262
+ this.entryPointIndexCache = index;
263
+ this.emit('index:saved', 'byEntryPoint', index);
264
+ }
265
+ /**
266
+ * Get reachable function IDs from an entry point
267
+ */
268
+ async getReachableFunctions(entryPointId) {
269
+ const index = await this.getEntryPointIndex();
270
+ return index?.reachable[entryPointId] ?? [];
271
+ }
272
+ /**
273
+ * Get tables reachable from an entry point
274
+ */
275
+ async getReachableTables(entryPointId) {
276
+ const index = await this.getEntryPointIndex();
277
+ return index?.tables[entryPointId] ?? [];
278
+ }
279
+ /**
280
+ * Get sensitive data reachable from an entry point
281
+ */
282
+ async getReachableSensitiveData(entryPointId) {
283
+ const index = await this.getEntryPointIndex();
284
+ return index?.sensitiveData[entryPointId] ?? [];
285
+ }
286
+ // ==========================================================================
287
+ // Cache Management
288
+ // ==========================================================================
289
+ invalidateCache(index) {
290
+ if (!index) {
291
+ this.fileIndexCache = null;
292
+ this.categoryIndexCache = null;
293
+ this.tableIndexCache = null;
294
+ this.entryPointIndexCache = null;
295
+ return;
296
+ }
297
+ switch (index) {
298
+ case 'byFile':
299
+ this.fileIndexCache = null;
300
+ break;
301
+ case 'byCategory':
302
+ this.categoryIndexCache = null;
303
+ break;
304
+ case 'byTable':
305
+ this.tableIndexCache = null;
306
+ break;
307
+ case 'byEntryPoint':
308
+ this.entryPointIndexCache = null;
309
+ break;
310
+ }
311
+ }
312
+ // ==========================================================================
313
+ // Bulk Operations
314
+ // ==========================================================================
315
+ async hasIndex(index) {
316
+ const files = {
317
+ byFile: INDEX_FILES.byFile,
318
+ byCategory: INDEX_FILES.byCategory,
319
+ byTable: INDEX_FILES.byTable,
320
+ byEntryPoint: INDEX_FILES.byEntryPoint,
321
+ };
322
+ const filePath = path.join(this.indexesDir, files[index]);
323
+ return fileExists(filePath);
324
+ }
325
+ async deleteIndex(index) {
326
+ const files = {
327
+ byFile: INDEX_FILES.byFile,
328
+ byCategory: INDEX_FILES.byCategory,
329
+ byTable: INDEX_FILES.byTable,
330
+ byEntryPoint: INDEX_FILES.byEntryPoint,
331
+ };
332
+ const filePath = path.join(this.indexesDir, files[index]);
333
+ try {
334
+ await fs.unlink(filePath);
335
+ }
336
+ catch {
337
+ // Ignore if doesn't exist
338
+ }
339
+ this.invalidateCache(index);
340
+ }
341
+ /**
342
+ * Rebuild all indexes from patterns
343
+ */
344
+ async rebuildAllIndexes(patterns) {
345
+ const fileIndex = this.buildFileIndex(patterns);
346
+ const categoryIndex = this.buildCategoryIndex(patterns);
347
+ await Promise.all([
348
+ this.saveFileIndex(fileIndex),
349
+ this.saveCategoryIndex(categoryIndex),
350
+ ]);
351
+ }
352
+ }
353
+ // ============================================================================
354
+ // Factory Function
355
+ // ============================================================================
356
+ export function createIndexStore(config = {}) {
357
+ return new IndexStore(config);
358
+ }
359
+ //# sourceMappingURL=index-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-store.js","sourceRoot":"","sources":["../../src/lake/index-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Data Lake Module
3
+ *
4
+ * Enterprise-grade data storage with materialized views, indexes, and query optimization.
5
+ *
6
+ * Architecture:
7
+ * - ManifestStore: Quick-load index of everything (instant drift_status)
8
+ * - ViewStore: Pre-computed views for common queries
9
+ * - IndexStore: Fast lookups by file, category, table, entry point
10
+ * - QueryEngine: Unified query API with automatic view/index selection
11
+ * - ViewMaterializer: Rebuilds views after scans
12
+ *
13
+ * Usage:
14
+ * ```typescript
15
+ * import { createDataLake } from './lake';
16
+ *
17
+ * const lake = createDataLake({ rootDir: '/path/to/project' });
18
+ * await lake.initialize();
19
+ *
20
+ * // Instant status (reads pre-computed view)
21
+ * const status = await lake.query.getStatus();
22
+ *
23
+ * // Fast pattern listing (uses index + view)
24
+ * const patterns = await lake.query.getPatterns({ categories: ['api'] });
25
+ *
26
+ * // After scan, materialize views
27
+ * await lake.materializer.materialize(patterns, {}, { lastScan: scanInfo });
28
+ * ```
29
+ */
30
+ export type { DriftManifest, ManifestStats, PatternStats as LakePatternStats, SecurityStats as LakeSecurityStats, CallGraphStats as LakeCallGraphStats, ContractStats as LakeContractStats, DNAStats as LakeDNAStats, LastScanInfo, ViewFreshness, ViewMeta, StatusView, PatternIndexView, PatternSummary as LakePatternSummary, SecuritySummaryView, TrendsView, HealthFactor, TopIssue, SensitiveTableSummary, ViolationSummary, TrendItem, CategoryTrend, FileIndex, CategoryIndex, TableIndex, EntryPointIndex, Shard, PatternShard, PatternShardEntry, PatternLocation as LakePatternLocation, PatternMetadata as LakePatternMetadata, AccessMapShard, SensitiveFieldInfo, AccessPointEntry, CallGraphShard, FunctionEntry, DataAccessRef, PatternExamples, CodeExample, IncrementalUpdate, ViewType, IndexType, DataLakeConfig, } from './types.js';
31
+ export { LAKE_VERSION, LAKE_DIRS, VIEW_FILES, INDEX_FILES, DEFAULT_DATA_LAKE_CONFIG, } from './types.js';
32
+ export { ManifestStore as LakeManifestStore, createManifestStore } from './manifest-store.js';
33
+ export { ViewStore, createViewStore } from './view-store.js';
34
+ export { IndexStore, createIndexStore } from './index-store.js';
35
+ export { PatternShardStore, createPatternShardStore } from './pattern-shard-store.js';
36
+ export { SecurityShardStore, createSecurityShardStore, type SecurityIndex, type TableIndexEntry, type SensitiveTableEntry, type ViolationEntry, type SensitiveFieldRegistry, type SensitiveFieldRecord, } from './security-shard-store.js';
37
+ export { ExamplesStore, createExamplesStore, type ExamplesIndex, type ExampleIndexEntry, type ExampleExtractionOptions, } from './examples-store.js';
38
+ export { CallGraphShardStore, createCallGraphShardStore, type CallGraphIndex, type FileIndexEntry as CallGraphFileIndexEntry, type EntryPointSummary, type DataAccessorSummary, type EntryPointsData, type EntryPointDetail, } from './callgraph-shard-store.js';
39
+ export { QueryEngine, createQueryEngine, type PaginationOptions, type PaginatedResult, type PatternQueryOptions, type QueryStats, } from './query-engine.js';
40
+ export { ViewMaterializer, createViewMaterializer, type MaterializeOptions, type MaterializeResult, } from './view-materializer.js';
41
+ import type { DataLakeConfig } from './types.js';
42
+ import { ManifestStore } from './manifest-store.js';
43
+ import { ViewStore } from './view-store.js';
44
+ import { IndexStore } from './index-store.js';
45
+ import { PatternShardStore } from './pattern-shard-store.js';
46
+ import { SecurityShardStore } from './security-shard-store.js';
47
+ import { ExamplesStore } from './examples-store.js';
48
+ import { CallGraphShardStore } from './callgraph-shard-store.js';
49
+ import { QueryEngine } from './query-engine.js';
50
+ import { ViewMaterializer } from './view-materializer.js';
51
+ import type { Pattern } from '../store/types.js';
52
+ /**
53
+ * Data Lake - Unified interface for all data lake operations
54
+ */
55
+ export declare class DataLake {
56
+ readonly config: DataLakeConfig;
57
+ readonly manifest: ManifestStore;
58
+ readonly views: ViewStore;
59
+ readonly indexes: IndexStore;
60
+ readonly patternShards: PatternShardStore;
61
+ readonly securityShards: SecurityShardStore;
62
+ readonly examples: ExamplesStore;
63
+ readonly callGraphShards: CallGraphShardStore;
64
+ readonly query: QueryEngine;
65
+ readonly materializer: ViewMaterializer;
66
+ private initialized;
67
+ constructor(config?: Partial<DataLakeConfig>);
68
+ /**
69
+ * Initialize the data lake
70
+ */
71
+ initialize(): Promise<void>;
72
+ /**
73
+ * Set the raw pattern loader for fallback queries
74
+ */
75
+ setPatternLoader(loader: () => Promise<Pattern[]>): void;
76
+ /**
77
+ * Check if the data lake has been initialized with data
78
+ */
79
+ hasData(): boolean;
80
+ /**
81
+ * Get quick stats (instant, from manifest)
82
+ */
83
+ getQuickStats(): import("./types.js").ManifestStats;
84
+ /**
85
+ * Invalidate all caches and views
86
+ */
87
+ invalidateAll(): void;
88
+ }
89
+ /**
90
+ * Create a new DataLake instance
91
+ */
92
+ export declare function createDataLake(config?: Partial<DataLakeConfig>): DataLake;
93
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lake/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Data Lake Module
3
+ *
4
+ * Enterprise-grade data storage with materialized views, indexes, and query optimization.
5
+ *
6
+ * Architecture:
7
+ * - ManifestStore: Quick-load index of everything (instant drift_status)
8
+ * - ViewStore: Pre-computed views for common queries
9
+ * - IndexStore: Fast lookups by file, category, table, entry point
10
+ * - QueryEngine: Unified query API with automatic view/index selection
11
+ * - ViewMaterializer: Rebuilds views after scans
12
+ *
13
+ * Usage:
14
+ * ```typescript
15
+ * import { createDataLake } from './lake';
16
+ *
17
+ * const lake = createDataLake({ rootDir: '/path/to/project' });
18
+ * await lake.initialize();
19
+ *
20
+ * // Instant status (reads pre-computed view)
21
+ * const status = await lake.query.getStatus();
22
+ *
23
+ * // Fast pattern listing (uses index + view)
24
+ * const patterns = await lake.query.getPatterns({ categories: ['api'] });
25
+ *
26
+ * // After scan, materialize views
27
+ * await lake.materializer.materialize(patterns, {}, { lastScan: scanInfo });
28
+ * ```
29
+ */
30
+ export { LAKE_VERSION, LAKE_DIRS, VIEW_FILES, INDEX_FILES, DEFAULT_DATA_LAKE_CONFIG, } from './types.js';
31
+ // Stores - Use Lake prefix to avoid conflicts
32
+ export { ManifestStore as LakeManifestStore, createManifestStore } from './manifest-store.js';
33
+ export { ViewStore, createViewStore } from './view-store.js';
34
+ export { IndexStore, createIndexStore } from './index-store.js';
35
+ export { PatternShardStore, createPatternShardStore } from './pattern-shard-store.js';
36
+ export { SecurityShardStore, createSecurityShardStore, } from './security-shard-store.js';
37
+ export { ExamplesStore, createExamplesStore, } from './examples-store.js';
38
+ export { CallGraphShardStore, createCallGraphShardStore, } from './callgraph-shard-store.js';
39
+ // Query Engine
40
+ export { QueryEngine, createQueryEngine, } from './query-engine.js';
41
+ // View Materializer
42
+ export { ViewMaterializer, createViewMaterializer, } from './view-materializer.js';
43
+ import { DEFAULT_DATA_LAKE_CONFIG } from './types.js';
44
+ import { ManifestStore } from './manifest-store.js';
45
+ import { ViewStore } from './view-store.js';
46
+ import { IndexStore } from './index-store.js';
47
+ import { PatternShardStore } from './pattern-shard-store.js';
48
+ import { SecurityShardStore } from './security-shard-store.js';
49
+ import { ExamplesStore } from './examples-store.js';
50
+ import { CallGraphShardStore } from './callgraph-shard-store.js';
51
+ import { QueryEngine } from './query-engine.js';
52
+ import { ViewMaterializer } from './view-materializer.js';
53
+ /**
54
+ * Data Lake - Unified interface for all data lake operations
55
+ */
56
+ export class DataLake {
57
+ config;
58
+ manifest;
59
+ views;
60
+ indexes;
61
+ patternShards;
62
+ securityShards;
63
+ examples;
64
+ callGraphShards;
65
+ query;
66
+ materializer;
67
+ initialized = false;
68
+ constructor(config = {}) {
69
+ this.config = { ...DEFAULT_DATA_LAKE_CONFIG, ...config };
70
+ // Create stores
71
+ this.manifest = new ManifestStore(this.config);
72
+ this.views = new ViewStore(this.config);
73
+ this.indexes = new IndexStore(this.config);
74
+ this.patternShards = new PatternShardStore(this.config);
75
+ this.securityShards = new SecurityShardStore(this.config);
76
+ this.examples = new ExamplesStore(this.config);
77
+ this.callGraphShards = new CallGraphShardStore(this.config);
78
+ // Create query engine with stores
79
+ this.query = new QueryEngine(this.config, this.manifest, this.views, this.indexes, this.patternShards);
80
+ // Create materializer with stores
81
+ this.materializer = new ViewMaterializer(this.config, this.manifest, this.views, this.indexes);
82
+ }
83
+ /**
84
+ * Initialize the data lake
85
+ */
86
+ async initialize() {
87
+ if (this.initialized)
88
+ return;
89
+ await Promise.all([
90
+ this.manifest.initialize(),
91
+ this.views.initialize(),
92
+ this.indexes.initialize(),
93
+ this.patternShards.initialize(),
94
+ this.securityShards.initialize(),
95
+ this.examples.initialize(),
96
+ this.callGraphShards.initialize(),
97
+ ]);
98
+ this.initialized = true;
99
+ }
100
+ /**
101
+ * Set the raw pattern loader for fallback queries
102
+ */
103
+ setPatternLoader(loader) {
104
+ this.query.setRawPatternLoader(loader);
105
+ }
106
+ /**
107
+ * Check if the data lake has been initialized with data
108
+ */
109
+ hasData() {
110
+ const stats = this.manifest.getStats();
111
+ return stats.patterns.total > 0;
112
+ }
113
+ /**
114
+ * Get quick stats (instant, from manifest)
115
+ */
116
+ getQuickStats() {
117
+ return this.manifest.getStats();
118
+ }
119
+ /**
120
+ * Invalidate all caches and views
121
+ */
122
+ invalidateAll() {
123
+ this.manifest.markAllViewsStale('full invalidation');
124
+ this.views.invalidateCache();
125
+ this.indexes.invalidateCache();
126
+ this.patternShards.invalidateCache();
127
+ this.securityShards.invalidateCache();
128
+ this.examples.invalidateCache();
129
+ this.callGraphShards.invalidateCache();
130
+ }
131
+ }
132
+ /**
133
+ * Create a new DataLake instance
134
+ */
135
+ export function createDataLake(config = {}) {
136
+ return new DataLake(config);
137
+ }
138
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lake/index.ts"],"names":[],"mappings":"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"}