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,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Language Normalizer
|
|
3
|
+
*
|
|
4
|
+
* Abstract base class for language-specific normalizers.
|
|
5
|
+
* Provides common functionality for semantic normalization.
|
|
6
|
+
*/
|
|
7
|
+
import { getFrameworkRegistry } from './framework-registry.js';
|
|
8
|
+
/**
|
|
9
|
+
* Abstract base class for language normalizers
|
|
10
|
+
*/
|
|
11
|
+
export class BaseLanguageNormalizer {
|
|
12
|
+
/**
|
|
13
|
+
* Normalize an extraction result
|
|
14
|
+
*/
|
|
15
|
+
normalize(source, filePath) {
|
|
16
|
+
// Get raw extraction from existing extractor
|
|
17
|
+
const raw = this.extractRaw(source, filePath);
|
|
18
|
+
// Detect frameworks in use
|
|
19
|
+
const detectedFrameworks = this.detectFrameworks(source);
|
|
20
|
+
// Normalize each function
|
|
21
|
+
const functions = raw.functions.map(fn => this.normalizeFunction(fn, detectedFrameworks));
|
|
22
|
+
// Determine file-level semantics
|
|
23
|
+
const fileSemantics = this.deriveFileSemantics(functions, detectedFrameworks);
|
|
24
|
+
return {
|
|
25
|
+
...raw,
|
|
26
|
+
functions,
|
|
27
|
+
detectedFrameworks: detectedFrameworks.map(f => f.framework),
|
|
28
|
+
fileSemantics,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Normalize a single function
|
|
33
|
+
*/
|
|
34
|
+
normalizeFunction(fn, frameworks) {
|
|
35
|
+
// Normalize all decorators
|
|
36
|
+
const normalizedDecorators = fn.decorators.map(d => this.normalizeDecorator(d, frameworks));
|
|
37
|
+
// Derive semantics from normalized decorators
|
|
38
|
+
const semantics = this.deriveFunctionSemantics(fn, normalizedDecorators, frameworks);
|
|
39
|
+
return {
|
|
40
|
+
...fn,
|
|
41
|
+
normalizedDecorators,
|
|
42
|
+
semantics,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Normalize a single decorator string
|
|
47
|
+
*/
|
|
48
|
+
normalizeDecorator(raw, frameworks) {
|
|
49
|
+
const registry = getFrameworkRegistry();
|
|
50
|
+
// Try to find a matching pattern
|
|
51
|
+
const match = registry.findDecoratorMapping(raw, frameworks);
|
|
52
|
+
if (match) {
|
|
53
|
+
const { mapping, framework } = match;
|
|
54
|
+
return {
|
|
55
|
+
raw,
|
|
56
|
+
name: this.extractDecoratorName(raw),
|
|
57
|
+
language: this.language,
|
|
58
|
+
framework: framework.framework,
|
|
59
|
+
semantic: {
|
|
60
|
+
...mapping.semantic,
|
|
61
|
+
confidence: mapping.confidence ?? 1.0,
|
|
62
|
+
},
|
|
63
|
+
arguments: mapping.extractArgs(raw),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// No match - return with default/unknown semantics
|
|
67
|
+
return {
|
|
68
|
+
raw,
|
|
69
|
+
name: this.extractDecoratorName(raw),
|
|
70
|
+
language: this.language,
|
|
71
|
+
semantic: registry.getDefaultSemantics(),
|
|
72
|
+
arguments: this.extractGenericArguments(raw),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Detect which frameworks are in use
|
|
77
|
+
*/
|
|
78
|
+
detectFrameworks(source) {
|
|
79
|
+
return getFrameworkRegistry().detectFrameworks(source, this.language);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Check if this normalizer can handle a file
|
|
83
|
+
*/
|
|
84
|
+
canHandle(filePath) {
|
|
85
|
+
const ext = this.getExtension(filePath);
|
|
86
|
+
return this.extensions.includes(ext);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Extract decorator name from raw string
|
|
90
|
+
* Override in subclasses for language-specific syntax
|
|
91
|
+
*/
|
|
92
|
+
extractDecoratorName(raw) {
|
|
93
|
+
// Default: strip common prefixes (@, #, [, etc.)
|
|
94
|
+
return raw
|
|
95
|
+
.replace(/^[@#\[]/, '')
|
|
96
|
+
.replace(/\]$/, '')
|
|
97
|
+
.replace(/\(.*$/, '')
|
|
98
|
+
.trim();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Extract generic arguments from decorator string
|
|
102
|
+
* Override in subclasses for language-specific parsing
|
|
103
|
+
*/
|
|
104
|
+
extractGenericArguments(raw) {
|
|
105
|
+
const args = {};
|
|
106
|
+
// Try to extract path-like argument
|
|
107
|
+
const pathMatch = raw.match(/["']([^"']+)["']/);
|
|
108
|
+
if (pathMatch && pathMatch[1] !== undefined) {
|
|
109
|
+
args.path = pathMatch[1];
|
|
110
|
+
}
|
|
111
|
+
return args;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get file extension
|
|
115
|
+
*/
|
|
116
|
+
getExtension(filePath) {
|
|
117
|
+
const lastDot = filePath.lastIndexOf('.');
|
|
118
|
+
return lastDot >= 0 ? filePath.slice(lastDot) : '';
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Derive function semantics from normalized decorators
|
|
122
|
+
*/
|
|
123
|
+
deriveFunctionSemantics(fn, decorators, _frameworks) {
|
|
124
|
+
const isEntryPoint = decorators.some(d => d.semantic.isEntryPoint);
|
|
125
|
+
const isInjectable = decorators.some(d => d.semantic.isInjectable);
|
|
126
|
+
const isAuthHandler = decorators.some(d => d.semantic.category === 'auth');
|
|
127
|
+
const isTestCase = decorators.some(d => d.semantic.category === 'test');
|
|
128
|
+
const isDataAccessor = decorators.some(d => d.semantic.dataAccess !== undefined);
|
|
129
|
+
const requiresAuth = decorators.some(d => d.semantic.requiresAuth);
|
|
130
|
+
// Extract entry point details
|
|
131
|
+
let entryPoint = undefined;
|
|
132
|
+
if (isEntryPoint) {
|
|
133
|
+
const routingDecorator = decorators.find(d => d.semantic.category === 'routing');
|
|
134
|
+
if (routingDecorator) {
|
|
135
|
+
const path = routingDecorator.arguments.path;
|
|
136
|
+
const methods = routingDecorator.arguments.methods;
|
|
137
|
+
entryPoint = {
|
|
138
|
+
type: 'http',
|
|
139
|
+
...(path !== undefined && { path }),
|
|
140
|
+
...(methods !== undefined && { methods }),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Extract dependencies (from constructor params or DI decorators)
|
|
145
|
+
const dependencies = this.extractDependencies(fn, decorators);
|
|
146
|
+
// Extract auth requirements
|
|
147
|
+
let auth = undefined;
|
|
148
|
+
if (requiresAuth) {
|
|
149
|
+
const authDecorator = decorators.find(d => d.semantic.requiresAuth);
|
|
150
|
+
const roles = authDecorator?.arguments.roles;
|
|
151
|
+
auth = {
|
|
152
|
+
required: true,
|
|
153
|
+
...(roles !== undefined && { roles }),
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
isEntryPoint,
|
|
158
|
+
isDataAccessor,
|
|
159
|
+
isAuthHandler,
|
|
160
|
+
isTestCase,
|
|
161
|
+
isInjectable,
|
|
162
|
+
...(entryPoint !== undefined && { entryPoint }),
|
|
163
|
+
dependencies,
|
|
164
|
+
dataAccess: [], // Populated by data access extractors
|
|
165
|
+
...(auth !== undefined && { auth }),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Extract dependencies from function
|
|
170
|
+
* Override in subclasses for language-specific DI patterns
|
|
171
|
+
*/
|
|
172
|
+
extractDependencies(_fn, _decorators) {
|
|
173
|
+
return [];
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Derive file-level semantics
|
|
177
|
+
*/
|
|
178
|
+
deriveFileSemantics(functions, frameworks) {
|
|
179
|
+
const hasEntryPoints = functions.some(f => f.semantics.isEntryPoint);
|
|
180
|
+
const hasInjectables = functions.some(f => f.semantics.isInjectable);
|
|
181
|
+
const hasDataAccessors = functions.some(f => f.semantics.isDataAccessor);
|
|
182
|
+
const hasTests = functions.some(f => f.semantics.isTestCase);
|
|
183
|
+
// Determine primary framework
|
|
184
|
+
const frameworkCounts = new Map();
|
|
185
|
+
for (const fn of functions) {
|
|
186
|
+
for (const d of fn.normalizedDecorators) {
|
|
187
|
+
if (d.framework) {
|
|
188
|
+
frameworkCounts.set(d.framework, (frameworkCounts.get(d.framework) ?? 0) + 1);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
let primaryFramework;
|
|
193
|
+
let maxCount = 0;
|
|
194
|
+
for (const [fw, count] of frameworkCounts) {
|
|
195
|
+
if (count > maxCount) {
|
|
196
|
+
maxCount = count;
|
|
197
|
+
primaryFramework = fw;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const resolvedPrimaryFramework = primaryFramework ?? frameworks[0]?.framework;
|
|
201
|
+
return {
|
|
202
|
+
isController: hasEntryPoints,
|
|
203
|
+
isService: hasInjectables && !hasEntryPoints,
|
|
204
|
+
isModel: hasDataAccessors && !hasEntryPoints && !hasInjectables,
|
|
205
|
+
isTestFile: hasTests,
|
|
206
|
+
...(resolvedPrimaryFramework !== undefined && { primaryFramework: resolvedPrimaryFramework }),
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=base-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-normalizer.js","sourceRoot":"","sources":["../../src/language-intelligence/base-normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework Registry
|
|
3
|
+
*
|
|
4
|
+
* Central registry for framework patterns. Manages loading, registration,
|
|
5
|
+
* and lookup of framework-specific decorator/annotation patterns.
|
|
6
|
+
*/
|
|
7
|
+
import type { CallGraphLanguage } from '../call-graph/types.js';
|
|
8
|
+
import type { FrameworkPattern, DecoratorMapping, DecoratorSemantics } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Framework Registry
|
|
11
|
+
*
|
|
12
|
+
* Singleton registry that holds all known framework patterns.
|
|
13
|
+
* Frameworks can be registered at startup or dynamically added.
|
|
14
|
+
*/
|
|
15
|
+
export declare class FrameworkRegistry {
|
|
16
|
+
private static instance;
|
|
17
|
+
/** All registered framework patterns */
|
|
18
|
+
private frameworks;
|
|
19
|
+
/** Index by language for fast lookup */
|
|
20
|
+
private byLanguage;
|
|
21
|
+
private constructor();
|
|
22
|
+
/**
|
|
23
|
+
* Get the singleton instance
|
|
24
|
+
*/
|
|
25
|
+
static getInstance(): FrameworkRegistry;
|
|
26
|
+
/**
|
|
27
|
+
* Reset the registry (mainly for testing)
|
|
28
|
+
*/
|
|
29
|
+
static reset(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Register a framework pattern
|
|
32
|
+
*/
|
|
33
|
+
register(pattern: FrameworkPattern): void;
|
|
34
|
+
/**
|
|
35
|
+
* Register multiple framework patterns
|
|
36
|
+
*/
|
|
37
|
+
registerAll(patterns: FrameworkPattern[]): void;
|
|
38
|
+
/**
|
|
39
|
+
* Get a framework pattern by name
|
|
40
|
+
*/
|
|
41
|
+
get(framework: string): FrameworkPattern | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Get all frameworks for a language
|
|
44
|
+
*/
|
|
45
|
+
getForLanguage(language: CallGraphLanguage): FrameworkPattern[];
|
|
46
|
+
/**
|
|
47
|
+
* Get all registered frameworks
|
|
48
|
+
*/
|
|
49
|
+
getAll(): FrameworkPattern[];
|
|
50
|
+
/**
|
|
51
|
+
* Check if a framework is registered
|
|
52
|
+
*/
|
|
53
|
+
has(framework: string): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Detect frameworks from source code
|
|
56
|
+
*
|
|
57
|
+
* Checks detection patterns against the source to determine
|
|
58
|
+
* which frameworks are likely in use.
|
|
59
|
+
*/
|
|
60
|
+
detectFrameworks(source: string, language: CallGraphLanguage): FrameworkPattern[];
|
|
61
|
+
/**
|
|
62
|
+
* Check if source matches a framework's detection patterns
|
|
63
|
+
*/
|
|
64
|
+
private matchesDetectionPatterns;
|
|
65
|
+
/**
|
|
66
|
+
* Find matching decorator mapping for a raw decorator string
|
|
67
|
+
*/
|
|
68
|
+
findDecoratorMapping(raw: string, frameworks: FrameworkPattern[]): {
|
|
69
|
+
mapping: DecoratorMapping;
|
|
70
|
+
framework: FrameworkPattern;
|
|
71
|
+
} | null;
|
|
72
|
+
/**
|
|
73
|
+
* Get default semantics for an unknown decorator
|
|
74
|
+
*/
|
|
75
|
+
getDefaultSemantics(): DecoratorSemantics;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get the global framework registry instance
|
|
79
|
+
*/
|
|
80
|
+
export declare function getFrameworkRegistry(): FrameworkRegistry;
|
|
81
|
+
/**
|
|
82
|
+
* Register a framework pattern in the global registry
|
|
83
|
+
*/
|
|
84
|
+
export declare function registerFramework(pattern: FrameworkPattern): void;
|
|
85
|
+
/**
|
|
86
|
+
* Register multiple framework patterns
|
|
87
|
+
*/
|
|
88
|
+
export declare function registerFrameworks(patterns: FrameworkPattern[]): void;
|
|
89
|
+
//# sourceMappingURL=framework-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-registry.d.ts","sourceRoot":"","sources":["../../src/language-intelligence/framework-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEzF;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkC;IAEzD,wCAAwC;IACxC,OAAO,CAAC,UAAU,CAA4C;IAE9D,wCAAwC;IACxC,OAAO,CAAC,UAAU,CAAyD;IAE3E,OAAO;IAEP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,iBAAiB;IAOvC;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,IAAI;IAIpB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAazC;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAM/C;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIpD;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,iBAAiB,GAAG,gBAAgB,EAAE;IAI/D;;OAEG;IACH,MAAM,IAAI,gBAAgB,EAAE;IAI5B;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/B;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,gBAAgB,EAAE;IAajF;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAwBhC;;OAEG;IACH,oBAAoB,CAClB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,gBAAgB,EAAE,GAC7B;QAAE,OAAO,EAAE,gBAAgB,CAAC;QAAC,SAAS,EAAE,gBAAgB,CAAA;KAAE,GAAG,IAAI;IAWpE;;OAEG;IACH,mBAAmB,IAAI,kBAAkB;CAU1C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,CAExD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAEjE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAErE"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework Registry
|
|
3
|
+
*
|
|
4
|
+
* Central registry for framework patterns. Manages loading, registration,
|
|
5
|
+
* and lookup of framework-specific decorator/annotation patterns.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Framework Registry
|
|
9
|
+
*
|
|
10
|
+
* Singleton registry that holds all known framework patterns.
|
|
11
|
+
* Frameworks can be registered at startup or dynamically added.
|
|
12
|
+
*/
|
|
13
|
+
export class FrameworkRegistry {
|
|
14
|
+
static instance = null;
|
|
15
|
+
/** All registered framework patterns */
|
|
16
|
+
frameworks = new Map();
|
|
17
|
+
/** Index by language for fast lookup */
|
|
18
|
+
byLanguage = new Map();
|
|
19
|
+
constructor() { }
|
|
20
|
+
/**
|
|
21
|
+
* Get the singleton instance
|
|
22
|
+
*/
|
|
23
|
+
static getInstance() {
|
|
24
|
+
if (!FrameworkRegistry.instance) {
|
|
25
|
+
FrameworkRegistry.instance = new FrameworkRegistry();
|
|
26
|
+
}
|
|
27
|
+
return FrameworkRegistry.instance;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Reset the registry (mainly for testing)
|
|
31
|
+
*/
|
|
32
|
+
static reset() {
|
|
33
|
+
FrameworkRegistry.instance = null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Register a framework pattern
|
|
37
|
+
*/
|
|
38
|
+
register(pattern) {
|
|
39
|
+
this.frameworks.set(pattern.framework, pattern);
|
|
40
|
+
// Update language index
|
|
41
|
+
for (const lang of pattern.languages) {
|
|
42
|
+
const existing = this.byLanguage.get(lang) ?? [];
|
|
43
|
+
if (!existing.find(f => f.framework === pattern.framework)) {
|
|
44
|
+
existing.push(pattern);
|
|
45
|
+
this.byLanguage.set(lang, existing);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Register multiple framework patterns
|
|
51
|
+
*/
|
|
52
|
+
registerAll(patterns) {
|
|
53
|
+
for (const pattern of patterns) {
|
|
54
|
+
this.register(pattern);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get a framework pattern by name
|
|
59
|
+
*/
|
|
60
|
+
get(framework) {
|
|
61
|
+
return this.frameworks.get(framework);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get all frameworks for a language
|
|
65
|
+
*/
|
|
66
|
+
getForLanguage(language) {
|
|
67
|
+
return this.byLanguage.get(language) ?? [];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get all registered frameworks
|
|
71
|
+
*/
|
|
72
|
+
getAll() {
|
|
73
|
+
return Array.from(this.frameworks.values());
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check if a framework is registered
|
|
77
|
+
*/
|
|
78
|
+
has(framework) {
|
|
79
|
+
return this.frameworks.has(framework);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Detect frameworks from source code
|
|
83
|
+
*
|
|
84
|
+
* Checks detection patterns against the source to determine
|
|
85
|
+
* which frameworks are likely in use.
|
|
86
|
+
*/
|
|
87
|
+
detectFrameworks(source, language) {
|
|
88
|
+
const candidates = this.getForLanguage(language);
|
|
89
|
+
const detected = [];
|
|
90
|
+
for (const framework of candidates) {
|
|
91
|
+
if (this.matchesDetectionPatterns(source, framework)) {
|
|
92
|
+
detected.push(framework);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return detected;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Check if source matches a framework's detection patterns
|
|
99
|
+
*/
|
|
100
|
+
matchesDetectionPatterns(source, framework) {
|
|
101
|
+
const { detectionPatterns } = framework;
|
|
102
|
+
// Check import patterns
|
|
103
|
+
if (detectionPatterns.imports?.length) {
|
|
104
|
+
for (const pattern of detectionPatterns.imports) {
|
|
105
|
+
if (pattern.test(source)) {
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Check decorator patterns
|
|
111
|
+
if (detectionPatterns.decorators?.length) {
|
|
112
|
+
for (const pattern of detectionPatterns.decorators) {
|
|
113
|
+
if (pattern.test(source)) {
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Find matching decorator mapping for a raw decorator string
|
|
122
|
+
*/
|
|
123
|
+
findDecoratorMapping(raw, frameworks) {
|
|
124
|
+
for (const framework of frameworks) {
|
|
125
|
+
for (const mapping of framework.decoratorMappings) {
|
|
126
|
+
if (mapping.pattern.test(raw)) {
|
|
127
|
+
return { mapping, framework };
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get default semantics for an unknown decorator
|
|
135
|
+
*/
|
|
136
|
+
getDefaultSemantics() {
|
|
137
|
+
return {
|
|
138
|
+
category: 'unknown',
|
|
139
|
+
intent: 'Unknown decorator',
|
|
140
|
+
isEntryPoint: false,
|
|
141
|
+
isInjectable: false,
|
|
142
|
+
requiresAuth: false,
|
|
143
|
+
confidence: 0,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get the global framework registry instance
|
|
149
|
+
*/
|
|
150
|
+
export function getFrameworkRegistry() {
|
|
151
|
+
return FrameworkRegistry.getInstance();
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Register a framework pattern in the global registry
|
|
155
|
+
*/
|
|
156
|
+
export function registerFramework(pattern) {
|
|
157
|
+
getFrameworkRegistry().register(pattern);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Register multiple framework patterns
|
|
161
|
+
*/
|
|
162
|
+
export function registerFrameworks(patterns) {
|
|
163
|
+
getFrameworkRegistry().registerAll(patterns);
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=framework-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-registry.js","sourceRoot":"","sources":["../../src/language-intelligence/framework-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ASP.NET Core Framework Patterns
|
|
3
|
+
*
|
|
4
|
+
* Semantic mappings for ASP.NET Core attributes.
|
|
5
|
+
*/
|
|
6
|
+
import type { FrameworkPattern } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* ASP.NET Core framework patterns
|
|
9
|
+
*/
|
|
10
|
+
export declare const ASPNET_PATTERNS: FrameworkPattern;
|
|
11
|
+
//# sourceMappingURL=aspnet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aspnet.d.ts","sourceRoot":"","sources":["../../../src/language-intelligence/frameworks/aspnet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAkC,MAAM,aAAa,CAAC;AAgCpF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,gBA+S7B,CAAC"}
|