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.
Files changed (277) hide show
  1. package/LICENSE +21 -0
  2. package/dist/boundaries/boundary-scanner.d.ts.map +1 -1
  3. package/dist/boundaries/boundary-scanner.js +184 -18
  4. package/dist/boundaries/boundary-scanner.js.map +1 -1
  5. package/dist/boundaries/types.d.ts +34 -2
  6. package/dist/boundaries/types.d.ts.map +1 -1
  7. package/dist/call-graph/analysis/graph-builder.d.ts +3 -0
  8. package/dist/call-graph/analysis/graph-builder.d.ts.map +1 -1
  9. package/dist/call-graph/analysis/graph-builder.js +81 -18
  10. package/dist/call-graph/analysis/graph-builder.js.map +1 -1
  11. package/dist/call-graph/extractors/csharp-data-access-extractor.d.ts.map +1 -1
  12. package/dist/call-graph/extractors/csharp-data-access-extractor.js +10 -5
  13. package/dist/call-graph/extractors/csharp-data-access-extractor.js.map +1 -1
  14. package/dist/call-graph/extractors/data-access-extractor.d.ts +16 -2
  15. package/dist/call-graph/extractors/data-access-extractor.d.ts.map +1 -1
  16. package/dist/call-graph/extractors/data-access-extractor.js +114 -5
  17. package/dist/call-graph/extractors/data-access-extractor.js.map +1 -1
  18. package/dist/call-graph/extractors/java-data-access-extractor.d.ts.map +1 -1
  19. package/dist/call-graph/extractors/java-data-access-extractor.js +12 -6
  20. package/dist/call-graph/extractors/java-data-access-extractor.js.map +1 -1
  21. package/dist/call-graph/extractors/php-data-access-extractor.d.ts.map +1 -1
  22. package/dist/call-graph/extractors/php-data-access-extractor.js +12 -6
  23. package/dist/call-graph/extractors/php-data-access-extractor.js.map +1 -1
  24. package/dist/call-graph/extractors/python-data-access-extractor.d.ts.map +1 -1
  25. package/dist/call-graph/extractors/python-data-access-extractor.js +12 -6
  26. package/dist/call-graph/extractors/python-data-access-extractor.js.map +1 -1
  27. package/dist/call-graph/extractors/semantic-data-access-scanner.d.ts +4 -0
  28. package/dist/call-graph/extractors/semantic-data-access-scanner.d.ts.map +1 -1
  29. package/dist/call-graph/extractors/semantic-data-access-scanner.js +46 -2
  30. package/dist/call-graph/extractors/semantic-data-access-scanner.js.map +1 -1
  31. package/dist/call-graph/extractors/typescript-data-access-extractor.d.ts.map +1 -1
  32. package/dist/call-graph/extractors/typescript-data-access-extractor.js +23 -10
  33. package/dist/call-graph/extractors/typescript-data-access-extractor.js.map +1 -1
  34. package/dist/call-graph/index.d.ts +2 -4
  35. package/dist/call-graph/index.d.ts.map +1 -1
  36. package/dist/call-graph/index.js +5 -6
  37. package/dist/call-graph/index.js.map +1 -1
  38. package/dist/index.d.ts +4 -2
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +15 -5
  41. package/dist/index.js.map +1 -1
  42. package/dist/language-intelligence/base-normalizer.d.ts +68 -0
  43. package/dist/language-intelligence/base-normalizer.d.ts.map +1 -0
  44. package/dist/language-intelligence/base-normalizer.js +210 -0
  45. package/dist/language-intelligence/base-normalizer.js.map +1 -0
  46. package/dist/language-intelligence/framework-registry.d.ts +89 -0
  47. package/dist/language-intelligence/framework-registry.d.ts.map +1 -0
  48. package/dist/language-intelligence/framework-registry.js +165 -0
  49. package/dist/language-intelligence/framework-registry.js.map +1 -0
  50. package/dist/language-intelligence/frameworks/aspnet.d.ts +11 -0
  51. package/dist/language-intelligence/frameworks/aspnet.d.ts.map +1 -0
  52. package/dist/language-intelligence/frameworks/aspnet.js +325 -0
  53. package/dist/language-intelligence/frameworks/aspnet.js.map +1 -0
  54. package/dist/language-intelligence/frameworks/fastapi.d.ts +11 -0
  55. package/dist/language-intelligence/frameworks/fastapi.d.ts.map +1 -0
  56. package/dist/language-intelligence/frameworks/fastapi.js +188 -0
  57. package/dist/language-intelligence/frameworks/fastapi.js.map +1 -0
  58. package/dist/language-intelligence/frameworks/index.d.ts +32 -0
  59. package/dist/language-intelligence/frameworks/index.d.ts.map +1 -0
  60. package/dist/language-intelligence/frameworks/index.js +51 -0
  61. package/dist/language-intelligence/frameworks/index.js.map +1 -0
  62. package/dist/language-intelligence/frameworks/laravel.d.ts +12 -0
  63. package/dist/language-intelligence/frameworks/laravel.d.ts.map +1 -0
  64. package/dist/language-intelligence/frameworks/laravel.js +194 -0
  65. package/dist/language-intelligence/frameworks/laravel.js.map +1 -0
  66. package/dist/language-intelligence/frameworks/nestjs.d.ts +11 -0
  67. package/dist/language-intelligence/frameworks/nestjs.d.ts.map +1 -0
  68. package/dist/language-intelligence/frameworks/nestjs.js +307 -0
  69. package/dist/language-intelligence/frameworks/nestjs.js.map +1 -0
  70. package/dist/language-intelligence/frameworks/spring.d.ts +11 -0
  71. package/dist/language-intelligence/frameworks/spring.d.ts.map +1 -0
  72. package/dist/language-intelligence/frameworks/spring.js +369 -0
  73. package/dist/language-intelligence/frameworks/spring.js.map +1 -0
  74. package/dist/language-intelligence/index.d.ts +33 -0
  75. package/dist/language-intelligence/index.d.ts.map +1 -0
  76. package/dist/language-intelligence/index.js +37 -0
  77. package/dist/language-intelligence/index.js.map +1 -0
  78. package/dist/language-intelligence/language-intelligence.d.ts +99 -0
  79. package/dist/language-intelligence/language-intelligence.d.ts.map +1 -0
  80. package/dist/language-intelligence/language-intelligence.js +239 -0
  81. package/dist/language-intelligence/language-intelligence.js.map +1 -0
  82. package/dist/language-intelligence/normalizers/csharp-normalizer.d.ts +39 -0
  83. package/dist/language-intelligence/normalizers/csharp-normalizer.d.ts.map +1 -0
  84. package/dist/language-intelligence/normalizers/csharp-normalizer.js +86 -0
  85. package/dist/language-intelligence/normalizers/csharp-normalizer.js.map +1 -0
  86. package/dist/language-intelligence/normalizers/index.d.ts +25 -0
  87. package/dist/language-intelligence/normalizers/index.d.ts.map +1 -0
  88. package/dist/language-intelligence/normalizers/index.js +60 -0
  89. package/dist/language-intelligence/normalizers/index.js.map +1 -0
  90. package/dist/language-intelligence/normalizers/java-normalizer.d.ts +39 -0
  91. package/dist/language-intelligence/normalizers/java-normalizer.d.ts.map +1 -0
  92. package/dist/language-intelligence/normalizers/java-normalizer.js +96 -0
  93. package/dist/language-intelligence/normalizers/java-normalizer.js.map +1 -0
  94. package/dist/language-intelligence/normalizers/php-normalizer.d.ts +39 -0
  95. package/dist/language-intelligence/normalizers/php-normalizer.d.ts.map +1 -0
  96. package/dist/language-intelligence/normalizers/php-normalizer.js +86 -0
  97. package/dist/language-intelligence/normalizers/php-normalizer.js.map +1 -0
  98. package/dist/language-intelligence/normalizers/python-normalizer.d.ts +39 -0
  99. package/dist/language-intelligence/normalizers/python-normalizer.d.ts.map +1 -0
  100. package/dist/language-intelligence/normalizers/python-normalizer.js +95 -0
  101. package/dist/language-intelligence/normalizers/python-normalizer.js.map +1 -0
  102. package/dist/language-intelligence/normalizers/typescript-normalizer.d.ts +39 -0
  103. package/dist/language-intelligence/normalizers/typescript-normalizer.d.ts.map +1 -0
  104. package/dist/language-intelligence/normalizers/typescript-normalizer.js +84 -0
  105. package/dist/language-intelligence/normalizers/typescript-normalizer.js.map +1 -0
  106. package/dist/language-intelligence/types.d.ts +270 -0
  107. package/dist/language-intelligence/types.d.ts.map +1 -0
  108. package/dist/language-intelligence/types.js +9 -0
  109. package/dist/language-intelligence/types.js.map +1 -0
  110. package/dist/scanner/file-processor-worker.d.ts +66 -0
  111. package/dist/scanner/file-processor-worker.d.ts.map +1 -0
  112. package/dist/scanner/file-processor-worker.js +189 -0
  113. package/dist/scanner/file-processor-worker.js.map +1 -0
  114. package/dist/scanner/index.d.ts +2 -0
  115. package/dist/scanner/index.d.ts.map +1 -1
  116. package/dist/scanner/index.js +2 -0
  117. package/dist/scanner/index.js.map +1 -1
  118. package/dist/scanner/threaded-worker-pool.d.ts +182 -0
  119. package/dist/scanner/threaded-worker-pool.d.ts.map +1 -0
  120. package/dist/scanner/threaded-worker-pool.js +243 -0
  121. package/dist/scanner/threaded-worker-pool.js.map +1 -0
  122. package/dist/store/types.d.ts +6 -3
  123. package/dist/store/types.d.ts.map +1 -1
  124. package/dist/store/types.js.map +1 -1
  125. package/dist/unified-provider/compat/index.d.ts +11 -0
  126. package/dist/unified-provider/compat/index.d.ts.map +1 -0
  127. package/dist/unified-provider/compat/index.js +13 -0
  128. package/dist/unified-provider/compat/index.js.map +1 -0
  129. package/dist/unified-provider/compat/legacy-extractors.d.ts +63 -0
  130. package/dist/unified-provider/compat/legacy-extractors.d.ts.map +1 -0
  131. package/dist/unified-provider/compat/legacy-extractors.js +80 -0
  132. package/dist/unified-provider/compat/legacy-extractors.js.map +1 -0
  133. package/dist/unified-provider/compat/legacy-scanner.d.ts +28 -0
  134. package/dist/unified-provider/compat/legacy-scanner.d.ts.map +1 -0
  135. package/dist/unified-provider/compat/legacy-scanner.js +31 -0
  136. package/dist/unified-provider/compat/legacy-scanner.js.map +1 -0
  137. package/dist/unified-provider/index.d.ts +28 -0
  138. package/dist/unified-provider/index.d.ts.map +1 -0
  139. package/dist/unified-provider/index.js +47 -0
  140. package/dist/unified-provider/index.js.map +1 -0
  141. package/dist/unified-provider/integration/index.d.ts +9 -0
  142. package/dist/unified-provider/integration/index.d.ts.map +1 -0
  143. package/dist/unified-provider/integration/index.js +11 -0
  144. package/dist/unified-provider/integration/index.js.map +1 -0
  145. package/dist/unified-provider/integration/unified-data-access-adapter.d.ts +75 -0
  146. package/dist/unified-provider/integration/unified-data-access-adapter.d.ts.map +1 -0
  147. package/dist/unified-provider/integration/unified-data-access-adapter.js +210 -0
  148. package/dist/unified-provider/integration/unified-data-access-adapter.js.map +1 -0
  149. package/dist/unified-provider/integration/unified-scanner.d.ts +90 -0
  150. package/dist/unified-provider/integration/unified-scanner.d.ts.map +1 -0
  151. package/dist/unified-provider/integration/unified-scanner.js +369 -0
  152. package/dist/unified-provider/integration/unified-scanner.js.map +1 -0
  153. package/dist/unified-provider/matching/base-matcher.d.ts +80 -0
  154. package/dist/unified-provider/matching/base-matcher.d.ts.map +1 -0
  155. package/dist/unified-provider/matching/base-matcher.js +196 -0
  156. package/dist/unified-provider/matching/base-matcher.js.map +1 -0
  157. package/dist/unified-provider/matching/django-matcher.d.ts +32 -0
  158. package/dist/unified-provider/matching/django-matcher.d.ts.map +1 -0
  159. package/dist/unified-provider/matching/django-matcher.js +107 -0
  160. package/dist/unified-provider/matching/django-matcher.js.map +1 -0
  161. package/dist/unified-provider/matching/drizzle-matcher.d.ts +25 -0
  162. package/dist/unified-provider/matching/drizzle-matcher.d.ts.map +1 -0
  163. package/dist/unified-provider/matching/drizzle-matcher.js +123 -0
  164. package/dist/unified-provider/matching/drizzle-matcher.js.map +1 -0
  165. package/dist/unified-provider/matching/efcore-matcher.d.ts +27 -0
  166. package/dist/unified-provider/matching/efcore-matcher.d.ts.map +1 -0
  167. package/dist/unified-provider/matching/efcore-matcher.js +88 -0
  168. package/dist/unified-provider/matching/efcore-matcher.js.map +1 -0
  169. package/dist/unified-provider/matching/eloquent-matcher.d.ts +32 -0
  170. package/dist/unified-provider/matching/eloquent-matcher.d.ts.map +1 -0
  171. package/dist/unified-provider/matching/eloquent-matcher.js +162 -0
  172. package/dist/unified-provider/matching/eloquent-matcher.js.map +1 -0
  173. package/dist/unified-provider/matching/index.d.ts +19 -0
  174. package/dist/unified-provider/matching/index.d.ts.map +1 -0
  175. package/dist/unified-provider/matching/index.js +24 -0
  176. package/dist/unified-provider/matching/index.js.map +1 -0
  177. package/dist/unified-provider/matching/knex-matcher.d.ts +26 -0
  178. package/dist/unified-provider/matching/knex-matcher.d.ts.map +1 -0
  179. package/dist/unified-provider/matching/knex-matcher.js +109 -0
  180. package/dist/unified-provider/matching/knex-matcher.js.map +1 -0
  181. package/dist/unified-provider/matching/matcher-registry.d.ts +55 -0
  182. package/dist/unified-provider/matching/matcher-registry.d.ts.map +1 -0
  183. package/dist/unified-provider/matching/matcher-registry.js +130 -0
  184. package/dist/unified-provider/matching/matcher-registry.js.map +1 -0
  185. package/dist/unified-provider/matching/mongoose-matcher.d.ts +30 -0
  186. package/dist/unified-provider/matching/mongoose-matcher.d.ts.map +1 -0
  187. package/dist/unified-provider/matching/mongoose-matcher.js +132 -0
  188. package/dist/unified-provider/matching/mongoose-matcher.js.map +1 -0
  189. package/dist/unified-provider/matching/prisma-matcher.d.ts +31 -0
  190. package/dist/unified-provider/matching/prisma-matcher.d.ts.map +1 -0
  191. package/dist/unified-provider/matching/prisma-matcher.js +123 -0
  192. package/dist/unified-provider/matching/prisma-matcher.js.map +1 -0
  193. package/dist/unified-provider/matching/raw-sql-matcher.d.ts +31 -0
  194. package/dist/unified-provider/matching/raw-sql-matcher.d.ts.map +1 -0
  195. package/dist/unified-provider/matching/raw-sql-matcher.js +173 -0
  196. package/dist/unified-provider/matching/raw-sql-matcher.js.map +1 -0
  197. package/dist/unified-provider/matching/sequelize-matcher.d.ts +28 -0
  198. package/dist/unified-provider/matching/sequelize-matcher.d.ts.map +1 -0
  199. package/dist/unified-provider/matching/sequelize-matcher.js +132 -0
  200. package/dist/unified-provider/matching/sequelize-matcher.js.map +1 -0
  201. package/dist/unified-provider/matching/spring-data-matcher.d.ts +32 -0
  202. package/dist/unified-provider/matching/spring-data-matcher.d.ts.map +1 -0
  203. package/dist/unified-provider/matching/spring-data-matcher.js +112 -0
  204. package/dist/unified-provider/matching/spring-data-matcher.js.map +1 -0
  205. package/dist/unified-provider/matching/sqlalchemy-matcher.d.ts +32 -0
  206. package/dist/unified-provider/matching/sqlalchemy-matcher.d.ts.map +1 -0
  207. package/dist/unified-provider/matching/sqlalchemy-matcher.js +201 -0
  208. package/dist/unified-provider/matching/sqlalchemy-matcher.js.map +1 -0
  209. package/dist/unified-provider/matching/supabase-matcher.d.ts +27 -0
  210. package/dist/unified-provider/matching/supabase-matcher.d.ts.map +1 -0
  211. package/dist/unified-provider/matching/supabase-matcher.js +122 -0
  212. package/dist/unified-provider/matching/supabase-matcher.js.map +1 -0
  213. package/dist/unified-provider/matching/typeorm-matcher.d.ts +32 -0
  214. package/dist/unified-provider/matching/typeorm-matcher.d.ts.map +1 -0
  215. package/dist/unified-provider/matching/typeorm-matcher.js +169 -0
  216. package/dist/unified-provider/matching/typeorm-matcher.js.map +1 -0
  217. package/dist/unified-provider/migration/deprecated-extractors.d.ts +104 -0
  218. package/dist/unified-provider/migration/deprecated-extractors.d.ts.map +1 -0
  219. package/dist/unified-provider/migration/deprecated-extractors.js +129 -0
  220. package/dist/unified-provider/migration/deprecated-extractors.js.map +1 -0
  221. package/dist/unified-provider/migration/deprecated-scanner.d.ts +40 -0
  222. package/dist/unified-provider/migration/deprecated-scanner.d.ts.map +1 -0
  223. package/dist/unified-provider/migration/deprecated-scanner.js +49 -0
  224. package/dist/unified-provider/migration/deprecated-scanner.js.map +1 -0
  225. package/dist/unified-provider/migration/index.d.ts +41 -0
  226. package/dist/unified-provider/migration/index.d.ts.map +1 -0
  227. package/dist/unified-provider/migration/index.js +43 -0
  228. package/dist/unified-provider/migration/index.js.map +1 -0
  229. package/dist/unified-provider/normalization/base-normalizer.d.ts +188 -0
  230. package/dist/unified-provider/normalization/base-normalizer.d.ts.map +1 -0
  231. package/dist/unified-provider/normalization/base-normalizer.js +339 -0
  232. package/dist/unified-provider/normalization/base-normalizer.js.map +1 -0
  233. package/dist/unified-provider/normalization/csharp-normalizer.d.ts +58 -0
  234. package/dist/unified-provider/normalization/csharp-normalizer.d.ts.map +1 -0
  235. package/dist/unified-provider/normalization/csharp-normalizer.js +467 -0
  236. package/dist/unified-provider/normalization/csharp-normalizer.js.map +1 -0
  237. package/dist/unified-provider/normalization/index.d.ts +23 -0
  238. package/dist/unified-provider/normalization/index.d.ts.map +1 -0
  239. package/dist/unified-provider/normalization/index.js +62 -0
  240. package/dist/unified-provider/normalization/index.js.map +1 -0
  241. package/dist/unified-provider/normalization/java-normalizer.d.ts +54 -0
  242. package/dist/unified-provider/normalization/java-normalizer.d.ts.map +1 -0
  243. package/dist/unified-provider/normalization/java-normalizer.js +453 -0
  244. package/dist/unified-provider/normalization/java-normalizer.js.map +1 -0
  245. package/dist/unified-provider/normalization/php-normalizer.d.ts +54 -0
  246. package/dist/unified-provider/normalization/php-normalizer.d.ts.map +1 -0
  247. package/dist/unified-provider/normalization/php-normalizer.js +489 -0
  248. package/dist/unified-provider/normalization/php-normalizer.js.map +1 -0
  249. package/dist/unified-provider/normalization/python-normalizer.d.ts +61 -0
  250. package/dist/unified-provider/normalization/python-normalizer.d.ts.map +1 -0
  251. package/dist/unified-provider/normalization/python-normalizer.js +548 -0
  252. package/dist/unified-provider/normalization/python-normalizer.js.map +1 -0
  253. package/dist/unified-provider/normalization/typescript-normalizer.d.ts +60 -0
  254. package/dist/unified-provider/normalization/typescript-normalizer.d.ts.map +1 -0
  255. package/dist/unified-provider/normalization/typescript-normalizer.js +608 -0
  256. package/dist/unified-provider/normalization/typescript-normalizer.js.map +1 -0
  257. package/dist/unified-provider/parsing/index.d.ts +5 -0
  258. package/dist/unified-provider/parsing/index.d.ts.map +1 -0
  259. package/dist/unified-provider/parsing/index.js +5 -0
  260. package/dist/unified-provider/parsing/index.js.map +1 -0
  261. package/dist/unified-provider/parsing/parser-registry.d.ts +70 -0
  262. package/dist/unified-provider/parsing/parser-registry.d.ts.map +1 -0
  263. package/dist/unified-provider/parsing/parser-registry.js +260 -0
  264. package/dist/unified-provider/parsing/parser-registry.js.map +1 -0
  265. package/dist/unified-provider/provider/index.d.ts +5 -0
  266. package/dist/unified-provider/provider/index.d.ts.map +1 -0
  267. package/dist/unified-provider/provider/index.js +5 -0
  268. package/dist/unified-provider/provider/index.js.map +1 -0
  269. package/dist/unified-provider/provider/unified-language-provider.d.ts +56 -0
  270. package/dist/unified-provider/provider/unified-language-provider.d.ts.map +1 -0
  271. package/dist/unified-provider/provider/unified-language-provider.js +212 -0
  272. package/dist/unified-provider/provider/unified-language-provider.js.map +1 -0
  273. package/dist/unified-provider/types.d.ts +389 -0
  274. package/dist/unified-provider/types.d.ts.map +1 -0
  275. package/dist/unified-provider/types.js +9 -0
  276. package/dist/unified-provider/types.js.map +1 -0
  277. 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":"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"}
@@ -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":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAG/D;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,sBAAsB;IACjD,QAAQ,GAAsB,QAAQ,CAAC;IACvC,UAAU,GAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD,SAAS,GAAG,IAAI,wBAAwB,EAAE,CAAC;IAEnD;;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,kBAAkB;QAClB,IAAI,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACjC,mBAAmB;QACnB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACjC,0DAA0D;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;IACzC,CAAC;IAED;;OAEG;IACgB,uBAAuB,CAAC,GAAW;QACpD,MAAM,IAAI,GAAuB,EAAE,CAAC;QAEpC,kFAAkF;QAClF,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACrD,IAAI,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC5C,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QAED,iFAAiF;QACjF,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC7D,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,UAAiC;QAEjC,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,mCAAmC;QACnC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvE,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBAC7D,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,gEAAgE;QAChE,qDAAqD;QACrD,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxD,qDAAqD;gBACrD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,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,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK;YACrD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO;YACnD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;YAC9B,SAAS,EAAE,UAAU,EAAE,eAAe;SACvC,CAAC;QACF,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CACF"}
@@ -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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"}