driftdetect-core 0.4.1 → 0.4.2

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 (237) hide show
  1. package/dist/boundaries/boundary-scanner.d.ts +76 -0
  2. package/dist/boundaries/boundary-scanner.d.ts.map +1 -0
  3. package/dist/boundaries/boundary-scanner.js +801 -0
  4. package/dist/boundaries/boundary-scanner.js.map +1 -0
  5. package/dist/boundaries/data-access-learner.d.ts +126 -0
  6. package/dist/boundaries/data-access-learner.d.ts.map +1 -0
  7. package/dist/boundaries/data-access-learner.js +486 -0
  8. package/dist/boundaries/data-access-learner.js.map +1 -0
  9. package/dist/boundaries/index.d.ts +6 -0
  10. package/dist/boundaries/index.d.ts.map +1 -1
  11. package/dist/boundaries/index.js +6 -0
  12. package/dist/boundaries/index.js.map +1 -1
  13. package/dist/boundaries/security-prioritizer.d.ts +118 -0
  14. package/dist/boundaries/security-prioritizer.d.ts.map +1 -0
  15. package/dist/boundaries/security-prioritizer.js +316 -0
  16. package/dist/boundaries/security-prioritizer.js.map +1 -0
  17. package/dist/call-graph/analysis/coverage-analyzer.d.ts +201 -0
  18. package/dist/call-graph/analysis/coverage-analyzer.d.ts.map +1 -0
  19. package/dist/call-graph/analysis/coverage-analyzer.js +553 -0
  20. package/dist/call-graph/analysis/coverage-analyzer.js.map +1 -0
  21. package/dist/call-graph/analysis/dead-code-detector.d.ts +145 -0
  22. package/dist/call-graph/analysis/dead-code-detector.d.ts.map +1 -0
  23. package/dist/call-graph/analysis/dead-code-detector.js +391 -0
  24. package/dist/call-graph/analysis/dead-code-detector.js.map +1 -0
  25. package/dist/call-graph/analysis/graph-builder.d.ts +142 -0
  26. package/dist/call-graph/analysis/graph-builder.d.ts.map +1 -0
  27. package/dist/call-graph/analysis/graph-builder.js +624 -0
  28. package/dist/call-graph/analysis/graph-builder.js.map +1 -0
  29. package/dist/call-graph/analysis/impact-analyzer.d.ts +150 -0
  30. package/dist/call-graph/analysis/impact-analyzer.d.ts.map +1 -0
  31. package/dist/call-graph/analysis/impact-analyzer.js +329 -0
  32. package/dist/call-graph/analysis/impact-analyzer.js.map +1 -0
  33. package/dist/call-graph/analysis/index.d.ts +11 -0
  34. package/dist/call-graph/analysis/index.d.ts.map +1 -0
  35. package/dist/call-graph/analysis/index.js +9 -0
  36. package/dist/call-graph/analysis/index.js.map +1 -0
  37. package/dist/call-graph/analysis/path-finder.d.ts +117 -0
  38. package/dist/call-graph/analysis/path-finder.d.ts.map +1 -0
  39. package/dist/call-graph/analysis/path-finder.js +360 -0
  40. package/dist/call-graph/analysis/path-finder.js.map +1 -0
  41. package/dist/call-graph/analysis/reachability.d.ts +56 -0
  42. package/dist/call-graph/analysis/reachability.d.ts.map +1 -0
  43. package/dist/call-graph/analysis/reachability.js +357 -0
  44. package/dist/call-graph/analysis/reachability.js.map +1 -0
  45. package/dist/call-graph/demo.d.ts +11 -0
  46. package/dist/call-graph/demo.d.ts.map +1 -0
  47. package/dist/call-graph/demo.js +339 -0
  48. package/dist/call-graph/demo.js.map +1 -0
  49. package/dist/call-graph/enrichment/enrichment-engine.d.ts +126 -0
  50. package/dist/call-graph/enrichment/enrichment-engine.d.ts.map +1 -0
  51. package/dist/call-graph/enrichment/enrichment-engine.js +760 -0
  52. package/dist/call-graph/enrichment/enrichment-engine.js.map +1 -0
  53. package/dist/call-graph/enrichment/impact-scorer.d.ts +59 -0
  54. package/dist/call-graph/enrichment/impact-scorer.d.ts.map +1 -0
  55. package/dist/call-graph/enrichment/impact-scorer.js +328 -0
  56. package/dist/call-graph/enrichment/impact-scorer.js.map +1 -0
  57. package/dist/call-graph/enrichment/index.d.ts +12 -0
  58. package/dist/call-graph/enrichment/index.d.ts.map +1 -0
  59. package/dist/call-graph/enrichment/index.js +15 -0
  60. package/dist/call-graph/enrichment/index.js.map +1 -0
  61. package/dist/call-graph/enrichment/remediation-generator.d.ts +41 -0
  62. package/dist/call-graph/enrichment/remediation-generator.d.ts.map +1 -0
  63. package/dist/call-graph/enrichment/remediation-generator.js +609 -0
  64. package/dist/call-graph/enrichment/remediation-generator.js.map +1 -0
  65. package/dist/call-graph/enrichment/sensitivity-classifier.d.ts +71 -0
  66. package/dist/call-graph/enrichment/sensitivity-classifier.d.ts.map +1 -0
  67. package/dist/call-graph/enrichment/sensitivity-classifier.js +454 -0
  68. package/dist/call-graph/enrichment/sensitivity-classifier.js.map +1 -0
  69. package/dist/call-graph/enrichment/types.d.ts +402 -0
  70. package/dist/call-graph/enrichment/types.d.ts.map +1 -0
  71. package/dist/call-graph/enrichment/types.js +9 -0
  72. package/dist/call-graph/enrichment/types.js.map +1 -0
  73. package/dist/call-graph/extractors/base-extractor.d.ts +112 -0
  74. package/dist/call-graph/extractors/base-extractor.d.ts.map +1 -0
  75. package/dist/call-graph/extractors/base-extractor.js +140 -0
  76. package/dist/call-graph/extractors/base-extractor.js.map +1 -0
  77. package/dist/call-graph/extractors/csharp-data-access-extractor.d.ts +76 -0
  78. package/dist/call-graph/extractors/csharp-data-access-extractor.d.ts.map +1 -0
  79. package/dist/call-graph/extractors/csharp-data-access-extractor.js +387 -0
  80. package/dist/call-graph/extractors/csharp-data-access-extractor.js.map +1 -0
  81. package/dist/call-graph/extractors/csharp-extractor.d.ts +87 -0
  82. package/dist/call-graph/extractors/csharp-extractor.d.ts.map +1 -0
  83. package/dist/call-graph/extractors/csharp-extractor.js +470 -0
  84. package/dist/call-graph/extractors/csharp-extractor.js.map +1 -0
  85. package/dist/call-graph/extractors/data-access-extractor.d.ts +76 -0
  86. package/dist/call-graph/extractors/data-access-extractor.d.ts.map +1 -0
  87. package/dist/call-graph/extractors/data-access-extractor.js +234 -0
  88. package/dist/call-graph/extractors/data-access-extractor.js.map +1 -0
  89. package/dist/call-graph/extractors/index.d.ts +26 -0
  90. package/dist/call-graph/extractors/index.d.ts.map +1 -0
  91. package/dist/call-graph/extractors/index.js +36 -0
  92. package/dist/call-graph/extractors/index.js.map +1 -0
  93. package/dist/call-graph/extractors/java-data-access-extractor.d.ts +101 -0
  94. package/dist/call-graph/extractors/java-data-access-extractor.d.ts.map +1 -0
  95. package/dist/call-graph/extractors/java-data-access-extractor.js +611 -0
  96. package/dist/call-graph/extractors/java-data-access-extractor.js.map +1 -0
  97. package/dist/call-graph/extractors/java-extractor.d.ts +87 -0
  98. package/dist/call-graph/extractors/java-extractor.d.ts.map +1 -0
  99. package/dist/call-graph/extractors/java-extractor.js +510 -0
  100. package/dist/call-graph/extractors/java-extractor.js.map +1 -0
  101. package/dist/call-graph/extractors/php-data-access-extractor.d.ts +93 -0
  102. package/dist/call-graph/extractors/php-data-access-extractor.d.ts.map +1 -0
  103. package/dist/call-graph/extractors/php-data-access-extractor.js +589 -0
  104. package/dist/call-graph/extractors/php-data-access-extractor.js.map +1 -0
  105. package/dist/call-graph/extractors/php-extractor.d.ts +104 -0
  106. package/dist/call-graph/extractors/php-extractor.d.ts.map +1 -0
  107. package/dist/call-graph/extractors/php-extractor.js +619 -0
  108. package/dist/call-graph/extractors/php-extractor.js.map +1 -0
  109. package/dist/call-graph/extractors/python-data-access-extractor.d.ts +90 -0
  110. package/dist/call-graph/extractors/python-data-access-extractor.d.ts.map +1 -0
  111. package/dist/call-graph/extractors/python-data-access-extractor.js +537 -0
  112. package/dist/call-graph/extractors/python-data-access-extractor.js.map +1 -0
  113. package/dist/call-graph/extractors/python-extractor.d.ts +98 -0
  114. package/dist/call-graph/extractors/python-extractor.d.ts.map +1 -0
  115. package/dist/call-graph/extractors/python-extractor.js +681 -0
  116. package/dist/call-graph/extractors/python-extractor.js.map +1 -0
  117. package/dist/call-graph/extractors/semantic-data-access-scanner.d.ts +91 -0
  118. package/dist/call-graph/extractors/semantic-data-access-scanner.d.ts.map +1 -0
  119. package/dist/call-graph/extractors/semantic-data-access-scanner.js +498 -0
  120. package/dist/call-graph/extractors/semantic-data-access-scanner.js.map +1 -0
  121. package/dist/call-graph/extractors/typescript-data-access-extractor.d.ts +122 -0
  122. package/dist/call-graph/extractors/typescript-data-access-extractor.d.ts.map +1 -0
  123. package/dist/call-graph/extractors/typescript-data-access-extractor.js +788 -0
  124. package/dist/call-graph/extractors/typescript-data-access-extractor.js.map +1 -0
  125. package/dist/call-graph/extractors/typescript-extractor.d.ts +145 -0
  126. package/dist/call-graph/extractors/typescript-extractor.d.ts.map +1 -0
  127. package/dist/call-graph/extractors/typescript-extractor.js +904 -0
  128. package/dist/call-graph/extractors/typescript-extractor.js.map +1 -0
  129. package/dist/call-graph/index.d.ts +127 -0
  130. package/dist/call-graph/index.d.ts.map +1 -0
  131. package/dist/call-graph/index.js +247 -0
  132. package/dist/call-graph/index.js.map +1 -0
  133. package/dist/call-graph/store/call-graph-store.d.ts +70 -0
  134. package/dist/call-graph/store/call-graph-store.d.ts.map +1 -0
  135. package/dist/call-graph/store/call-graph-store.js +210 -0
  136. package/dist/call-graph/store/call-graph-store.js.map +1 -0
  137. package/dist/call-graph/store/index.d.ts +7 -0
  138. package/dist/call-graph/store/index.d.ts.map +1 -0
  139. package/dist/call-graph/store/index.js +7 -0
  140. package/dist/call-graph/store/index.js.map +1 -0
  141. package/dist/call-graph/types.d.ts +376 -0
  142. package/dist/call-graph/types.d.ts.map +1 -0
  143. package/dist/call-graph/types.js +8 -0
  144. package/dist/call-graph/types.js.map +1 -0
  145. package/dist/index.d.ts +8 -0
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js +12 -0
  148. package/dist/index.js.map +1 -1
  149. package/dist/lake/callgraph-shard-store.d.ts +168 -0
  150. package/dist/lake/callgraph-shard-store.d.ts.map +1 -0
  151. package/dist/lake/callgraph-shard-store.js +466 -0
  152. package/dist/lake/callgraph-shard-store.js.map +1 -0
  153. package/dist/lake/examples-store.d.ts +127 -0
  154. package/dist/lake/examples-store.d.ts.map +1 -0
  155. package/dist/lake/examples-store.js +389 -0
  156. package/dist/lake/examples-store.js.map +1 -0
  157. package/dist/lake/index-store.d.ts +82 -0
  158. package/dist/lake/index-store.d.ts.map +1 -0
  159. package/dist/lake/index-store.js +359 -0
  160. package/dist/lake/index-store.js.map +1 -0
  161. package/dist/lake/index.d.ts +93 -0
  162. package/dist/lake/index.d.ts.map +1 -0
  163. package/dist/lake/index.js +138 -0
  164. package/dist/lake/index.js.map +1 -0
  165. package/dist/lake/lake.bak/index-store.d.ts +82 -0
  166. package/dist/lake/lake.bak/index-store.d.ts.map +1 -0
  167. package/dist/lake/lake.bak/index-store.js +357 -0
  168. package/dist/lake/lake.bak/index-store.js.map +1 -0
  169. package/dist/lake/lake.bak/index.d.ts +81 -0
  170. package/dist/lake/lake.bak/index.d.ts.map +1 -0
  171. package/dist/lake/lake.bak/index.js +114 -0
  172. package/dist/lake/lake.bak/index.js.map +1 -0
  173. package/dist/lake/lake.bak/manifest-store.d.ts +51 -0
  174. package/dist/lake/lake.bak/manifest-store.d.ts.map +1 -0
  175. package/dist/lake/lake.bak/manifest-store.js +347 -0
  176. package/dist/lake/lake.bak/manifest-store.js.map +1 -0
  177. package/dist/lake/lake.bak/query-engine.d.ts +112 -0
  178. package/dist/lake/lake.bak/query-engine.d.ts.map +1 -0
  179. package/dist/lake/lake.bak/query-engine.js +370 -0
  180. package/dist/lake/lake.bak/query-engine.js.map +1 -0
  181. package/dist/lake/lake.bak/types.d.ts +428 -0
  182. package/dist/lake/lake.bak/types.d.ts.map +1 -0
  183. package/dist/lake/lake.bak/types.js +46 -0
  184. package/dist/lake/lake.bak/types.js.map +1 -0
  185. package/dist/lake/lake.bak/view-materializer.d.ts +70 -0
  186. package/dist/lake/lake.bak/view-materializer.d.ts.map +1 -0
  187. package/dist/lake/lake.bak/view-materializer.js +314 -0
  188. package/dist/lake/lake.bak/view-materializer.js.map +1 -0
  189. package/dist/lake/lake.bak/view-store.d.ts +57 -0
  190. package/dist/lake/lake.bak/view-store.d.ts.map +1 -0
  191. package/dist/lake/lake.bak/view-store.js +348 -0
  192. package/dist/lake/lake.bak/view-store.js.map +1 -0
  193. package/dist/lake/manifest-store.d.ts +51 -0
  194. package/dist/lake/manifest-store.d.ts.map +1 -0
  195. package/dist/lake/manifest-store.js +348 -0
  196. package/dist/lake/manifest-store.js.map +1 -0
  197. package/dist/lake/pattern-shard-store.d.ts +87 -0
  198. package/dist/lake/pattern-shard-store.d.ts.map +1 -0
  199. package/dist/lake/pattern-shard-store.js +347 -0
  200. package/dist/lake/pattern-shard-store.js.map +1 -0
  201. package/dist/lake/query-engine.d.ts +124 -0
  202. package/dist/lake/query-engine.d.ts.map +1 -0
  203. package/dist/lake/query-engine.js +453 -0
  204. package/dist/lake/query-engine.js.map +1 -0
  205. package/dist/lake/security-shard-store.d.ts +156 -0
  206. package/dist/lake/security-shard-store.d.ts.map +1 -0
  207. package/dist/lake/security-shard-store.js +498 -0
  208. package/dist/lake/security-shard-store.js.map +1 -0
  209. package/dist/lake/types.d.ts +428 -0
  210. package/dist/lake/types.d.ts.map +1 -0
  211. package/dist/lake/types.js +46 -0
  212. package/dist/lake/types.js.map +1 -0
  213. package/dist/lake/view-materializer.d.ts +70 -0
  214. package/dist/lake/view-materializer.d.ts.map +1 -0
  215. package/dist/lake/view-materializer.js +314 -0
  216. package/dist/lake/view-materializer.js.map +1 -0
  217. package/dist/lake/view-store.d.ts +57 -0
  218. package/dist/lake/view-store.d.ts.map +1 -0
  219. package/dist/lake/view-store.js +348 -0
  220. package/dist/lake/view-store.js.map +1 -0
  221. package/dist/parsers/tree-sitter/index.d.ts +1 -0
  222. package/dist/parsers/tree-sitter/index.d.ts.map +1 -1
  223. package/dist/parsers/tree-sitter/index.js +4 -0
  224. package/dist/parsers/tree-sitter/index.js.map +1 -1
  225. package/dist/parsers/tree-sitter/typescript-loader.d.ts +58 -0
  226. package/dist/parsers/tree-sitter/typescript-loader.d.ts.map +1 -0
  227. package/dist/parsers/tree-sitter/typescript-loader.js +250 -0
  228. package/dist/parsers/tree-sitter/typescript-loader.js.map +1 -0
  229. package/dist/store/project-config.d.ts +154 -0
  230. package/dist/store/project-config.d.ts.map +1 -0
  231. package/dist/store/project-config.js +235 -0
  232. package/dist/store/project-config.js.map +1 -0
  233. package/dist/store/project-registry.d.ts +241 -0
  234. package/dist/store/project-registry.d.ts.map +1 -0
  235. package/dist/store/project-registry.js +557 -0
  236. package/dist/store/project-registry.js.map +1 -0
  237. package/package.json +4 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-extractor.js","sourceRoot":"","sources":["../../../src/call-graph/extractors/python-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Semantic Data Access Scanner
3
+ *
4
+ * Unified scanner that uses tree-sitter extractors for accurate data access detection.
5
+ * Features:
6
+ * - Auto-detection of project stack from package files
7
+ * - Smart scanning based on detected ORMs/frameworks
8
+ * - Support for TypeScript/JavaScript, Python, C#, Java, PHP
9
+ */
10
+ import type { DataAccessPoint } from '../../boundaries/types.js';
11
+ export interface SemanticScannerConfig {
12
+ rootDir: string;
13
+ verbose?: boolean;
14
+ /** Auto-detect project stack from package files */
15
+ autoDetect?: boolean;
16
+ }
17
+ export interface SemanticScanResult {
18
+ /** All detected data access points */
19
+ accessPoints: Map<string, DataAccessPoint[]>;
20
+ /** Statistics about the scan */
21
+ stats: {
22
+ filesScanned: number;
23
+ accessPointsFound: number;
24
+ byLanguage: Record<string, number>;
25
+ byOrm: Record<string, number>;
26
+ errors: number;
27
+ };
28
+ /** Detected project stack */
29
+ detectedStack: DetectedStack | undefined;
30
+ /** Any errors encountered */
31
+ errors: Array<{
32
+ file: string;
33
+ error: string;
34
+ }>;
35
+ }
36
+ export interface DetectedStack {
37
+ languages: string[];
38
+ orms: string[];
39
+ frameworks: string[];
40
+ }
41
+ /**
42
+ * Detect project stack from package/config files
43
+ */
44
+ declare function detectProjectStack(rootDir: string): Promise<DetectedStack>;
45
+ /**
46
+ * Semantic Data Access Scanner
47
+ *
48
+ * Uses tree-sitter for all supported languages for accurate data access detection.
49
+ * Features auto-detection of project stack for smarter scanning.
50
+ */
51
+ export declare class SemanticDataAccessScanner {
52
+ private readonly config;
53
+ private readonly extractors;
54
+ constructor(config: SemanticScannerConfig);
55
+ /**
56
+ * Scan files for data access patterns using semantic parsing
57
+ */
58
+ scanFiles(files: string[]): Promise<SemanticScanResult>;
59
+ /**
60
+ * Scan directory with glob patterns
61
+ */
62
+ scanDirectory(options?: {
63
+ patterns?: string[];
64
+ ignorePatterns?: string[];
65
+ }): Promise<SemanticScanResult>;
66
+ /**
67
+ * Get the appropriate extractor for a file
68
+ */
69
+ private getExtractor;
70
+ /**
71
+ * Quick check if file might have data access (avoid parsing everything)
72
+ */
73
+ private mightHaveDataAccess;
74
+ /**
75
+ * Infer ORM from context string
76
+ */
77
+ private inferOrm;
78
+ /**
79
+ * Find files matching patterns
80
+ */
81
+ private findFiles;
82
+ }
83
+ /**
84
+ * Create a new SemanticDataAccessScanner instance
85
+ */
86
+ export declare function createSemanticDataAccessScanner(config: SemanticScannerConfig): SemanticDataAccessScanner;
87
+ /**
88
+ * Detect project stack from package files
89
+ */
90
+ export { detectProjectStack };
91
+ //# sourceMappingURL=semantic-data-access-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-data-access-scanner.d.ts","sourceRoot":"","sources":["../../../src/call-graph/extractors/semantic-data-access-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAYjE,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mDAAmD;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IAC7C,gCAAgC;IAChC,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,6BAA6B;IAC7B,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;IACzC,6BAA6B;IAC7B,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAOD;;GAEG;AACH,iBAAe,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAwIzE;AAOD;;;;;GAKG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4B;gBAE3C,MAAM,EAAE,qBAAqB;IAazC;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAyE7D;;OAEG;IACG,aAAa,CAAC,OAAO,GAAE;QAC3B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8BpC;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkF3B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAsChB;;OAEG;YACW,SAAS;CAiCxB;AAMD;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,qBAAqB,GAAG,yBAAyB,CAExG;AAED;;GAEG;AACH,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,498 @@
1
+ /**
2
+ * Semantic Data Access Scanner
3
+ *
4
+ * Unified scanner that uses tree-sitter extractors for accurate data access detection.
5
+ * Features:
6
+ * - Auto-detection of project stack from package files
7
+ * - Smart scanning based on detected ORMs/frameworks
8
+ * - Support for TypeScript/JavaScript, Python, C#, Java, PHP
9
+ */
10
+ import * as fs from 'node:fs/promises';
11
+ import * as path from 'node:path';
12
+ import { minimatch } from 'minimatch';
13
+ import { TypeScriptDataAccessExtractor } from './typescript-data-access-extractor.js';
14
+ import { PythonDataAccessExtractor } from './python-data-access-extractor.js';
15
+ import { CSharpDataAccessExtractor } from './csharp-data-access-extractor.js';
16
+ import { JavaDataAccessExtractor } from './java-data-access-extractor.js';
17
+ import { PhpDataAccessExtractor } from './php-data-access-extractor.js';
18
+ // ============================================================================
19
+ // Project Stack Detector
20
+ // ============================================================================
21
+ /**
22
+ * Detect project stack from package/config files
23
+ */
24
+ async function detectProjectStack(rootDir) {
25
+ const stack = {
26
+ languages: [],
27
+ orms: [],
28
+ frameworks: [],
29
+ };
30
+ // Check for Node.js/TypeScript (package.json)
31
+ try {
32
+ const pkgPath = path.join(rootDir, 'package.json');
33
+ const pkgContent = await fs.readFile(pkgPath, 'utf-8');
34
+ const pkg = JSON.parse(pkgContent);
35
+ const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
36
+ stack.languages.push('typescript', 'javascript');
37
+ // Detect ORMs
38
+ if (allDeps['@supabase/supabase-js'])
39
+ stack.orms.push('supabase');
40
+ if (allDeps['@prisma/client'] || allDeps['prisma'])
41
+ stack.orms.push('prisma');
42
+ if (allDeps['typeorm'])
43
+ stack.orms.push('typeorm');
44
+ if (allDeps['sequelize'])
45
+ stack.orms.push('sequelize');
46
+ if (allDeps['drizzle-orm'])
47
+ stack.orms.push('drizzle');
48
+ if (allDeps['knex'])
49
+ stack.orms.push('knex');
50
+ if (allDeps['mongoose'])
51
+ stack.orms.push('mongoose');
52
+ if (allDeps['pg'] || allDeps['mysql2'] || allDeps['better-sqlite3'])
53
+ stack.orms.push('raw-sql');
54
+ // Detect frameworks
55
+ if (allDeps['next'])
56
+ stack.frameworks.push('nextjs');
57
+ if (allDeps['express'])
58
+ stack.frameworks.push('express');
59
+ if (allDeps['fastify'])
60
+ stack.frameworks.push('fastify');
61
+ if (allDeps['@nestjs/core'])
62
+ stack.frameworks.push('nestjs');
63
+ if (allDeps['react'])
64
+ stack.frameworks.push('react');
65
+ if (allDeps['vue'])
66
+ stack.frameworks.push('vue');
67
+ }
68
+ catch {
69
+ // No package.json
70
+ }
71
+ // Check for Python (requirements.txt, pyproject.toml)
72
+ try {
73
+ let pythonDeps = '';
74
+ try {
75
+ pythonDeps = await fs.readFile(path.join(rootDir, 'requirements.txt'), 'utf-8');
76
+ }
77
+ catch {
78
+ try {
79
+ pythonDeps = await fs.readFile(path.join(rootDir, 'pyproject.toml'), 'utf-8');
80
+ }
81
+ catch {
82
+ // No Python deps
83
+ }
84
+ }
85
+ if (pythonDeps) {
86
+ stack.languages.push('python');
87
+ if (pythonDeps.includes('django'))
88
+ stack.orms.push('django');
89
+ if (pythonDeps.includes('sqlalchemy'))
90
+ stack.orms.push('sqlalchemy');
91
+ if (pythonDeps.includes('supabase'))
92
+ stack.orms.push('supabase-python');
93
+ if (pythonDeps.includes('tortoise'))
94
+ stack.orms.push('tortoise');
95
+ if (pythonDeps.includes('peewee'))
96
+ stack.orms.push('peewee');
97
+ if (pythonDeps.includes('psycopg') || pythonDeps.includes('pymysql'))
98
+ stack.orms.push('raw-sql');
99
+ if (pythonDeps.includes('fastapi'))
100
+ stack.frameworks.push('fastapi');
101
+ if (pythonDeps.includes('flask'))
102
+ stack.frameworks.push('flask');
103
+ if (pythonDeps.includes('django'))
104
+ stack.frameworks.push('django');
105
+ }
106
+ }
107
+ catch {
108
+ // No Python deps
109
+ }
110
+ // Check for C# (.csproj files)
111
+ try {
112
+ const entries = await fs.readdir(rootDir);
113
+ for (const entry of entries) {
114
+ if (entry.endsWith('.csproj')) {
115
+ stack.languages.push('csharp');
116
+ const csprojContent = await fs.readFile(path.join(rootDir, entry), 'utf-8');
117
+ if (csprojContent.includes('Microsoft.EntityFrameworkCore'))
118
+ stack.orms.push('ef-core');
119
+ if (csprojContent.includes('Dapper'))
120
+ stack.orms.push('dapper');
121
+ if (csprojContent.includes('Microsoft.AspNetCore'))
122
+ stack.frameworks.push('aspnet');
123
+ break;
124
+ }
125
+ }
126
+ }
127
+ catch {
128
+ // No .csproj
129
+ }
130
+ // Check for Java (pom.xml, build.gradle)
131
+ try {
132
+ let javaDeps = '';
133
+ try {
134
+ javaDeps = await fs.readFile(path.join(rootDir, 'pom.xml'), 'utf-8');
135
+ }
136
+ catch {
137
+ try {
138
+ javaDeps = await fs.readFile(path.join(rootDir, 'build.gradle'), 'utf-8');
139
+ }
140
+ catch {
141
+ // No Java deps
142
+ }
143
+ }
144
+ if (javaDeps) {
145
+ stack.languages.push('java');
146
+ if (javaDeps.includes('spring-data-jpa') || javaDeps.includes('spring-boot-starter-data-jpa')) {
147
+ stack.orms.push('spring-data-jpa');
148
+ }
149
+ if (javaDeps.includes('hibernate'))
150
+ stack.orms.push('hibernate');
151
+ if (javaDeps.includes('mybatis'))
152
+ stack.orms.push('mybatis');
153
+ if (javaDeps.includes('jooq'))
154
+ stack.orms.push('jooq');
155
+ if (javaDeps.includes('jdbc'))
156
+ stack.orms.push('jdbc');
157
+ if (javaDeps.includes('spring-boot'))
158
+ stack.frameworks.push('spring-boot');
159
+ }
160
+ }
161
+ catch {
162
+ // No Java deps
163
+ }
164
+ // Check for PHP (composer.json)
165
+ try {
166
+ const composerPath = path.join(rootDir, 'composer.json');
167
+ const composerContent = await fs.readFile(composerPath, 'utf-8');
168
+ const composer = JSON.parse(composerContent);
169
+ const allDeps = { ...composer.require, ...composer['require-dev'] };
170
+ stack.languages.push('php');
171
+ if (allDeps['laravel/framework']) {
172
+ stack.frameworks.push('laravel');
173
+ stack.orms.push('eloquent');
174
+ }
175
+ if (allDeps['doctrine/orm'])
176
+ stack.orms.push('doctrine');
177
+ if (allDeps['illuminate/database'])
178
+ stack.orms.push('eloquent');
179
+ }
180
+ catch {
181
+ // No composer.json
182
+ }
183
+ return stack;
184
+ }
185
+ // ============================================================================
186
+ // Semantic Data Access Scanner
187
+ // ============================================================================
188
+ /**
189
+ * Semantic Data Access Scanner
190
+ *
191
+ * Uses tree-sitter for all supported languages for accurate data access detection.
192
+ * Features auto-detection of project stack for smarter scanning.
193
+ */
194
+ export class SemanticDataAccessScanner {
195
+ config;
196
+ extractors;
197
+ constructor(config) {
198
+ this.config = config;
199
+ // Initialize all extractors - all use tree-sitter
200
+ this.extractors = [
201
+ new TypeScriptDataAccessExtractor(),
202
+ new PythonDataAccessExtractor(),
203
+ new CSharpDataAccessExtractor(),
204
+ new JavaDataAccessExtractor(),
205
+ new PhpDataAccessExtractor(),
206
+ ];
207
+ }
208
+ /**
209
+ * Scan files for data access patterns using semantic parsing
210
+ */
211
+ async scanFiles(files) {
212
+ const accessPoints = new Map();
213
+ const errors = [];
214
+ const stats = {
215
+ filesScanned: 0,
216
+ accessPointsFound: 0,
217
+ byLanguage: {},
218
+ byOrm: {},
219
+ errors: 0,
220
+ };
221
+ // Auto-detect project stack if enabled
222
+ let detectedStack;
223
+ if (this.config.autoDetect !== false) {
224
+ detectedStack = await detectProjectStack(this.config.rootDir);
225
+ if (this.config.verbose && detectedStack.orms.length > 0) {
226
+ console.log(`Detected stack: ${detectedStack.languages.join(', ')}`);
227
+ console.log(`Detected ORMs: ${detectedStack.orms.join(', ')}`);
228
+ }
229
+ }
230
+ for (const file of files) {
231
+ const extractor = this.getExtractor(file);
232
+ if (!extractor)
233
+ continue;
234
+ try {
235
+ const filePath = path.join(this.config.rootDir, file);
236
+ const source = await fs.readFile(filePath, 'utf-8');
237
+ // Skip files that don't look like they have data access
238
+ if (!this.mightHaveDataAccess(source, detectedStack))
239
+ continue;
240
+ stats.filesScanned++;
241
+ const result = extractor.extract(source, file);
242
+ if (result.accessPoints.length > 0) {
243
+ accessPoints.set(file, result.accessPoints);
244
+ stats.accessPointsFound += result.accessPoints.length;
245
+ // Track by language
246
+ const lang = result.language;
247
+ stats.byLanguage[lang] = (stats.byLanguage[lang] ?? 0) + result.accessPoints.length;
248
+ // Track by ORM (infer from context)
249
+ for (const ap of result.accessPoints) {
250
+ const orm = this.inferOrm(ap.context);
251
+ if (orm) {
252
+ stats.byOrm[orm] = (stats.byOrm[orm] ?? 0) + 1;
253
+ }
254
+ }
255
+ }
256
+ if (result.errors.length > 0) {
257
+ for (const error of result.errors) {
258
+ errors.push({ file, error });
259
+ stats.errors++;
260
+ }
261
+ }
262
+ }
263
+ catch (error) {
264
+ const errorMsg = error instanceof Error ? error.message : String(error);
265
+ errors.push({ file, error: errorMsg });
266
+ stats.errors++;
267
+ if (this.config.verbose) {
268
+ console.error(`Error scanning ${file}:`, errorMsg);
269
+ }
270
+ }
271
+ }
272
+ return { accessPoints, stats, detectedStack, errors };
273
+ }
274
+ /**
275
+ * Scan directory with glob patterns
276
+ */
277
+ async scanDirectory(options = {}) {
278
+ const patterns = options.patterns ?? [
279
+ '**/*.ts',
280
+ '**/*.tsx',
281
+ '**/*.js',
282
+ '**/*.jsx',
283
+ '**/*.py',
284
+ '**/*.cs',
285
+ '**/*.java',
286
+ '**/*.php',
287
+ ];
288
+ const ignorePatterns = options.ignorePatterns ?? [
289
+ 'node_modules',
290
+ '.git',
291
+ 'dist',
292
+ 'build',
293
+ '__pycache__',
294
+ '.drift',
295
+ '.venv',
296
+ 'venv',
297
+ 'bin',
298
+ 'obj',
299
+ 'target',
300
+ 'vendor',
301
+ ];
302
+ const files = await this.findFiles(patterns, ignorePatterns);
303
+ return this.scanFiles(files);
304
+ }
305
+ /**
306
+ * Get the appropriate extractor for a file
307
+ */
308
+ getExtractor(file) {
309
+ for (const extractor of this.extractors) {
310
+ if (extractor.canHandle(file)) {
311
+ return extractor;
312
+ }
313
+ }
314
+ return null;
315
+ }
316
+ /**
317
+ * Quick check if file might have data access (avoid parsing everything)
318
+ */
319
+ mightHaveDataAccess(content, stack) {
320
+ // Skip test files
321
+ const testPatterns = ['@pytest', 'describe(', 'it(', 'test(', '[Fact]', '[Theory]',
322
+ '@Test', '@Before', '@After', 'PHPUnit'];
323
+ if (testPatterns.some(p => content.includes(p))) {
324
+ // But allow if they also have actual data access
325
+ const hasDataAccess = ['.from(', '.query(', 'SELECT', 'prisma.', 'DbContext', '.Where(']
326
+ .some(p => content.includes(p));
327
+ if (!hasDataAccess)
328
+ return false;
329
+ }
330
+ // If we detected specific ORMs, prioritize those patterns
331
+ if (stack && stack.orms.length > 0) {
332
+ const ormPatterns = {
333
+ 'supabase': ['.from(', 'supabase', 'createClient'],
334
+ 'prisma': ['prisma.', '@prisma/client'],
335
+ 'django': ['.objects.', 'models.Model'],
336
+ 'sqlalchemy': ['.query(', 'session.add', 'session.delete'],
337
+ 'typeorm': ['@Entity', 'getRepository', 'Repository'],
338
+ 'sequelize': ['sequelize.', '.findAll(', '.findOne('],
339
+ 'drizzle': ['drizzle-orm', 'db.select', 'db.insert'],
340
+ 'knex': ['knex(', '.table('],
341
+ 'mongoose': ['mongoose', '.find(', '.findOne(', 'Schema'],
342
+ 'ef-core': ['DbContext', '.Where(', '.ToList', '.SaveChanges'],
343
+ 'dapper': ['.Query<', '.QueryAsync<', '.Execute('],
344
+ 'spring-data-jpa': ['Repository', '@Query', 'JpaRepository'],
345
+ 'hibernate': ['Session', 'EntityManager', 'createQuery'],
346
+ 'eloquent': ['::where(', '::find(', '->save(', 'DB::'],
347
+ 'doctrine': ['getRepository', 'EntityManager', 'persist'],
348
+ };
349
+ for (const orm of stack.orms) {
350
+ const patterns = ormPatterns[orm];
351
+ if (patterns && patterns.some(p => content.includes(p))) {
352
+ return true;
353
+ }
354
+ }
355
+ }
356
+ // Generic ORM/database patterns
357
+ const patterns = [
358
+ // Supabase
359
+ '.from(', '.select(', '.insert(', '.update(', '.delete(',
360
+ // Prisma
361
+ 'prisma.', '@prisma/client',
362
+ // Django
363
+ '.objects.', 'models.Model',
364
+ // SQLAlchemy
365
+ '.query(', 'session.add', 'session.delete',
366
+ // TypeORM
367
+ '@Entity', 'getRepository', 'Repository',
368
+ // Sequelize
369
+ 'sequelize.', '.findAll(', '.findOne(',
370
+ // Drizzle
371
+ 'drizzle-orm', 'db.select', 'db.insert',
372
+ // Knex
373
+ 'knex(', '.table(',
374
+ // Mongoose
375
+ 'mongoose', 'Schema(',
376
+ // Entity Framework Core
377
+ 'DbContext', '.Where(', '.FirstOrDefault', '.ToList', '.ToListAsync',
378
+ '.Add(', '.AddRange(', '.Remove(', '.SaveChanges',
379
+ // Dapper
380
+ '.Query<', '.QueryAsync<', '.Execute(', '.ExecuteAsync(',
381
+ // ADO.NET
382
+ 'ExecuteReader', 'ExecuteNonQuery', 'SqlCommand',
383
+ // Spring Data JPA
384
+ 'JpaRepository', 'CrudRepository', '@Query',
385
+ // Hibernate
386
+ 'EntityManager', 'Session', 'createQuery',
387
+ // Laravel Eloquent
388
+ '::where(', '::find(', '::all(', '->save(', 'DB::table',
389
+ // Doctrine
390
+ 'getRepository(', 'EntityManager', '->persist(',
391
+ // Raw SQL
392
+ 'SELECT ', 'INSERT ', 'UPDATE ', 'DELETE ',
393
+ 'execute(', 'query(',
394
+ ];
395
+ return patterns.some(p => content.includes(p));
396
+ }
397
+ /**
398
+ * Infer ORM from context string
399
+ */
400
+ inferOrm(context) {
401
+ const lower = context.toLowerCase();
402
+ // JavaScript/TypeScript ORMs
403
+ if (lower.includes('supabase') || (lower.includes('.from(') && lower.includes('.select(')))
404
+ return 'supabase';
405
+ if (lower.includes('prisma'))
406
+ return 'prisma';
407
+ if (lower.includes('repository') && !lower.includes('jpa'))
408
+ return 'typeorm';
409
+ if (lower.includes('sequelize') || lower.includes('.findall('))
410
+ return 'sequelize';
411
+ if (lower.includes('drizzle'))
412
+ return 'drizzle';
413
+ if (lower.includes('knex'))
414
+ return 'knex';
415
+ if (lower.includes('mongoose') || lower.includes('schema('))
416
+ return 'mongoose';
417
+ // Python ORMs
418
+ if (lower.includes('.objects.'))
419
+ return 'django';
420
+ if (lower.includes('session.query') || lower.includes('sqlalchemy'))
421
+ return 'sqlalchemy';
422
+ // C# ORMs
423
+ if (lower.includes('dbcontext') || lower.includes('.tolistasync('))
424
+ return 'ef-core';
425
+ if (lower.includes('.query<') || lower.includes('.queryasync<'))
426
+ return 'dapper';
427
+ if (lower.includes('executereader') || lower.includes('executenonquery'))
428
+ return 'ado-net';
429
+ // Java ORMs
430
+ if (lower.includes('jparepository') || lower.includes('crudrepository'))
431
+ return 'spring-data-jpa';
432
+ if (lower.includes('entitymanager') || lower.includes('session.get'))
433
+ return 'hibernate';
434
+ if (lower.includes('@select') || lower.includes('@insert'))
435
+ return 'mybatis';
436
+ if (lower.includes('dsl.select') || lower.includes('insertinto'))
437
+ return 'jooq';
438
+ // PHP ORMs
439
+ if (lower.includes('::where(') || lower.includes('::find(') || lower.includes('eloquent'))
440
+ return 'eloquent';
441
+ if (lower.includes('db::table') || lower.includes('db::select'))
442
+ return 'laravel-db';
443
+ if (lower.includes('getrepository(') || lower.includes('->persist('))
444
+ return 'doctrine';
445
+ // Raw SQL
446
+ if (/\b(select|insert|update|delete)\b/i.test(context))
447
+ return 'raw-sql';
448
+ return null;
449
+ }
450
+ /**
451
+ * Find files matching patterns
452
+ */
453
+ async findFiles(patterns, ignorePatterns) {
454
+ const files = [];
455
+ const walk = async (dir, relativePath = '') => {
456
+ let entries;
457
+ try {
458
+ entries = await fs.readdir(dir, { withFileTypes: true });
459
+ }
460
+ catch {
461
+ return;
462
+ }
463
+ for (const entry of entries) {
464
+ const fullPath = path.join(dir, entry.name);
465
+ const relPath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
466
+ if (entry.isDirectory()) {
467
+ if (!ignorePatterns.includes(entry.name) && !entry.name.startsWith('.')) {
468
+ await walk(fullPath, relPath);
469
+ }
470
+ }
471
+ else if (entry.isFile()) {
472
+ for (const pattern of patterns) {
473
+ if (minimatch(relPath, pattern)) {
474
+ files.push(relPath);
475
+ break;
476
+ }
477
+ }
478
+ }
479
+ }
480
+ };
481
+ await walk(this.config.rootDir);
482
+ return files;
483
+ }
484
+ }
485
+ // ============================================================================
486
+ // Factory Functions
487
+ // ============================================================================
488
+ /**
489
+ * Create a new SemanticDataAccessScanner instance
490
+ */
491
+ export function createSemanticDataAccessScanner(config) {
492
+ return new SemanticDataAccessScanner(config);
493
+ }
494
+ /**
495
+ * Detect project stack from package files
496
+ */
497
+ export { detectProjectStack };
498
+ //# sourceMappingURL=semantic-data-access-scanner.js.map