driftdetect-core 0.4.4 → 0.4.6
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/LICENSE +21 -0
- package/dist/boundaries/boundary-scanner.d.ts.map +1 -1
- package/dist/boundaries/boundary-scanner.js +184 -18
- package/dist/boundaries/boundary-scanner.js.map +1 -1
- package/dist/boundaries/types.d.ts +34 -2
- package/dist/boundaries/types.d.ts.map +1 -1
- package/dist/call-graph/analysis/graph-builder.d.ts +3 -0
- package/dist/call-graph/analysis/graph-builder.d.ts.map +1 -1
- package/dist/call-graph/analysis/graph-builder.js +81 -18
- package/dist/call-graph/analysis/graph-builder.js.map +1 -1
- package/dist/call-graph/extractors/csharp-data-access-extractor.d.ts.map +1 -1
- package/dist/call-graph/extractors/csharp-data-access-extractor.js +10 -5
- package/dist/call-graph/extractors/csharp-data-access-extractor.js.map +1 -1
- package/dist/call-graph/extractors/data-access-extractor.d.ts +16 -2
- package/dist/call-graph/extractors/data-access-extractor.d.ts.map +1 -1
- package/dist/call-graph/extractors/data-access-extractor.js +114 -5
- package/dist/call-graph/extractors/data-access-extractor.js.map +1 -1
- package/dist/call-graph/extractors/java-data-access-extractor.d.ts.map +1 -1
- package/dist/call-graph/extractors/java-data-access-extractor.js +12 -6
- package/dist/call-graph/extractors/java-data-access-extractor.js.map +1 -1
- package/dist/call-graph/extractors/php-data-access-extractor.d.ts.map +1 -1
- package/dist/call-graph/extractors/php-data-access-extractor.js +12 -6
- package/dist/call-graph/extractors/php-data-access-extractor.js.map +1 -1
- package/dist/call-graph/extractors/python-data-access-extractor.d.ts.map +1 -1
- package/dist/call-graph/extractors/python-data-access-extractor.js +12 -6
- package/dist/call-graph/extractors/python-data-access-extractor.js.map +1 -1
- package/dist/call-graph/extractors/semantic-data-access-scanner.d.ts +4 -0
- package/dist/call-graph/extractors/semantic-data-access-scanner.d.ts.map +1 -1
- package/dist/call-graph/extractors/semantic-data-access-scanner.js +46 -2
- package/dist/call-graph/extractors/semantic-data-access-scanner.js.map +1 -1
- package/dist/call-graph/extractors/typescript-data-access-extractor.d.ts.map +1 -1
- package/dist/call-graph/extractors/typescript-data-access-extractor.js +23 -10
- package/dist/call-graph/extractors/typescript-data-access-extractor.js.map +1 -1
- package/dist/call-graph/index.d.ts +2 -4
- package/dist/call-graph/index.d.ts.map +1 -1
- package/dist/call-graph/index.js +5 -6
- package/dist/call-graph/index.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -5
- package/dist/index.js.map +1 -1
- package/dist/language-intelligence/base-normalizer.d.ts +68 -0
- package/dist/language-intelligence/base-normalizer.d.ts.map +1 -0
- package/dist/language-intelligence/base-normalizer.js +210 -0
- package/dist/language-intelligence/base-normalizer.js.map +1 -0
- package/dist/language-intelligence/framework-registry.d.ts +89 -0
- package/dist/language-intelligence/framework-registry.d.ts.map +1 -0
- package/dist/language-intelligence/framework-registry.js +165 -0
- package/dist/language-intelligence/framework-registry.js.map +1 -0
- package/dist/language-intelligence/frameworks/aspnet.d.ts +11 -0
- package/dist/language-intelligence/frameworks/aspnet.d.ts.map +1 -0
- package/dist/language-intelligence/frameworks/aspnet.js +325 -0
- package/dist/language-intelligence/frameworks/aspnet.js.map +1 -0
- package/dist/language-intelligence/frameworks/fastapi.d.ts +11 -0
- package/dist/language-intelligence/frameworks/fastapi.d.ts.map +1 -0
- package/dist/language-intelligence/frameworks/fastapi.js +188 -0
- package/dist/language-intelligence/frameworks/fastapi.js.map +1 -0
- package/dist/language-intelligence/frameworks/index.d.ts +32 -0
- package/dist/language-intelligence/frameworks/index.d.ts.map +1 -0
- package/dist/language-intelligence/frameworks/index.js +51 -0
- package/dist/language-intelligence/frameworks/index.js.map +1 -0
- package/dist/language-intelligence/frameworks/laravel.d.ts +12 -0
- package/dist/language-intelligence/frameworks/laravel.d.ts.map +1 -0
- package/dist/language-intelligence/frameworks/laravel.js +194 -0
- package/dist/language-intelligence/frameworks/laravel.js.map +1 -0
- package/dist/language-intelligence/frameworks/nestjs.d.ts +11 -0
- package/dist/language-intelligence/frameworks/nestjs.d.ts.map +1 -0
- package/dist/language-intelligence/frameworks/nestjs.js +307 -0
- package/dist/language-intelligence/frameworks/nestjs.js.map +1 -0
- package/dist/language-intelligence/frameworks/spring.d.ts +11 -0
- package/dist/language-intelligence/frameworks/spring.d.ts.map +1 -0
- package/dist/language-intelligence/frameworks/spring.js +369 -0
- package/dist/language-intelligence/frameworks/spring.js.map +1 -0
- package/dist/language-intelligence/index.d.ts +33 -0
- package/dist/language-intelligence/index.d.ts.map +1 -0
- package/dist/language-intelligence/index.js +37 -0
- package/dist/language-intelligence/index.js.map +1 -0
- package/dist/language-intelligence/language-intelligence.d.ts +99 -0
- package/dist/language-intelligence/language-intelligence.d.ts.map +1 -0
- package/dist/language-intelligence/language-intelligence.js +239 -0
- package/dist/language-intelligence/language-intelligence.js.map +1 -0
- package/dist/language-intelligence/normalizers/csharp-normalizer.d.ts +39 -0
- package/dist/language-intelligence/normalizers/csharp-normalizer.d.ts.map +1 -0
- package/dist/language-intelligence/normalizers/csharp-normalizer.js +86 -0
- package/dist/language-intelligence/normalizers/csharp-normalizer.js.map +1 -0
- package/dist/language-intelligence/normalizers/index.d.ts +25 -0
- package/dist/language-intelligence/normalizers/index.d.ts.map +1 -0
- package/dist/language-intelligence/normalizers/index.js +60 -0
- package/dist/language-intelligence/normalizers/index.js.map +1 -0
- package/dist/language-intelligence/normalizers/java-normalizer.d.ts +39 -0
- package/dist/language-intelligence/normalizers/java-normalizer.d.ts.map +1 -0
- package/dist/language-intelligence/normalizers/java-normalizer.js +96 -0
- package/dist/language-intelligence/normalizers/java-normalizer.js.map +1 -0
- package/dist/language-intelligence/normalizers/php-normalizer.d.ts +39 -0
- package/dist/language-intelligence/normalizers/php-normalizer.d.ts.map +1 -0
- package/dist/language-intelligence/normalizers/php-normalizer.js +86 -0
- package/dist/language-intelligence/normalizers/php-normalizer.js.map +1 -0
- package/dist/language-intelligence/normalizers/python-normalizer.d.ts +39 -0
- package/dist/language-intelligence/normalizers/python-normalizer.d.ts.map +1 -0
- package/dist/language-intelligence/normalizers/python-normalizer.js +95 -0
- package/dist/language-intelligence/normalizers/python-normalizer.js.map +1 -0
- package/dist/language-intelligence/normalizers/typescript-normalizer.d.ts +39 -0
- package/dist/language-intelligence/normalizers/typescript-normalizer.d.ts.map +1 -0
- package/dist/language-intelligence/normalizers/typescript-normalizer.js +84 -0
- package/dist/language-intelligence/normalizers/typescript-normalizer.js.map +1 -0
- package/dist/language-intelligence/types.d.ts +270 -0
- package/dist/language-intelligence/types.d.ts.map +1 -0
- package/dist/language-intelligence/types.js +9 -0
- package/dist/language-intelligence/types.js.map +1 -0
- package/dist/scanner/file-processor-worker.d.ts +66 -0
- package/dist/scanner/file-processor-worker.d.ts.map +1 -0
- package/dist/scanner/file-processor-worker.js +189 -0
- package/dist/scanner/file-processor-worker.js.map +1 -0
- package/dist/scanner/index.d.ts +2 -0
- package/dist/scanner/index.d.ts.map +1 -1
- package/dist/scanner/index.js +2 -0
- package/dist/scanner/index.js.map +1 -1
- package/dist/scanner/threaded-worker-pool.d.ts +182 -0
- package/dist/scanner/threaded-worker-pool.d.ts.map +1 -0
- package/dist/scanner/threaded-worker-pool.js +243 -0
- package/dist/scanner/threaded-worker-pool.js.map +1 -0
- package/dist/store/types.d.ts +6 -3
- package/dist/store/types.d.ts.map +1 -1
- package/dist/store/types.js.map +1 -1
- package/dist/unified-provider/compat/index.d.ts +11 -0
- package/dist/unified-provider/compat/index.d.ts.map +1 -0
- package/dist/unified-provider/compat/index.js +13 -0
- package/dist/unified-provider/compat/index.js.map +1 -0
- package/dist/unified-provider/compat/legacy-extractors.d.ts +63 -0
- package/dist/unified-provider/compat/legacy-extractors.d.ts.map +1 -0
- package/dist/unified-provider/compat/legacy-extractors.js +80 -0
- package/dist/unified-provider/compat/legacy-extractors.js.map +1 -0
- package/dist/unified-provider/compat/legacy-scanner.d.ts +28 -0
- package/dist/unified-provider/compat/legacy-scanner.d.ts.map +1 -0
- package/dist/unified-provider/compat/legacy-scanner.js +31 -0
- package/dist/unified-provider/compat/legacy-scanner.js.map +1 -0
- package/dist/unified-provider/index.d.ts +28 -0
- package/dist/unified-provider/index.d.ts.map +1 -0
- package/dist/unified-provider/index.js +47 -0
- package/dist/unified-provider/index.js.map +1 -0
- package/dist/unified-provider/integration/index.d.ts +9 -0
- package/dist/unified-provider/integration/index.d.ts.map +1 -0
- package/dist/unified-provider/integration/index.js +11 -0
- package/dist/unified-provider/integration/index.js.map +1 -0
- package/dist/unified-provider/integration/unified-data-access-adapter.d.ts +75 -0
- package/dist/unified-provider/integration/unified-data-access-adapter.d.ts.map +1 -0
- package/dist/unified-provider/integration/unified-data-access-adapter.js +210 -0
- package/dist/unified-provider/integration/unified-data-access-adapter.js.map +1 -0
- package/dist/unified-provider/integration/unified-scanner.d.ts +90 -0
- package/dist/unified-provider/integration/unified-scanner.d.ts.map +1 -0
- package/dist/unified-provider/integration/unified-scanner.js +369 -0
- package/dist/unified-provider/integration/unified-scanner.js.map +1 -0
- package/dist/unified-provider/matching/base-matcher.d.ts +80 -0
- package/dist/unified-provider/matching/base-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/base-matcher.js +196 -0
- package/dist/unified-provider/matching/base-matcher.js.map +1 -0
- package/dist/unified-provider/matching/django-matcher.d.ts +32 -0
- package/dist/unified-provider/matching/django-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/django-matcher.js +107 -0
- package/dist/unified-provider/matching/django-matcher.js.map +1 -0
- package/dist/unified-provider/matching/drizzle-matcher.d.ts +25 -0
- package/dist/unified-provider/matching/drizzle-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/drizzle-matcher.js +123 -0
- package/dist/unified-provider/matching/drizzle-matcher.js.map +1 -0
- package/dist/unified-provider/matching/efcore-matcher.d.ts +27 -0
- package/dist/unified-provider/matching/efcore-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/efcore-matcher.js +88 -0
- package/dist/unified-provider/matching/efcore-matcher.js.map +1 -0
- package/dist/unified-provider/matching/eloquent-matcher.d.ts +32 -0
- package/dist/unified-provider/matching/eloquent-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/eloquent-matcher.js +162 -0
- package/dist/unified-provider/matching/eloquent-matcher.js.map +1 -0
- package/dist/unified-provider/matching/index.d.ts +19 -0
- package/dist/unified-provider/matching/index.d.ts.map +1 -0
- package/dist/unified-provider/matching/index.js +24 -0
- package/dist/unified-provider/matching/index.js.map +1 -0
- package/dist/unified-provider/matching/knex-matcher.d.ts +26 -0
- package/dist/unified-provider/matching/knex-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/knex-matcher.js +109 -0
- package/dist/unified-provider/matching/knex-matcher.js.map +1 -0
- package/dist/unified-provider/matching/matcher-registry.d.ts +55 -0
- package/dist/unified-provider/matching/matcher-registry.d.ts.map +1 -0
- package/dist/unified-provider/matching/matcher-registry.js +130 -0
- package/dist/unified-provider/matching/matcher-registry.js.map +1 -0
- package/dist/unified-provider/matching/mongoose-matcher.d.ts +30 -0
- package/dist/unified-provider/matching/mongoose-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/mongoose-matcher.js +132 -0
- package/dist/unified-provider/matching/mongoose-matcher.js.map +1 -0
- package/dist/unified-provider/matching/prisma-matcher.d.ts +31 -0
- package/dist/unified-provider/matching/prisma-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/prisma-matcher.js +123 -0
- package/dist/unified-provider/matching/prisma-matcher.js.map +1 -0
- package/dist/unified-provider/matching/raw-sql-matcher.d.ts +31 -0
- package/dist/unified-provider/matching/raw-sql-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/raw-sql-matcher.js +173 -0
- package/dist/unified-provider/matching/raw-sql-matcher.js.map +1 -0
- package/dist/unified-provider/matching/sequelize-matcher.d.ts +28 -0
- package/dist/unified-provider/matching/sequelize-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/sequelize-matcher.js +132 -0
- package/dist/unified-provider/matching/sequelize-matcher.js.map +1 -0
- package/dist/unified-provider/matching/spring-data-matcher.d.ts +32 -0
- package/dist/unified-provider/matching/spring-data-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/spring-data-matcher.js +112 -0
- package/dist/unified-provider/matching/spring-data-matcher.js.map +1 -0
- package/dist/unified-provider/matching/sqlalchemy-matcher.d.ts +32 -0
- package/dist/unified-provider/matching/sqlalchemy-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/sqlalchemy-matcher.js +201 -0
- package/dist/unified-provider/matching/sqlalchemy-matcher.js.map +1 -0
- package/dist/unified-provider/matching/supabase-matcher.d.ts +27 -0
- package/dist/unified-provider/matching/supabase-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/supabase-matcher.js +122 -0
- package/dist/unified-provider/matching/supabase-matcher.js.map +1 -0
- package/dist/unified-provider/matching/typeorm-matcher.d.ts +32 -0
- package/dist/unified-provider/matching/typeorm-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/typeorm-matcher.js +169 -0
- package/dist/unified-provider/matching/typeorm-matcher.js.map +1 -0
- package/dist/unified-provider/migration/deprecated-extractors.d.ts +104 -0
- package/dist/unified-provider/migration/deprecated-extractors.d.ts.map +1 -0
- package/dist/unified-provider/migration/deprecated-extractors.js +129 -0
- package/dist/unified-provider/migration/deprecated-extractors.js.map +1 -0
- package/dist/unified-provider/migration/deprecated-scanner.d.ts +40 -0
- package/dist/unified-provider/migration/deprecated-scanner.d.ts.map +1 -0
- package/dist/unified-provider/migration/deprecated-scanner.js +49 -0
- package/dist/unified-provider/migration/deprecated-scanner.js.map +1 -0
- package/dist/unified-provider/migration/index.d.ts +41 -0
- package/dist/unified-provider/migration/index.d.ts.map +1 -0
- package/dist/unified-provider/migration/index.js +43 -0
- package/dist/unified-provider/migration/index.js.map +1 -0
- package/dist/unified-provider/normalization/base-normalizer.d.ts +188 -0
- package/dist/unified-provider/normalization/base-normalizer.d.ts.map +1 -0
- package/dist/unified-provider/normalization/base-normalizer.js +339 -0
- package/dist/unified-provider/normalization/base-normalizer.js.map +1 -0
- package/dist/unified-provider/normalization/csharp-normalizer.d.ts +58 -0
- package/dist/unified-provider/normalization/csharp-normalizer.d.ts.map +1 -0
- package/dist/unified-provider/normalization/csharp-normalizer.js +467 -0
- package/dist/unified-provider/normalization/csharp-normalizer.js.map +1 -0
- package/dist/unified-provider/normalization/index.d.ts +23 -0
- package/dist/unified-provider/normalization/index.d.ts.map +1 -0
- package/dist/unified-provider/normalization/index.js +62 -0
- package/dist/unified-provider/normalization/index.js.map +1 -0
- package/dist/unified-provider/normalization/java-normalizer.d.ts +54 -0
- package/dist/unified-provider/normalization/java-normalizer.d.ts.map +1 -0
- package/dist/unified-provider/normalization/java-normalizer.js +453 -0
- package/dist/unified-provider/normalization/java-normalizer.js.map +1 -0
- package/dist/unified-provider/normalization/php-normalizer.d.ts +54 -0
- package/dist/unified-provider/normalization/php-normalizer.d.ts.map +1 -0
- package/dist/unified-provider/normalization/php-normalizer.js +489 -0
- package/dist/unified-provider/normalization/php-normalizer.js.map +1 -0
- package/dist/unified-provider/normalization/python-normalizer.d.ts +61 -0
- package/dist/unified-provider/normalization/python-normalizer.d.ts.map +1 -0
- package/dist/unified-provider/normalization/python-normalizer.js +548 -0
- package/dist/unified-provider/normalization/python-normalizer.js.map +1 -0
- package/dist/unified-provider/normalization/typescript-normalizer.d.ts +60 -0
- package/dist/unified-provider/normalization/typescript-normalizer.d.ts.map +1 -0
- package/dist/unified-provider/normalization/typescript-normalizer.js +608 -0
- package/dist/unified-provider/normalization/typescript-normalizer.js.map +1 -0
- package/dist/unified-provider/parsing/index.d.ts +5 -0
- package/dist/unified-provider/parsing/index.d.ts.map +1 -0
- package/dist/unified-provider/parsing/index.js +5 -0
- package/dist/unified-provider/parsing/index.js.map +1 -0
- package/dist/unified-provider/parsing/parser-registry.d.ts +70 -0
- package/dist/unified-provider/parsing/parser-registry.d.ts.map +1 -0
- package/dist/unified-provider/parsing/parser-registry.js +260 -0
- package/dist/unified-provider/parsing/parser-registry.js.map +1 -0
- package/dist/unified-provider/provider/index.d.ts +5 -0
- package/dist/unified-provider/provider/index.d.ts.map +1 -0
- package/dist/unified-provider/provider/index.js +5 -0
- package/dist/unified-provider/provider/index.js.map +1 -0
- package/dist/unified-provider/provider/unified-language-provider.d.ts +56 -0
- package/dist/unified-provider/provider/unified-language-provider.d.ts.map +1 -0
- package/dist/unified-provider/provider/unified-language-provider.js +212 -0
- package/dist/unified-provider/provider/unified-language-provider.js.map +1 -0
- package/dist/unified-provider/types.d.ts +389 -0
- package/dist/unified-provider/types.d.ts.map +1 -0
- package/dist/unified-provider/types.js +9 -0
- package/dist/unified-provider/types.js.map +1 -0
- package/package.json +21 -17
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deprecated Scanner Wrapper
|
|
3
|
+
*
|
|
4
|
+
* Provides backward compatibility for code using the old SemanticDataAccessScanner.
|
|
5
|
+
* This wrapper delegates to the new UnifiedScanner while maintaining the same interface.
|
|
6
|
+
*
|
|
7
|
+
* @deprecated Use UnifiedScanner from './integration/unified-scanner.js' instead.
|
|
8
|
+
* This wrapper will be removed in a future major version.
|
|
9
|
+
*/
|
|
10
|
+
import { UnifiedScanner, createUnifiedScanner, detectProjectStack, } from '../integration/unified-scanner.js';
|
|
11
|
+
export {};
|
|
12
|
+
/**
|
|
13
|
+
* @deprecated Use UnifiedScanner instead.
|
|
14
|
+
* This class is a compatibility wrapper that delegates to UnifiedScanner.
|
|
15
|
+
*/
|
|
16
|
+
export class SemanticDataAccessScanner {
|
|
17
|
+
scanner;
|
|
18
|
+
constructor(config) {
|
|
19
|
+
// Log deprecation warning in development
|
|
20
|
+
if (process.env['NODE_ENV'] !== 'production') {
|
|
21
|
+
console.warn('[DEPRECATED] SemanticDataAccessScanner is deprecated. ' +
|
|
22
|
+
'Use UnifiedScanner from "@driftdetect/core/unified-provider" instead.');
|
|
23
|
+
}
|
|
24
|
+
this.scanner = createUnifiedScanner(config);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Scan files for data access patterns
|
|
28
|
+
* @deprecated Use UnifiedScanner.scanFiles() instead
|
|
29
|
+
*/
|
|
30
|
+
async scanFiles(files) {
|
|
31
|
+
return this.scanner.scanFiles(files);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Scan directory with glob patterns
|
|
35
|
+
* @deprecated Use UnifiedScanner.scanDirectory() instead
|
|
36
|
+
*/
|
|
37
|
+
async scanDirectory(options = {}) {
|
|
38
|
+
return this.scanner.scanDirectory(options);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @deprecated Use createUnifiedScanner instead.
|
|
43
|
+
*/
|
|
44
|
+
export function createSemanticDataAccessScanner(config) {
|
|
45
|
+
return new SemanticDataAccessScanner(config);
|
|
46
|
+
}
|
|
47
|
+
// Re-export detectProjectStack (not deprecated, same implementation)
|
|
48
|
+
export { detectProjectStack };
|
|
49
|
+
//# sourceMappingURL=deprecated-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deprecated-scanner.js","sourceRoot":"","sources":["../../../src/unified-provider/migration/deprecated-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,kBAAkB,GAInB,MAAM,mCAAmC,CAAC;AAK3C,OAAO,EAAsB,CAAC;AAE9B;;;GAGG;AACH,MAAM,OAAO,yBAAyB;IACnB,OAAO,CAAiB;IAEzC,YAAY,MAA6B;QACvC,yCAAyC;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,YAAY,EAAE,CAAC;YAC7C,OAAO,CAAC,IAAI,CACV,wDAAwD;gBACxD,uEAAuE,CACxE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,KAAe;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,UAGhB,EAAE;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,+BAA+B,CAAC,MAA6B;IAC3E,OAAO,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,qEAAqE;AACrE,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration Module
|
|
3
|
+
*
|
|
4
|
+
* Provides backward-compatible wrappers for deprecated APIs.
|
|
5
|
+
* These wrappers delegate to the new UnifiedLanguageProvider while
|
|
6
|
+
* maintaining the same interface as the original implementations.
|
|
7
|
+
*
|
|
8
|
+
* Migration Guide:
|
|
9
|
+
* ================
|
|
10
|
+
*
|
|
11
|
+
* OLD (deprecated):
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { SemanticDataAccessScanner, createSemanticDataAccessScanner } from 'driftdetect-core';
|
|
14
|
+
* const scanner = createSemanticDataAccessScanner({ rootDir: '/path' });
|
|
15
|
+
* const result = await scanner.scanDirectory();
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* NEW (recommended):
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { UnifiedScanner, createUnifiedScanner } from 'driftdetect-core';
|
|
21
|
+
* const scanner = createUnifiedScanner({ rootDir: '/path' });
|
|
22
|
+
* const result = await scanner.scanDirectory();
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* OLD (deprecated):
|
|
26
|
+
* ```typescript
|
|
27
|
+
* import { TypeScriptDataAccessExtractor } from 'driftdetect-core';
|
|
28
|
+
* const extractor = new TypeScriptDataAccessExtractor();
|
|
29
|
+
* const result = extractor.extract(source, filePath);
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* NEW (recommended):
|
|
33
|
+
* ```typescript
|
|
34
|
+
* import { UnifiedDataAccessAdapter, createUnifiedDataAccessAdapter } from 'driftdetect-core';
|
|
35
|
+
* const adapter = createUnifiedDataAccessAdapter();
|
|
36
|
+
* const result = await adapter.extract(source, filePath);
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export { SemanticDataAccessScanner, createSemanticDataAccessScanner, detectProjectStack, type SemanticScannerConfig, type SemanticScanResult, type DetectedStack, } from './deprecated-scanner.js';
|
|
40
|
+
export { TypeScriptDataAccessExtractor, PythonDataAccessExtractor, CSharpDataAccessExtractor, JavaDataAccessExtractor, PhpDataAccessExtractor, createTypeScriptDataAccessExtractor, createPythonDataAccessExtractor, createCSharpDataAccessExtractor, createJavaDataAccessExtractor, createPhpDataAccessExtractor, createDataAccessExtractors, type DataAccessExtractionResult, } from './deprecated-extractors.js';
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/unified-provider/migration/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAGH,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,kBAAkB,EAClB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,aAAa,GACnB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,EACtB,mCAAmC,EACnC,+BAA+B,EAC/B,+BAA+B,EAC/B,6BAA6B,EAC7B,4BAA4B,EAC5B,0BAA0B,EAC1B,KAAK,0BAA0B,GAChC,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration Module
|
|
3
|
+
*
|
|
4
|
+
* Provides backward-compatible wrappers for deprecated APIs.
|
|
5
|
+
* These wrappers delegate to the new UnifiedLanguageProvider while
|
|
6
|
+
* maintaining the same interface as the original implementations.
|
|
7
|
+
*
|
|
8
|
+
* Migration Guide:
|
|
9
|
+
* ================
|
|
10
|
+
*
|
|
11
|
+
* OLD (deprecated):
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { SemanticDataAccessScanner, createSemanticDataAccessScanner } from 'driftdetect-core';
|
|
14
|
+
* const scanner = createSemanticDataAccessScanner({ rootDir: '/path' });
|
|
15
|
+
* const result = await scanner.scanDirectory();
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* NEW (recommended):
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { UnifiedScanner, createUnifiedScanner } from 'driftdetect-core';
|
|
21
|
+
* const scanner = createUnifiedScanner({ rootDir: '/path' });
|
|
22
|
+
* const result = await scanner.scanDirectory();
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* OLD (deprecated):
|
|
26
|
+
* ```typescript
|
|
27
|
+
* import { TypeScriptDataAccessExtractor } from 'driftdetect-core';
|
|
28
|
+
* const extractor = new TypeScriptDataAccessExtractor();
|
|
29
|
+
* const result = extractor.extract(source, filePath);
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* NEW (recommended):
|
|
33
|
+
* ```typescript
|
|
34
|
+
* import { UnifiedDataAccessAdapter, createUnifiedDataAccessAdapter } from 'driftdetect-core';
|
|
35
|
+
* const adapter = createUnifiedDataAccessAdapter();
|
|
36
|
+
* const result = await adapter.extract(source, filePath);
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
// Deprecated Scanner (wraps UnifiedScanner)
|
|
40
|
+
export { SemanticDataAccessScanner, createSemanticDataAccessScanner, detectProjectStack, } from './deprecated-scanner.js';
|
|
41
|
+
// Deprecated Extractors (wrap UnifiedDataAccessAdapter)
|
|
42
|
+
export { TypeScriptDataAccessExtractor, PythonDataAccessExtractor, CSharpDataAccessExtractor, JavaDataAccessExtractor, PhpDataAccessExtractor, createTypeScriptDataAccessExtractor, createPythonDataAccessExtractor, createCSharpDataAccessExtractor, createJavaDataAccessExtractor, createPhpDataAccessExtractor, createDataAccessExtractors, } from './deprecated-extractors.js';
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/unified-provider/migration/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,4CAA4C;AAC5C,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,kBAAkB,GAInB,MAAM,yBAAyB,CAAC;AAEjC,wDAAwD;AACxD,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,EACtB,mCAAmC,EACnC,+BAA+B,EAC/B,+BAA+B,EAC/B,6BAA6B,EAC7B,4BAA4B,EAC5B,0BAA0B,GAE3B,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Call Chain Normalizer
|
|
3
|
+
*
|
|
4
|
+
* Shared logic for all language-specific normalizers.
|
|
5
|
+
* Provides common utilities for AST traversal and normalization.
|
|
6
|
+
*/
|
|
7
|
+
import type { TreeSitterNode } from '../../parsers/tree-sitter/types.js';
|
|
8
|
+
import type { UnifiedLanguage, UnifiedCallChain, CallChainSegment, NormalizedArg, UnifiedFunction, UnifiedClass, UnifiedImport, UnifiedExport, UnifiedParameter, CallChainNormalizer } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Base normalizer with shared functionality
|
|
11
|
+
*/
|
|
12
|
+
export declare abstract class BaseNormalizer implements CallChainNormalizer {
|
|
13
|
+
abstract readonly language: UnifiedLanguage;
|
|
14
|
+
/**
|
|
15
|
+
* Extract and normalize call chains from an AST node
|
|
16
|
+
*/
|
|
17
|
+
abstract normalizeCallChains(rootNode: TreeSitterNode, source: string, filePath: string): UnifiedCallChain[];
|
|
18
|
+
/**
|
|
19
|
+
* Extract functions from an AST node
|
|
20
|
+
*/
|
|
21
|
+
abstract extractFunctions(rootNode: TreeSitterNode, source: string, filePath: string): UnifiedFunction[];
|
|
22
|
+
/**
|
|
23
|
+
* Extract classes from an AST node
|
|
24
|
+
*/
|
|
25
|
+
abstract extractClasses(rootNode: TreeSitterNode, source: string, filePath: string): UnifiedClass[];
|
|
26
|
+
/**
|
|
27
|
+
* Extract imports from an AST node
|
|
28
|
+
*/
|
|
29
|
+
abstract extractImports(rootNode: TreeSitterNode, source: string, filePath: string): UnifiedImport[];
|
|
30
|
+
/**
|
|
31
|
+
* Extract exports from an AST node
|
|
32
|
+
*/
|
|
33
|
+
abstract extractExports(rootNode: TreeSitterNode, source: string, filePath: string): UnifiedExport[];
|
|
34
|
+
/**
|
|
35
|
+
* Create a call chain segment
|
|
36
|
+
*/
|
|
37
|
+
protected createSegment(name: string, isCall: boolean, args: NormalizedArg[], line: number, column: number): CallChainSegment;
|
|
38
|
+
/**
|
|
39
|
+
* Create a unified call chain
|
|
40
|
+
*/
|
|
41
|
+
protected createCallChain(receiver: string, segments: CallChainSegment[], fullExpression: string, file: string, line: number, column: number, endLine: number, endColumn: number, rawNode?: TreeSitterNode): UnifiedCallChain;
|
|
42
|
+
/**
|
|
43
|
+
* Create a normalized argument from a string literal
|
|
44
|
+
*/
|
|
45
|
+
protected createStringArg(value: string, line: number, column: number): NormalizedArg;
|
|
46
|
+
/**
|
|
47
|
+
* Create a normalized argument from a number literal
|
|
48
|
+
*/
|
|
49
|
+
protected createNumberArg(value: string, line: number, column: number): NormalizedArg;
|
|
50
|
+
/**
|
|
51
|
+
* Create a normalized argument from a boolean literal
|
|
52
|
+
*/
|
|
53
|
+
protected createBooleanArg(value: string, line: number, column: number): NormalizedArg;
|
|
54
|
+
/**
|
|
55
|
+
* Create a normalized argument from an identifier
|
|
56
|
+
*/
|
|
57
|
+
protected createIdentifierArg(value: string, line: number, column: number): NormalizedArg;
|
|
58
|
+
/**
|
|
59
|
+
* Create a normalized argument from an object literal
|
|
60
|
+
*/
|
|
61
|
+
protected createObjectArg(value: string, properties: Record<string, NormalizedArg>, line: number, column: number): NormalizedArg;
|
|
62
|
+
/**
|
|
63
|
+
* Create a normalized argument from an array literal
|
|
64
|
+
*/
|
|
65
|
+
protected createArrayArg(value: string, elements: NormalizedArg[], line: number, column: number): NormalizedArg;
|
|
66
|
+
/**
|
|
67
|
+
* Create an unknown argument
|
|
68
|
+
*/
|
|
69
|
+
protected createUnknownArg(value: string, line: number, column: number): NormalizedArg;
|
|
70
|
+
/**
|
|
71
|
+
* Create a unified function
|
|
72
|
+
*/
|
|
73
|
+
protected createFunction(opts: {
|
|
74
|
+
name: string;
|
|
75
|
+
qualifiedName?: string | undefined;
|
|
76
|
+
file: string;
|
|
77
|
+
startLine: number;
|
|
78
|
+
endLine: number;
|
|
79
|
+
startColumn?: number | undefined;
|
|
80
|
+
endColumn?: number | undefined;
|
|
81
|
+
parameters?: UnifiedParameter[] | undefined;
|
|
82
|
+
returnType?: string | undefined;
|
|
83
|
+
isMethod?: boolean | undefined;
|
|
84
|
+
isStatic?: boolean | undefined;
|
|
85
|
+
isExported?: boolean | undefined;
|
|
86
|
+
isConstructor?: boolean | undefined;
|
|
87
|
+
isAsync?: boolean | undefined;
|
|
88
|
+
className?: string | undefined;
|
|
89
|
+
decorators?: string[] | undefined;
|
|
90
|
+
bodyStartLine?: number | undefined;
|
|
91
|
+
bodyEndLine?: number | undefined;
|
|
92
|
+
}): UnifiedFunction;
|
|
93
|
+
/**
|
|
94
|
+
* Create a unified class
|
|
95
|
+
*/
|
|
96
|
+
protected createClass(opts: {
|
|
97
|
+
name: string;
|
|
98
|
+
file: string;
|
|
99
|
+
startLine: number;
|
|
100
|
+
endLine: number;
|
|
101
|
+
baseClasses?: string[];
|
|
102
|
+
methods?: string[];
|
|
103
|
+
isExported?: boolean;
|
|
104
|
+
}): UnifiedClass;
|
|
105
|
+
/**
|
|
106
|
+
* Create a unified import
|
|
107
|
+
*/
|
|
108
|
+
protected createImport(opts: {
|
|
109
|
+
source: string;
|
|
110
|
+
names: Array<{
|
|
111
|
+
imported: string;
|
|
112
|
+
local?: string;
|
|
113
|
+
isDefault?: boolean;
|
|
114
|
+
isNamespace?: boolean;
|
|
115
|
+
}>;
|
|
116
|
+
line: number;
|
|
117
|
+
isTypeOnly?: boolean;
|
|
118
|
+
}): UnifiedImport;
|
|
119
|
+
/**
|
|
120
|
+
* Create a unified export
|
|
121
|
+
*/
|
|
122
|
+
protected createExport(opts: {
|
|
123
|
+
name: string;
|
|
124
|
+
isDefault?: boolean | undefined;
|
|
125
|
+
isReExport?: boolean | undefined;
|
|
126
|
+
source?: string | undefined;
|
|
127
|
+
line: number;
|
|
128
|
+
}): UnifiedExport;
|
|
129
|
+
/**
|
|
130
|
+
* Create a parameter
|
|
131
|
+
*/
|
|
132
|
+
protected createParameter(name: string, type?: string, hasDefault?: boolean, isRest?: boolean): UnifiedParameter;
|
|
133
|
+
/**
|
|
134
|
+
* Find all nodes of a specific type
|
|
135
|
+
*/
|
|
136
|
+
protected findNodesOfType(node: TreeSitterNode, types: string[]): TreeSitterNode[];
|
|
137
|
+
/**
|
|
138
|
+
* Traverse all nodes in the tree
|
|
139
|
+
*/
|
|
140
|
+
protected traverseNode(node: TreeSitterNode, callback: (node: TreeSitterNode) => void): void;
|
|
141
|
+
/**
|
|
142
|
+
* Get child by field name (type-safe wrapper)
|
|
143
|
+
*/
|
|
144
|
+
protected getChildByField(node: TreeSitterNode, fieldName: string): TreeSitterNode | null;
|
|
145
|
+
/**
|
|
146
|
+
* Get all children of a specific type
|
|
147
|
+
*/
|
|
148
|
+
protected getChildrenOfType(node: TreeSitterNode, type: string): TreeSitterNode[];
|
|
149
|
+
/**
|
|
150
|
+
* Check if node has a specific child type
|
|
151
|
+
*/
|
|
152
|
+
protected hasChildOfType(node: TreeSitterNode, type: string): boolean;
|
|
153
|
+
/**
|
|
154
|
+
* Get text content of a node, handling null
|
|
155
|
+
*/
|
|
156
|
+
protected getNodeText(node: TreeSitterNode | null): string;
|
|
157
|
+
/**
|
|
158
|
+
* Get position info from a node
|
|
159
|
+
*/
|
|
160
|
+
protected getPosition(node: TreeSitterNode): {
|
|
161
|
+
line: number;
|
|
162
|
+
column: number;
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Get end position info from a node
|
|
166
|
+
*/
|
|
167
|
+
protected getEndPosition(node: TreeSitterNode): {
|
|
168
|
+
line: number;
|
|
169
|
+
column: number;
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* Extract string value from various string node types
|
|
173
|
+
*/
|
|
174
|
+
protected extractStringValue(node: TreeSitterNode): string | null;
|
|
175
|
+
/**
|
|
176
|
+
* Remove quotes from a string
|
|
177
|
+
*/
|
|
178
|
+
protected unquoteString(str: string): string;
|
|
179
|
+
/**
|
|
180
|
+
* Check if a string looks like a table name
|
|
181
|
+
*/
|
|
182
|
+
protected looksLikeTableName(str: string): boolean;
|
|
183
|
+
/**
|
|
184
|
+
* Infer table name from a variable/class name
|
|
185
|
+
*/
|
|
186
|
+
protected inferTableName(name: string): string;
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=base-normalizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-normalizer.d.ts","sourceRoot":"","sources":["../../../src/unified-provider/normalization/base-normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Call Chain Normalizer
|
|
3
|
+
*
|
|
4
|
+
* Shared logic for all language-specific normalizers.
|
|
5
|
+
* Provides common utilities for AST traversal and normalization.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Base normalizer with shared functionality
|
|
9
|
+
*/
|
|
10
|
+
export class BaseNormalizer {
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Shared Utilities
|
|
13
|
+
// ============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Create a call chain segment
|
|
16
|
+
*/
|
|
17
|
+
createSegment(name, isCall, args, line, column) {
|
|
18
|
+
return { name, isCall, args, line, column };
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Create a unified call chain
|
|
22
|
+
*/
|
|
23
|
+
createCallChain(receiver, segments, fullExpression, file, line, column, endLine, endColumn, rawNode) {
|
|
24
|
+
return {
|
|
25
|
+
receiver,
|
|
26
|
+
segments,
|
|
27
|
+
fullExpression,
|
|
28
|
+
file,
|
|
29
|
+
line,
|
|
30
|
+
column,
|
|
31
|
+
endLine,
|
|
32
|
+
endColumn,
|
|
33
|
+
language: this.language,
|
|
34
|
+
rawNode,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create a normalized argument from a string literal
|
|
39
|
+
*/
|
|
40
|
+
createStringArg(value, line, column) {
|
|
41
|
+
// Remove quotes
|
|
42
|
+
const stringValue = value.replace(/^['"`]|['"`]$/g, '');
|
|
43
|
+
return {
|
|
44
|
+
type: 'string',
|
|
45
|
+
value,
|
|
46
|
+
stringValue,
|
|
47
|
+
line,
|
|
48
|
+
column,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Create a normalized argument from a number literal
|
|
53
|
+
*/
|
|
54
|
+
createNumberArg(value, line, column) {
|
|
55
|
+
return {
|
|
56
|
+
type: 'number',
|
|
57
|
+
value,
|
|
58
|
+
numberValue: parseFloat(value),
|
|
59
|
+
line,
|
|
60
|
+
column,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Create a normalized argument from a boolean literal
|
|
65
|
+
*/
|
|
66
|
+
createBooleanArg(value, line, column) {
|
|
67
|
+
return {
|
|
68
|
+
type: 'boolean',
|
|
69
|
+
value,
|
|
70
|
+
booleanValue: value.toLowerCase() === 'true',
|
|
71
|
+
line,
|
|
72
|
+
column,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Create a normalized argument from an identifier
|
|
77
|
+
*/
|
|
78
|
+
createIdentifierArg(value, line, column) {
|
|
79
|
+
return {
|
|
80
|
+
type: 'identifier',
|
|
81
|
+
value,
|
|
82
|
+
line,
|
|
83
|
+
column,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Create a normalized argument from an object literal
|
|
88
|
+
*/
|
|
89
|
+
createObjectArg(value, properties, line, column) {
|
|
90
|
+
return {
|
|
91
|
+
type: 'object',
|
|
92
|
+
value,
|
|
93
|
+
properties,
|
|
94
|
+
line,
|
|
95
|
+
column,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Create a normalized argument from an array literal
|
|
100
|
+
*/
|
|
101
|
+
createArrayArg(value, elements, line, column) {
|
|
102
|
+
return {
|
|
103
|
+
type: 'array',
|
|
104
|
+
value,
|
|
105
|
+
elements,
|
|
106
|
+
line,
|
|
107
|
+
column,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Create an unknown argument
|
|
112
|
+
*/
|
|
113
|
+
createUnknownArg(value, line, column) {
|
|
114
|
+
return {
|
|
115
|
+
type: 'unknown',
|
|
116
|
+
value,
|
|
117
|
+
line,
|
|
118
|
+
column,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Create a unified function
|
|
123
|
+
*/
|
|
124
|
+
createFunction(opts) {
|
|
125
|
+
return {
|
|
126
|
+
name: opts.name,
|
|
127
|
+
qualifiedName: opts.qualifiedName ?? opts.name,
|
|
128
|
+
file: opts.file,
|
|
129
|
+
startLine: opts.startLine,
|
|
130
|
+
endLine: opts.endLine,
|
|
131
|
+
startColumn: opts.startColumn ?? 0,
|
|
132
|
+
endColumn: opts.endColumn ?? 0,
|
|
133
|
+
parameters: opts.parameters ?? [],
|
|
134
|
+
returnType: opts.returnType,
|
|
135
|
+
isMethod: opts.isMethod ?? false,
|
|
136
|
+
isStatic: opts.isStatic ?? false,
|
|
137
|
+
isExported: opts.isExported ?? false,
|
|
138
|
+
isConstructor: opts.isConstructor ?? false,
|
|
139
|
+
isAsync: opts.isAsync ?? false,
|
|
140
|
+
className: opts.className,
|
|
141
|
+
decorators: opts.decorators ?? [],
|
|
142
|
+
bodyStartLine: opts.bodyStartLine ?? opts.startLine,
|
|
143
|
+
bodyEndLine: opts.bodyEndLine ?? opts.endLine,
|
|
144
|
+
language: this.language,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Create a unified class
|
|
149
|
+
*/
|
|
150
|
+
createClass(opts) {
|
|
151
|
+
return {
|
|
152
|
+
name: opts.name,
|
|
153
|
+
file: opts.file,
|
|
154
|
+
startLine: opts.startLine,
|
|
155
|
+
endLine: opts.endLine,
|
|
156
|
+
baseClasses: opts.baseClasses ?? [],
|
|
157
|
+
methods: opts.methods ?? [],
|
|
158
|
+
isExported: opts.isExported ?? false,
|
|
159
|
+
language: this.language,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Create a unified import
|
|
164
|
+
*/
|
|
165
|
+
createImport(opts) {
|
|
166
|
+
return {
|
|
167
|
+
source: opts.source,
|
|
168
|
+
names: opts.names.map(n => ({
|
|
169
|
+
imported: n.imported,
|
|
170
|
+
local: n.local ?? n.imported,
|
|
171
|
+
isDefault: n.isDefault ?? false,
|
|
172
|
+
isNamespace: n.isNamespace ?? false,
|
|
173
|
+
})),
|
|
174
|
+
line: opts.line,
|
|
175
|
+
isTypeOnly: opts.isTypeOnly ?? false,
|
|
176
|
+
language: this.language,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Create a unified export
|
|
181
|
+
*/
|
|
182
|
+
createExport(opts) {
|
|
183
|
+
return {
|
|
184
|
+
name: opts.name,
|
|
185
|
+
isDefault: opts.isDefault ?? false,
|
|
186
|
+
isReExport: opts.isReExport ?? false,
|
|
187
|
+
source: opts.source,
|
|
188
|
+
line: opts.line,
|
|
189
|
+
language: this.language,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Create a parameter
|
|
194
|
+
*/
|
|
195
|
+
createParameter(name, type, hasDefault = false, isRest = false) {
|
|
196
|
+
return { name, type, hasDefault, isRest };
|
|
197
|
+
}
|
|
198
|
+
// ============================================================================
|
|
199
|
+
// AST Traversal Utilities
|
|
200
|
+
// ============================================================================
|
|
201
|
+
/**
|
|
202
|
+
* Find all nodes of a specific type
|
|
203
|
+
*/
|
|
204
|
+
findNodesOfType(node, types) {
|
|
205
|
+
const results = [];
|
|
206
|
+
this.traverseNode(node, n => {
|
|
207
|
+
if (types.includes(n.type)) {
|
|
208
|
+
results.push(n);
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
return results;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Traverse all nodes in the tree
|
|
215
|
+
*/
|
|
216
|
+
traverseNode(node, callback) {
|
|
217
|
+
callback(node);
|
|
218
|
+
for (const child of node.children) {
|
|
219
|
+
this.traverseNode(child, callback);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Get child by field name (type-safe wrapper)
|
|
224
|
+
*/
|
|
225
|
+
getChildByField(node, fieldName) {
|
|
226
|
+
return node.childForFieldName(fieldName) ?? null;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Get all children of a specific type
|
|
230
|
+
*/
|
|
231
|
+
getChildrenOfType(node, type) {
|
|
232
|
+
return node.children.filter(c => c.type === type);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Check if node has a specific child type
|
|
236
|
+
*/
|
|
237
|
+
hasChildOfType(node, type) {
|
|
238
|
+
return node.children.some(c => c.type === type);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get text content of a node, handling null
|
|
242
|
+
*/
|
|
243
|
+
getNodeText(node) {
|
|
244
|
+
return node?.text ?? '';
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Get position info from a node
|
|
248
|
+
*/
|
|
249
|
+
getPosition(node) {
|
|
250
|
+
return {
|
|
251
|
+
line: node.startPosition.row + 1,
|
|
252
|
+
column: node.startPosition.column,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Get end position info from a node
|
|
257
|
+
*/
|
|
258
|
+
getEndPosition(node) {
|
|
259
|
+
return {
|
|
260
|
+
line: node.endPosition.row + 1,
|
|
261
|
+
column: node.endPosition.column,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
// ============================================================================
|
|
265
|
+
// String Extraction Utilities
|
|
266
|
+
// ============================================================================
|
|
267
|
+
/**
|
|
268
|
+
* Extract string value from various string node types
|
|
269
|
+
*/
|
|
270
|
+
extractStringValue(node) {
|
|
271
|
+
const type = node.type;
|
|
272
|
+
// Common string types across languages
|
|
273
|
+
if (type === 'string' || type === 'string_literal' ||
|
|
274
|
+
type === 'interpreted_string_literal' || type === 'raw_string_literal') {
|
|
275
|
+
return this.unquoteString(node.text);
|
|
276
|
+
}
|
|
277
|
+
// Template strings
|
|
278
|
+
if (type === 'template_string' || type === 'template_literal') {
|
|
279
|
+
return this.unquoteString(node.text);
|
|
280
|
+
}
|
|
281
|
+
// Python strings
|
|
282
|
+
if (type === 'string_content') {
|
|
283
|
+
return node.text;
|
|
284
|
+
}
|
|
285
|
+
// Check for string child
|
|
286
|
+
const stringChild = node.children.find(c => c.type === 'string_content' ||
|
|
287
|
+
c.type === 'string_fragment' ||
|
|
288
|
+
c.type === 'escape_sequence');
|
|
289
|
+
if (stringChild) {
|
|
290
|
+
return stringChild.text;
|
|
291
|
+
}
|
|
292
|
+
return null;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Remove quotes from a string
|
|
296
|
+
*/
|
|
297
|
+
unquoteString(str) {
|
|
298
|
+
// Handle triple quotes (Python)
|
|
299
|
+
if (str.startsWith('"""') || str.startsWith("'''")) {
|
|
300
|
+
return str.slice(3, -3);
|
|
301
|
+
}
|
|
302
|
+
// Handle single/double quotes and backticks
|
|
303
|
+
if (str.startsWith('"') || str.startsWith("'") || str.startsWith('`')) {
|
|
304
|
+
return str.slice(1, -1);
|
|
305
|
+
}
|
|
306
|
+
return str;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Check if a string looks like a table name
|
|
310
|
+
*/
|
|
311
|
+
looksLikeTableName(str) {
|
|
312
|
+
// Table names are typically lowercase, snake_case, and don't contain spaces
|
|
313
|
+
return /^[a-z][a-z0-9_]*$/i.test(str) && !str.includes(' ');
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Infer table name from a variable/class name
|
|
317
|
+
*/
|
|
318
|
+
inferTableName(name) {
|
|
319
|
+
// Common patterns: userRepository -> users, UserModel -> users
|
|
320
|
+
const cleaned = name
|
|
321
|
+
.replace(/Repository$/i, '')
|
|
322
|
+
.replace(/Model$/i, '')
|
|
323
|
+
.replace(/Service$/i, '')
|
|
324
|
+
.replace(/DAO$/i, '')
|
|
325
|
+
.replace(/Entity$/i, '')
|
|
326
|
+
.replace(/^_+/, '');
|
|
327
|
+
// Convert to snake_case
|
|
328
|
+
const snakeCase = cleaned
|
|
329
|
+
.replace(/([A-Z])/g, '_$1')
|
|
330
|
+
.toLowerCase()
|
|
331
|
+
.replace(/^_/, '');
|
|
332
|
+
// Simple pluralization
|
|
333
|
+
if (!snakeCase.endsWith('s')) {
|
|
334
|
+
return snakeCase + 's';
|
|
335
|
+
}
|
|
336
|
+
return snakeCase;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=base-normalizer.js.map
|