driftdetect-core 0.4.5 → 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 +19 -18
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PHP Language Normalizer
|
|
3
|
+
*
|
|
4
|
+
* Wraps the existing PhpCallGraphExtractor and adds semantic normalization.
|
|
5
|
+
* Supports Laravel framework patterns.
|
|
6
|
+
*/
|
|
7
|
+
import type { CallGraphLanguage, FileExtractionResult, FunctionExtraction } from '../../call-graph/types.js';
|
|
8
|
+
import { BaseLanguageNormalizer } from '../base-normalizer.js';
|
|
9
|
+
import type { NormalizedDecorator, DecoratorArguments } from '../types.js';
|
|
10
|
+
/**
|
|
11
|
+
* PHP language normalizer
|
|
12
|
+
*/
|
|
13
|
+
export declare class PhpNormalizer extends BaseLanguageNormalizer {
|
|
14
|
+
readonly language: CallGraphLanguage;
|
|
15
|
+
readonly extensions: string[];
|
|
16
|
+
private extractor;
|
|
17
|
+
/**
|
|
18
|
+
* Extract raw data using the existing PHP extractor
|
|
19
|
+
*/
|
|
20
|
+
protected extractRaw(source: string, filePath: string): FileExtractionResult;
|
|
21
|
+
/**
|
|
22
|
+
* Extract decorator name from PHP attribute
|
|
23
|
+
* PHP 8 attributes: #[Attribute] or #[Attribute(...)]
|
|
24
|
+
*/
|
|
25
|
+
protected extractDecoratorName(raw: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Extract generic arguments from PHP attribute
|
|
28
|
+
*/
|
|
29
|
+
protected extractGenericArguments(raw: string): DecoratorArguments;
|
|
30
|
+
/**
|
|
31
|
+
* Extract dependencies from constructor parameters (Laravel DI pattern)
|
|
32
|
+
*/
|
|
33
|
+
protected extractDependencies(fn: FunctionExtraction, _decorators: NormalizedDecorator[]): string[];
|
|
34
|
+
/**
|
|
35
|
+
* Check if a type is primitive or common PHP type
|
|
36
|
+
*/
|
|
37
|
+
private isPrimitiveOrCommon;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=php-normalizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"php-normalizer.d.ts","sourceRoot":"","sources":["../../../src/language-intelligence/normalizers/php-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE7G,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE3E;;GAEG;AACH,qBAAa,aAAc,SAAQ,sBAAsB;IACvD,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAS;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAY;IAEzC,OAAO,CAAC,SAAS,CAA+B;IAEhD;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,oBAAoB;IAI5E;;;OAGG;cACgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAS5D;;OAEG;cACgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAuB3E;;OAEG;cACgB,mBAAmB,CACpC,EAAE,EAAE,kBAAkB,EACtB,WAAW,EAAE,mBAAmB,EAAE,GACjC,MAAM,EAAE;IAkBX;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAQ5B"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PHP Language Normalizer
|
|
3
|
+
*
|
|
4
|
+
* Wraps the existing PhpCallGraphExtractor and adds semantic normalization.
|
|
5
|
+
* Supports Laravel framework patterns.
|
|
6
|
+
*/
|
|
7
|
+
import { PhpCallGraphExtractor } from '../../call-graph/extractors/php-extractor.js';
|
|
8
|
+
import { BaseLanguageNormalizer } from '../base-normalizer.js';
|
|
9
|
+
/**
|
|
10
|
+
* PHP language normalizer
|
|
11
|
+
*/
|
|
12
|
+
export class PhpNormalizer extends BaseLanguageNormalizer {
|
|
13
|
+
language = 'php';
|
|
14
|
+
extensions = ['.php'];
|
|
15
|
+
extractor = new PhpCallGraphExtractor();
|
|
16
|
+
/**
|
|
17
|
+
* Extract raw data using the existing PHP extractor
|
|
18
|
+
*/
|
|
19
|
+
extractRaw(source, filePath) {
|
|
20
|
+
return this.extractor.extract(source, filePath);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Extract decorator name from PHP attribute
|
|
24
|
+
* PHP 8 attributes: #[Attribute] or #[Attribute(...)]
|
|
25
|
+
*/
|
|
26
|
+
extractDecoratorName(raw) {
|
|
27
|
+
// Remove #[ prefix and ] suffix, then any arguments
|
|
28
|
+
return raw
|
|
29
|
+
.replace(/^#\[/, '')
|
|
30
|
+
.replace(/\]$/, '')
|
|
31
|
+
.replace(/\(.*$/, '')
|
|
32
|
+
.trim();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Extract generic arguments from PHP attribute
|
|
36
|
+
*/
|
|
37
|
+
extractGenericArguments(raw) {
|
|
38
|
+
const args = {};
|
|
39
|
+
// Extract string value: #[Route("/path")] or #[Middleware("auth")]
|
|
40
|
+
const valueMatch = raw.match(/\(\s*["']([^"']+)["']/);
|
|
41
|
+
if (valueMatch && valueMatch[1] !== undefined) {
|
|
42
|
+
args.path = valueMatch[1];
|
|
43
|
+
}
|
|
44
|
+
// Extract methods: #[Route("/path", methods: ["GET", "POST"])]
|
|
45
|
+
const methodsMatch = raw.match(/methods:\s*\[([^\]]+)\]/);
|
|
46
|
+
if (methodsMatch && methodsMatch[1]) {
|
|
47
|
+
const methods = methodsMatch[1]
|
|
48
|
+
.match(/["'](\w+)["']/g)
|
|
49
|
+
?.map(m => m.replace(/["']/g, '').toUpperCase());
|
|
50
|
+
if (methods && methods.length > 0) {
|
|
51
|
+
args.methods = methods;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return args;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Extract dependencies from constructor parameters (Laravel DI pattern)
|
|
58
|
+
*/
|
|
59
|
+
extractDependencies(fn, _decorators) {
|
|
60
|
+
const deps = [];
|
|
61
|
+
// In Laravel, constructor injection is the primary DI pattern
|
|
62
|
+
if (fn.isConstructor && fn.parameters.length > 0) {
|
|
63
|
+
for (const param of fn.parameters) {
|
|
64
|
+
if (param.type && !this.isPrimitiveOrCommon(param.type)) {
|
|
65
|
+
// Extract class name from fully qualified name
|
|
66
|
+
const parts = param.type.split('\\');
|
|
67
|
+
const typeName = parts[parts.length - 1] ?? param.type;
|
|
68
|
+
deps.push(typeName);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return [...new Set(deps)]; // Deduplicate
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Check if a type is primitive or common PHP type
|
|
76
|
+
*/
|
|
77
|
+
isPrimitiveOrCommon(type) {
|
|
78
|
+
const primitives = [
|
|
79
|
+
'int', 'float', 'string', 'bool', 'array', 'object', 'mixed', 'void', 'null',
|
|
80
|
+
'callable', 'iterable', 'self', 'static', 'parent',
|
|
81
|
+
'Request', 'Response', 'Collection', 'Carbon',
|
|
82
|
+
];
|
|
83
|
+
return primitives.includes(type);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=php-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"php-normalizer.js","sourceRoot":"","sources":["../../../src/language-intelligence/normalizers/php-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAG/D;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,sBAAsB;IAC9C,QAAQ,GAAsB,KAAK,CAAC;IACpC,UAAU,GAAa,CAAC,MAAM,CAAC,CAAC;IAEjC,SAAS,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAEhD;;OAEG;IACO,UAAU,CAAC,MAAc,EAAE,QAAgB;QACnD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACgB,oBAAoB,CAAC,GAAW;QACjD,oDAAoD;QACpD,OAAO,GAAG;aACP,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;aACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;aAClB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;aACpB,IAAI,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACgB,uBAAuB,CAAC,GAAW;QACpD,MAAM,IAAI,GAAuB,EAAE,CAAC;QAEpC,mEAAmE;QACnE,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACtD,IAAI,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC9C,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;QAED,+DAA+D;QAC/D,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC1D,IAAI,YAAY,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC;iBAC5B,KAAK,CAAC,gBAAgB,CAAC;gBACxB,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,EAAiD,CAAC,CAAC;YAClG,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACzB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACgB,mBAAmB,CACpC,EAAsB,EACtB,WAAkC;QAElC,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,8DAA8D;QAC9D,IAAI,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;gBAClC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxD,+CAA+C;oBAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;oBACvD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc;IAC3C,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAY;QACtC,MAAM,UAAU,GAAG;YACjB,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;YAC5E,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;YAClD,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ;SAC9C,CAAC;QACF,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python Language Normalizer
|
|
3
|
+
*
|
|
4
|
+
* Wraps the existing PythonCallGraphExtractor and adds semantic normalization.
|
|
5
|
+
* Supports FastAPI, Flask, and Django framework patterns.
|
|
6
|
+
*/
|
|
7
|
+
import type { CallGraphLanguage, FileExtractionResult, FunctionExtraction } from '../../call-graph/types.js';
|
|
8
|
+
import { BaseLanguageNormalizer } from '../base-normalizer.js';
|
|
9
|
+
import type { NormalizedDecorator, DecoratorArguments } from '../types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Python language normalizer
|
|
12
|
+
*/
|
|
13
|
+
export declare class PythonNormalizer extends BaseLanguageNormalizer {
|
|
14
|
+
readonly language: CallGraphLanguage;
|
|
15
|
+
readonly extensions: string[];
|
|
16
|
+
private extractor;
|
|
17
|
+
/**
|
|
18
|
+
* Extract raw data using the existing Python extractor
|
|
19
|
+
*/
|
|
20
|
+
protected extractRaw(source: string, filePath: string): FileExtractionResult;
|
|
21
|
+
/**
|
|
22
|
+
* Extract decorator name from Python decorator
|
|
23
|
+
* Python decorators: @decorator or @module.decorator or @decorator(...)
|
|
24
|
+
*/
|
|
25
|
+
protected extractDecoratorName(raw: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Extract generic arguments from Python decorator
|
|
28
|
+
*/
|
|
29
|
+
protected extractGenericArguments(raw: string): DecoratorArguments;
|
|
30
|
+
/**
|
|
31
|
+
* Extract dependencies from function parameters (FastAPI Depends pattern)
|
|
32
|
+
*/
|
|
33
|
+
protected extractDependencies(fn: FunctionExtraction, decorators: NormalizedDecorator[]): string[];
|
|
34
|
+
/**
|
|
35
|
+
* Check if a type is primitive or common Python type
|
|
36
|
+
*/
|
|
37
|
+
private isPrimitiveOrCommon;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=python-normalizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python-normalizer.d.ts","sourceRoot":"","sources":["../../../src/language-intelligence/normalizers/python-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE7G,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE3E;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,sBAAsB;IAC1D,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAY;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAA2B;IAExD,OAAO,CAAC,SAAS,CAAkC;IAEnD;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,oBAAoB;IAI5E;;;OAGG;cACgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAU5D;;OAEG;cACgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAuB3E;;OAEG;cACgB,mBAAmB,CACpC,EAAE,EAAE,kBAAkB,EACtB,UAAU,EAAE,mBAAmB,EAAE,GAChC,MAAM,EAAE;IA0BX;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAS5B"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python Language Normalizer
|
|
3
|
+
*
|
|
4
|
+
* Wraps the existing PythonCallGraphExtractor and adds semantic normalization.
|
|
5
|
+
* Supports FastAPI, Flask, and Django framework patterns.
|
|
6
|
+
*/
|
|
7
|
+
import { PythonCallGraphExtractor } from '../../call-graph/extractors/python-extractor.js';
|
|
8
|
+
import { BaseLanguageNormalizer } from '../base-normalizer.js';
|
|
9
|
+
/**
|
|
10
|
+
* Python language normalizer
|
|
11
|
+
*/
|
|
12
|
+
export class PythonNormalizer extends BaseLanguageNormalizer {
|
|
13
|
+
language = 'python';
|
|
14
|
+
extensions = ['.py', '.pyw', '.pyi'];
|
|
15
|
+
extractor = new PythonCallGraphExtractor();
|
|
16
|
+
/**
|
|
17
|
+
* Extract raw data using the existing Python extractor
|
|
18
|
+
*/
|
|
19
|
+
extractRaw(source, filePath) {
|
|
20
|
+
return this.extractor.extract(source, filePath);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Extract decorator name from Python decorator
|
|
24
|
+
* Python decorators: @decorator or @module.decorator or @decorator(...)
|
|
25
|
+
*/
|
|
26
|
+
extractDecoratorName(raw) {
|
|
27
|
+
// Remove @ prefix
|
|
28
|
+
let name = raw.replace(/^@/, '');
|
|
29
|
+
// Remove arguments
|
|
30
|
+
name = name.replace(/\(.*$/, '');
|
|
31
|
+
// Get the last part after dots (e.g., app.route -> route)
|
|
32
|
+
const parts = name.split('.');
|
|
33
|
+
return parts[parts.length - 1] ?? name;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Extract generic arguments from Python decorator
|
|
37
|
+
*/
|
|
38
|
+
extractGenericArguments(raw) {
|
|
39
|
+
const args = {};
|
|
40
|
+
// Extract path from route decorators: @app.route("/path") or @router.get("/path")
|
|
41
|
+
const pathMatch = raw.match(/\(\s*["']([^"']+)["']/);
|
|
42
|
+
if (pathMatch && pathMatch[1] !== undefined) {
|
|
43
|
+
args.path = pathMatch[1];
|
|
44
|
+
}
|
|
45
|
+
// Extract methods from Flask route: @app.route("/path", methods=["GET", "POST"])
|
|
46
|
+
const methodsMatch = raw.match(/methods\s*=\s*\[([^\]]+)\]/);
|
|
47
|
+
if (methodsMatch && methodsMatch[1]) {
|
|
48
|
+
const methods = methodsMatch[1]
|
|
49
|
+
.match(/["'](\w+)["']/g)
|
|
50
|
+
?.map(m => m.replace(/["']/g, '').toUpperCase());
|
|
51
|
+
if (methods && methods.length > 0) {
|
|
52
|
+
args.methods = methods;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return args;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Extract dependencies from function parameters (FastAPI Depends pattern)
|
|
59
|
+
*/
|
|
60
|
+
extractDependencies(fn, decorators) {
|
|
61
|
+
const deps = [];
|
|
62
|
+
// Look for Depends() in decorators
|
|
63
|
+
for (const decorator of decorators) {
|
|
64
|
+
if (decorator.name === 'Depends' || decorator.raw.includes('Depends(')) {
|
|
65
|
+
const depMatch = decorator.raw.match(/Depends\s*\(\s*(\w+)/);
|
|
66
|
+
if (depMatch && depMatch[1]) {
|
|
67
|
+
deps.push(depMatch[1]);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Also check parameter default values for Depends
|
|
72
|
+
// This is handled by the extractor which creates implicit calls
|
|
73
|
+
// but we can also extract type hints as dependencies
|
|
74
|
+
for (const param of fn.parameters) {
|
|
75
|
+
if (param.type && !this.isPrimitiveOrCommon(param.type)) {
|
|
76
|
+
// Type hints like "user: User" indicate a dependency
|
|
77
|
+
deps.push(param.type);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return [...new Set(deps)]; // Deduplicate
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Check if a type is primitive or common Python type
|
|
84
|
+
*/
|
|
85
|
+
isPrimitiveOrCommon(type) {
|
|
86
|
+
const primitives = [
|
|
87
|
+
'int', 'float', 'str', 'bool', 'bytes', 'None', 'Any',
|
|
88
|
+
'List', 'Dict', 'Set', 'Tuple', 'Optional', 'Union',
|
|
89
|
+
'list', 'dict', 'set', 'tuple',
|
|
90
|
+
'Request', 'Response', 'HTTPException',
|
|
91
|
+
];
|
|
92
|
+
return primitives.includes(type);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=python-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python-normalizer.js","sourceRoot":"","sources":["../../../src/language-intelligence/normalizers/python-normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Language Normalizer
|
|
3
|
+
*
|
|
4
|
+
* Wraps the existing TypeScriptCallGraphExtractor and adds semantic normalization.
|
|
5
|
+
* Supports NestJS, Express, and other TypeScript frameworks.
|
|
6
|
+
*/
|
|
7
|
+
import type { CallGraphLanguage, FileExtractionResult, FunctionExtraction } from '../../call-graph/types.js';
|
|
8
|
+
import { BaseLanguageNormalizer } from '../base-normalizer.js';
|
|
9
|
+
import type { NormalizedDecorator, DecoratorArguments } from '../types.js';
|
|
10
|
+
/**
|
|
11
|
+
* TypeScript language normalizer
|
|
12
|
+
*/
|
|
13
|
+
export declare class TypeScriptNormalizer extends BaseLanguageNormalizer {
|
|
14
|
+
readonly language: CallGraphLanguage;
|
|
15
|
+
readonly extensions: string[];
|
|
16
|
+
private extractor;
|
|
17
|
+
/**
|
|
18
|
+
* Extract raw data using the existing TypeScript extractor
|
|
19
|
+
*/
|
|
20
|
+
protected extractRaw(source: string, filePath: string): FileExtractionResult;
|
|
21
|
+
/**
|
|
22
|
+
* Extract decorator name from TypeScript decorator
|
|
23
|
+
* TypeScript decorators: @Decorator or @Decorator(...)
|
|
24
|
+
*/
|
|
25
|
+
protected extractDecoratorName(raw: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Extract generic arguments from TypeScript decorator
|
|
28
|
+
*/
|
|
29
|
+
protected extractGenericArguments(raw: string): DecoratorArguments;
|
|
30
|
+
/**
|
|
31
|
+
* Extract dependencies from constructor parameters (NestJS DI pattern)
|
|
32
|
+
*/
|
|
33
|
+
protected extractDependencies(fn: FunctionExtraction, decorators: NormalizedDecorator[]): string[];
|
|
34
|
+
/**
|
|
35
|
+
* Check if a type is primitive or common TypeScript type
|
|
36
|
+
*/
|
|
37
|
+
private isPrimitiveOrCommon;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=typescript-normalizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-normalizer.d.ts","sourceRoot":"","sources":["../../../src/language-intelligence/normalizers/typescript-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE7G,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE3E;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,sBAAsB;IAC9D,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAgB;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAkE;IAE/F,OAAO,CAAC,SAAS,CAAsC;IAEvD;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,oBAAoB;IAI5E;;;OAGG;cACgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAQ5D;;OAEG;cACgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAY3E;;OAEG;cACgB,mBAAmB,CACpC,EAAE,EAAE,kBAAkB,EACtB,UAAU,EAAE,mBAAmB,EAAE,GAChC,MAAM,EAAE;IA2BX;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAS5B"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Language Normalizer
|
|
3
|
+
*
|
|
4
|
+
* Wraps the existing TypeScriptCallGraphExtractor and adds semantic normalization.
|
|
5
|
+
* Supports NestJS, Express, and other TypeScript frameworks.
|
|
6
|
+
*/
|
|
7
|
+
import { TypeScriptCallGraphExtractor } from '../../call-graph/extractors/typescript-extractor.js';
|
|
8
|
+
import { BaseLanguageNormalizer } from '../base-normalizer.js';
|
|
9
|
+
/**
|
|
10
|
+
* TypeScript language normalizer
|
|
11
|
+
*/
|
|
12
|
+
export class TypeScriptNormalizer extends BaseLanguageNormalizer {
|
|
13
|
+
language = 'typescript';
|
|
14
|
+
extensions = ['.ts', '.tsx', '.js', '.jsx', '.mts', '.cts', '.mjs', '.cjs'];
|
|
15
|
+
extractor = new TypeScriptCallGraphExtractor();
|
|
16
|
+
/**
|
|
17
|
+
* Extract raw data using the existing TypeScript extractor
|
|
18
|
+
*/
|
|
19
|
+
extractRaw(source, filePath) {
|
|
20
|
+
return this.extractor.extract(source, filePath);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Extract decorator name from TypeScript decorator
|
|
24
|
+
* TypeScript decorators: @Decorator or @Decorator(...)
|
|
25
|
+
*/
|
|
26
|
+
extractDecoratorName(raw) {
|
|
27
|
+
// Remove @ prefix and any arguments
|
|
28
|
+
return raw
|
|
29
|
+
.replace(/^@/, '')
|
|
30
|
+
.replace(/\(.*$/, '')
|
|
31
|
+
.trim();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Extract generic arguments from TypeScript decorator
|
|
35
|
+
*/
|
|
36
|
+
extractGenericArguments(raw) {
|
|
37
|
+
const args = {};
|
|
38
|
+
// Extract path from route decorators: @Get("/path") or @Controller("/api")
|
|
39
|
+
const pathMatch = raw.match(/\(\s*["']([^"']+)["']/);
|
|
40
|
+
if (pathMatch && pathMatch[1] !== undefined) {
|
|
41
|
+
args.path = pathMatch[1];
|
|
42
|
+
}
|
|
43
|
+
return args;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Extract dependencies from constructor parameters (NestJS DI pattern)
|
|
47
|
+
*/
|
|
48
|
+
extractDependencies(fn, decorators) {
|
|
49
|
+
const deps = [];
|
|
50
|
+
// In NestJS, constructor injection is the primary DI pattern
|
|
51
|
+
if (fn.isConstructor && fn.parameters.length > 0) {
|
|
52
|
+
for (const param of fn.parameters) {
|
|
53
|
+
if (param.type && !this.isPrimitiveOrCommon(param.type)) {
|
|
54
|
+
// Extract the type name (handle generics)
|
|
55
|
+
const typeName = param.type.replace(/<.*>/, '').trim();
|
|
56
|
+
deps.push(typeName);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Check for @Inject decorator
|
|
61
|
+
const hasInject = decorators.some(d => d.name === 'Inject');
|
|
62
|
+
if (hasInject && fn.parameters.length > 0) {
|
|
63
|
+
for (const param of fn.parameters) {
|
|
64
|
+
if (param.type && !this.isPrimitiveOrCommon(param.type)) {
|
|
65
|
+
deps.push(param.type.replace(/<.*>/, '').trim());
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return [...new Set(deps)]; // Deduplicate
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Check if a type is primitive or common TypeScript type
|
|
73
|
+
*/
|
|
74
|
+
isPrimitiveOrCommon(type) {
|
|
75
|
+
const primitives = [
|
|
76
|
+
'string', 'number', 'boolean', 'void', 'null', 'undefined', 'any', 'unknown', 'never',
|
|
77
|
+
'String', 'Number', 'Boolean', 'Object', 'Array', 'Function',
|
|
78
|
+
'Promise', 'Observable', 'Map', 'Set', 'Date', 'RegExp', 'Error',
|
|
79
|
+
'Request', 'Response', 'NextFunction',
|
|
80
|
+
];
|
|
81
|
+
return primitives.includes(type);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=typescript-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-normalizer.js","sourceRoot":"","sources":["../../../src/language-intelligence/normalizers/typescript-normalizer.ts"],"names":[],"mappings":"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"}
|