driftdetect-core 0.4.0 → 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.
- package/dist/boundaries/boundary-scanner.d.ts +76 -0
- package/dist/boundaries/boundary-scanner.d.ts.map +1 -0
- package/dist/boundaries/boundary-scanner.js +801 -0
- package/dist/boundaries/boundary-scanner.js.map +1 -0
- package/dist/boundaries/data-access-learner.d.ts +126 -0
- package/dist/boundaries/data-access-learner.d.ts.map +1 -0
- package/dist/boundaries/data-access-learner.js +486 -0
- package/dist/boundaries/data-access-learner.js.map +1 -0
- package/dist/boundaries/index.d.ts +6 -0
- package/dist/boundaries/index.d.ts.map +1 -1
- package/dist/boundaries/index.js +6 -0
- package/dist/boundaries/index.js.map +1 -1
- package/dist/boundaries/security-prioritizer.d.ts +118 -0
- package/dist/boundaries/security-prioritizer.d.ts.map +1 -0
- package/dist/boundaries/security-prioritizer.js +316 -0
- package/dist/boundaries/security-prioritizer.js.map +1 -0
- package/dist/call-graph/analysis/coverage-analyzer.d.ts +201 -0
- package/dist/call-graph/analysis/coverage-analyzer.d.ts.map +1 -0
- package/dist/call-graph/analysis/coverage-analyzer.js +553 -0
- package/dist/call-graph/analysis/coverage-analyzer.js.map +1 -0
- package/dist/call-graph/analysis/dead-code-detector.d.ts +145 -0
- package/dist/call-graph/analysis/dead-code-detector.d.ts.map +1 -0
- package/dist/call-graph/analysis/dead-code-detector.js +391 -0
- package/dist/call-graph/analysis/dead-code-detector.js.map +1 -0
- package/dist/call-graph/analysis/graph-builder.d.ts +142 -0
- package/dist/call-graph/analysis/graph-builder.d.ts.map +1 -0
- package/dist/call-graph/analysis/graph-builder.js +624 -0
- package/dist/call-graph/analysis/graph-builder.js.map +1 -0
- package/dist/call-graph/analysis/impact-analyzer.d.ts +150 -0
- package/dist/call-graph/analysis/impact-analyzer.d.ts.map +1 -0
- package/dist/call-graph/analysis/impact-analyzer.js +329 -0
- package/dist/call-graph/analysis/impact-analyzer.js.map +1 -0
- package/dist/call-graph/analysis/index.d.ts +11 -0
- package/dist/call-graph/analysis/index.d.ts.map +1 -0
- package/dist/call-graph/analysis/index.js +9 -0
- package/dist/call-graph/analysis/index.js.map +1 -0
- package/dist/call-graph/analysis/path-finder.d.ts +117 -0
- package/dist/call-graph/analysis/path-finder.d.ts.map +1 -0
- package/dist/call-graph/analysis/path-finder.js +360 -0
- package/dist/call-graph/analysis/path-finder.js.map +1 -0
- package/dist/call-graph/analysis/reachability.d.ts +56 -0
- package/dist/call-graph/analysis/reachability.d.ts.map +1 -0
- package/dist/call-graph/analysis/reachability.js +357 -0
- package/dist/call-graph/analysis/reachability.js.map +1 -0
- package/dist/call-graph/demo.d.ts +11 -0
- package/dist/call-graph/demo.d.ts.map +1 -0
- package/dist/call-graph/demo.js +339 -0
- package/dist/call-graph/demo.js.map +1 -0
- package/dist/call-graph/enrichment/enrichment-engine.d.ts +126 -0
- package/dist/call-graph/enrichment/enrichment-engine.d.ts.map +1 -0
- package/dist/call-graph/enrichment/enrichment-engine.js +760 -0
- package/dist/call-graph/enrichment/enrichment-engine.js.map +1 -0
- package/dist/call-graph/enrichment/impact-scorer.d.ts +59 -0
- package/dist/call-graph/enrichment/impact-scorer.d.ts.map +1 -0
- package/dist/call-graph/enrichment/impact-scorer.js +328 -0
- package/dist/call-graph/enrichment/impact-scorer.js.map +1 -0
- package/dist/call-graph/enrichment/index.d.ts +12 -0
- package/dist/call-graph/enrichment/index.d.ts.map +1 -0
- package/dist/call-graph/enrichment/index.js +15 -0
- package/dist/call-graph/enrichment/index.js.map +1 -0
- package/dist/call-graph/enrichment/remediation-generator.d.ts +41 -0
- package/dist/call-graph/enrichment/remediation-generator.d.ts.map +1 -0
- package/dist/call-graph/enrichment/remediation-generator.js +609 -0
- package/dist/call-graph/enrichment/remediation-generator.js.map +1 -0
- package/dist/call-graph/enrichment/sensitivity-classifier.d.ts +71 -0
- package/dist/call-graph/enrichment/sensitivity-classifier.d.ts.map +1 -0
- package/dist/call-graph/enrichment/sensitivity-classifier.js +454 -0
- package/dist/call-graph/enrichment/sensitivity-classifier.js.map +1 -0
- package/dist/call-graph/enrichment/types.d.ts +402 -0
- package/dist/call-graph/enrichment/types.d.ts.map +1 -0
- package/dist/call-graph/enrichment/types.js +9 -0
- package/dist/call-graph/enrichment/types.js.map +1 -0
- package/dist/call-graph/extractors/base-extractor.d.ts +112 -0
- package/dist/call-graph/extractors/base-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/base-extractor.js +140 -0
- package/dist/call-graph/extractors/base-extractor.js.map +1 -0
- package/dist/call-graph/extractors/csharp-data-access-extractor.d.ts +76 -0
- package/dist/call-graph/extractors/csharp-data-access-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/csharp-data-access-extractor.js +387 -0
- package/dist/call-graph/extractors/csharp-data-access-extractor.js.map +1 -0
- package/dist/call-graph/extractors/csharp-extractor.d.ts +87 -0
- package/dist/call-graph/extractors/csharp-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/csharp-extractor.js +470 -0
- package/dist/call-graph/extractors/csharp-extractor.js.map +1 -0
- package/dist/call-graph/extractors/data-access-extractor.d.ts +76 -0
- package/dist/call-graph/extractors/data-access-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/data-access-extractor.js +234 -0
- package/dist/call-graph/extractors/data-access-extractor.js.map +1 -0
- package/dist/call-graph/extractors/index.d.ts +26 -0
- package/dist/call-graph/extractors/index.d.ts.map +1 -0
- package/dist/call-graph/extractors/index.js +36 -0
- package/dist/call-graph/extractors/index.js.map +1 -0
- package/dist/call-graph/extractors/java-data-access-extractor.d.ts +101 -0
- package/dist/call-graph/extractors/java-data-access-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/java-data-access-extractor.js +611 -0
- package/dist/call-graph/extractors/java-data-access-extractor.js.map +1 -0
- package/dist/call-graph/extractors/java-extractor.d.ts +87 -0
- package/dist/call-graph/extractors/java-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/java-extractor.js +510 -0
- package/dist/call-graph/extractors/java-extractor.js.map +1 -0
- package/dist/call-graph/extractors/php-data-access-extractor.d.ts +93 -0
- package/dist/call-graph/extractors/php-data-access-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/php-data-access-extractor.js +589 -0
- package/dist/call-graph/extractors/php-data-access-extractor.js.map +1 -0
- package/dist/call-graph/extractors/php-extractor.d.ts +104 -0
- package/dist/call-graph/extractors/php-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/php-extractor.js +619 -0
- package/dist/call-graph/extractors/php-extractor.js.map +1 -0
- package/dist/call-graph/extractors/python-data-access-extractor.d.ts +90 -0
- package/dist/call-graph/extractors/python-data-access-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/python-data-access-extractor.js +537 -0
- package/dist/call-graph/extractors/python-data-access-extractor.js.map +1 -0
- package/dist/call-graph/extractors/python-extractor.d.ts +98 -0
- package/dist/call-graph/extractors/python-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/python-extractor.js +681 -0
- package/dist/call-graph/extractors/python-extractor.js.map +1 -0
- package/dist/call-graph/extractors/semantic-data-access-scanner.d.ts +91 -0
- package/dist/call-graph/extractors/semantic-data-access-scanner.d.ts.map +1 -0
- package/dist/call-graph/extractors/semantic-data-access-scanner.js +498 -0
- package/dist/call-graph/extractors/semantic-data-access-scanner.js.map +1 -0
- package/dist/call-graph/extractors/typescript-data-access-extractor.d.ts +122 -0
- package/dist/call-graph/extractors/typescript-data-access-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/typescript-data-access-extractor.js +788 -0
- package/dist/call-graph/extractors/typescript-data-access-extractor.js.map +1 -0
- package/dist/call-graph/extractors/typescript-extractor.d.ts +145 -0
- package/dist/call-graph/extractors/typescript-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/typescript-extractor.js +904 -0
- package/dist/call-graph/extractors/typescript-extractor.js.map +1 -0
- package/dist/call-graph/index.d.ts +127 -0
- package/dist/call-graph/index.d.ts.map +1 -0
- package/dist/call-graph/index.js +247 -0
- package/dist/call-graph/index.js.map +1 -0
- package/dist/call-graph/store/call-graph-store.d.ts +70 -0
- package/dist/call-graph/store/call-graph-store.d.ts.map +1 -0
- package/dist/call-graph/store/call-graph-store.js +210 -0
- package/dist/call-graph/store/call-graph-store.js.map +1 -0
- package/dist/call-graph/store/index.d.ts +7 -0
- package/dist/call-graph/store/index.d.ts.map +1 -0
- package/dist/call-graph/store/index.js +7 -0
- package/dist/call-graph/store/index.js.map +1 -0
- package/dist/call-graph/types.d.ts +376 -0
- package/dist/call-graph/types.d.ts.map +1 -0
- package/dist/call-graph/types.js +8 -0
- package/dist/call-graph/types.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/lake/callgraph-shard-store.d.ts +168 -0
- package/dist/lake/callgraph-shard-store.d.ts.map +1 -0
- package/dist/lake/callgraph-shard-store.js +466 -0
- package/dist/lake/callgraph-shard-store.js.map +1 -0
- package/dist/lake/examples-store.d.ts +127 -0
- package/dist/lake/examples-store.d.ts.map +1 -0
- package/dist/lake/examples-store.js +389 -0
- package/dist/lake/examples-store.js.map +1 -0
- package/dist/lake/index-store.d.ts +82 -0
- package/dist/lake/index-store.d.ts.map +1 -0
- package/dist/lake/index-store.js +359 -0
- package/dist/lake/index-store.js.map +1 -0
- package/dist/lake/index.d.ts +93 -0
- package/dist/lake/index.d.ts.map +1 -0
- package/dist/lake/index.js +138 -0
- package/dist/lake/index.js.map +1 -0
- package/dist/lake/lake.bak/index-store.d.ts +82 -0
- package/dist/lake/lake.bak/index-store.d.ts.map +1 -0
- package/dist/lake/lake.bak/index-store.js +357 -0
- package/dist/lake/lake.bak/index-store.js.map +1 -0
- package/dist/lake/lake.bak/index.d.ts +81 -0
- package/dist/lake/lake.bak/index.d.ts.map +1 -0
- package/dist/lake/lake.bak/index.js +114 -0
- package/dist/lake/lake.bak/index.js.map +1 -0
- package/dist/lake/lake.bak/manifest-store.d.ts +51 -0
- package/dist/lake/lake.bak/manifest-store.d.ts.map +1 -0
- package/dist/lake/lake.bak/manifest-store.js +347 -0
- package/dist/lake/lake.bak/manifest-store.js.map +1 -0
- package/dist/lake/lake.bak/query-engine.d.ts +112 -0
- package/dist/lake/lake.bak/query-engine.d.ts.map +1 -0
- package/dist/lake/lake.bak/query-engine.js +370 -0
- package/dist/lake/lake.bak/query-engine.js.map +1 -0
- package/dist/lake/lake.bak/types.d.ts +428 -0
- package/dist/lake/lake.bak/types.d.ts.map +1 -0
- package/dist/lake/lake.bak/types.js +46 -0
- package/dist/lake/lake.bak/types.js.map +1 -0
- package/dist/lake/lake.bak/view-materializer.d.ts +70 -0
- package/dist/lake/lake.bak/view-materializer.d.ts.map +1 -0
- package/dist/lake/lake.bak/view-materializer.js +314 -0
- package/dist/lake/lake.bak/view-materializer.js.map +1 -0
- package/dist/lake/lake.bak/view-store.d.ts +57 -0
- package/dist/lake/lake.bak/view-store.d.ts.map +1 -0
- package/dist/lake/lake.bak/view-store.js +348 -0
- package/dist/lake/lake.bak/view-store.js.map +1 -0
- package/dist/lake/manifest-store.d.ts +51 -0
- package/dist/lake/manifest-store.d.ts.map +1 -0
- package/dist/lake/manifest-store.js +348 -0
- package/dist/lake/manifest-store.js.map +1 -0
- package/dist/lake/pattern-shard-store.d.ts +87 -0
- package/dist/lake/pattern-shard-store.d.ts.map +1 -0
- package/dist/lake/pattern-shard-store.js +347 -0
- package/dist/lake/pattern-shard-store.js.map +1 -0
- package/dist/lake/query-engine.d.ts +124 -0
- package/dist/lake/query-engine.d.ts.map +1 -0
- package/dist/lake/query-engine.js +453 -0
- package/dist/lake/query-engine.js.map +1 -0
- package/dist/lake/security-shard-store.d.ts +156 -0
- package/dist/lake/security-shard-store.d.ts.map +1 -0
- package/dist/lake/security-shard-store.js +498 -0
- package/dist/lake/security-shard-store.js.map +1 -0
- package/dist/lake/types.d.ts +428 -0
- package/dist/lake/types.d.ts.map +1 -0
- package/dist/lake/types.js +46 -0
- package/dist/lake/types.js.map +1 -0
- package/dist/lake/view-materializer.d.ts +70 -0
- package/dist/lake/view-materializer.d.ts.map +1 -0
- package/dist/lake/view-materializer.js +314 -0
- package/dist/lake/view-materializer.js.map +1 -0
- package/dist/lake/view-store.d.ts +57 -0
- package/dist/lake/view-store.d.ts.map +1 -0
- package/dist/lake/view-store.js +348 -0
- package/dist/lake/view-store.js.map +1 -0
- package/dist/parsers/tree-sitter/index.d.ts +1 -0
- package/dist/parsers/tree-sitter/index.d.ts.map +1 -1
- package/dist/parsers/tree-sitter/index.js +4 -0
- package/dist/parsers/tree-sitter/index.js.map +1 -1
- package/dist/parsers/tree-sitter/typescript-loader.d.ts +58 -0
- package/dist/parsers/tree-sitter/typescript-loader.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/typescript-loader.js +250 -0
- package/dist/parsers/tree-sitter/typescript-loader.js.map +1 -0
- package/dist/store/project-config.d.ts +154 -0
- package/dist/store/project-config.d.ts.map +1 -0
- package/dist/store/project-config.js +235 -0
- package/dist/store/project-config.js.map +1 -0
- package/dist/store/project-registry.d.ts +241 -0
- package/dist/store/project-registry.d.ts.map +1 -0
- package/dist/store/project-registry.js +557 -0
- package/dist/store/project-registry.js.map +1 -0
- package/package.json +7 -7
|
@@ -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
|