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.
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 +21 -17
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Language Intelligence
3
+ *
4
+ * Main entry point for the Language Intelligence Layer.
5
+ * Provides cross-language semantic queries and normalization.
6
+ */
7
+ import { registerAllFrameworks } from './frameworks/index.js';
8
+ import { createAllNormalizers, getNormalizerForFile } from './normalizers/index.js';
9
+ /**
10
+ * Language Intelligence
11
+ *
12
+ * Unified interface for cross-language semantic analysis.
13
+ */
14
+ export class LanguageIntelligence {
15
+ config;
16
+ normalizers;
17
+ initialized = false;
18
+ constructor(config) {
19
+ this.config = config;
20
+ this.normalizers = new Map();
21
+ }
22
+ /**
23
+ * Get the configuration
24
+ */
25
+ getConfig() {
26
+ return this.config;
27
+ }
28
+ /**
29
+ * Initialize the Language Intelligence system
30
+ * Registers all framework patterns and creates normalizers
31
+ */
32
+ initialize() {
33
+ if (this.initialized)
34
+ return;
35
+ // Register all built-in framework patterns
36
+ registerAllFrameworks();
37
+ // Create normalizers for all supported languages
38
+ for (const normalizer of createAllNormalizers()) {
39
+ this.normalizers.set(normalizer.language, normalizer);
40
+ }
41
+ this.initialized = true;
42
+ }
43
+ /**
44
+ * Normalize a single file
45
+ */
46
+ normalizeFile(source, filePath) {
47
+ this.ensureInitialized();
48
+ const normalizer = getNormalizerForFile(filePath);
49
+ if (!normalizer) {
50
+ return null;
51
+ }
52
+ return normalizer.normalize(source, filePath);
53
+ }
54
+ /**
55
+ * Find all entry points across files
56
+ *
57
+ * Entry points are functions marked as HTTP endpoints, event handlers,
58
+ * scheduled tasks, CLI commands, etc.
59
+ */
60
+ findEntryPoints(files) {
61
+ return files.flatMap(f => f.functions.filter(fn => fn.semantics.isEntryPoint));
62
+ }
63
+ /**
64
+ * Find all data accessors across files
65
+ *
66
+ * Data accessors are functions that read from or write to databases.
67
+ * Optionally filter by table name.
68
+ */
69
+ findDataAccessors(files, table) {
70
+ return files.flatMap(f => f.functions.filter(fn => {
71
+ if (!fn.semantics.isDataAccessor)
72
+ return false;
73
+ if (table) {
74
+ return fn.semantics.dataAccess.some(da => da.table === table);
75
+ }
76
+ return true;
77
+ }));
78
+ }
79
+ /**
80
+ * Find all injectable services across files
81
+ */
82
+ findInjectables(files) {
83
+ return files.flatMap(f => f.functions.filter(fn => fn.semantics.isInjectable));
84
+ }
85
+ /**
86
+ * Find all auth handlers across files
87
+ */
88
+ findAuthHandlers(files) {
89
+ return files.flatMap(f => f.functions.filter(fn => fn.semantics.isAuthHandler));
90
+ }
91
+ /**
92
+ * Find all test cases across files
93
+ */
94
+ findTestCases(files) {
95
+ return files.flatMap(f => f.functions.filter(fn => fn.semantics.isTestCase));
96
+ }
97
+ /**
98
+ * Find functions by decorator category
99
+ */
100
+ findByCategory(files, category) {
101
+ return files.flatMap(f => f.functions.filter(fn => fn.normalizedDecorators.some(d => d.semantic.category === category)));
102
+ }
103
+ /**
104
+ * Find functions by framework
105
+ */
106
+ findByFramework(files, framework) {
107
+ return files.flatMap(f => f.functions.filter(fn => fn.normalizedDecorators.some(d => d.framework === framework)));
108
+ }
109
+ /**
110
+ * General query across files
111
+ */
112
+ query(files, options) {
113
+ let functions = files.flatMap(f => f.functions);
114
+ // Apply filters
115
+ if (options.category) {
116
+ functions = functions.filter(fn => fn.normalizedDecorators.some(d => d.semantic.category === options.category));
117
+ }
118
+ if (options.framework) {
119
+ functions = functions.filter(fn => fn.normalizedDecorators.some(d => d.framework === options.framework));
120
+ }
121
+ if (options.language) {
122
+ functions = functions.filter(fn => fn.normalizedDecorators.some(d => d.language === options.language));
123
+ }
124
+ if (options.entryPointsOnly) {
125
+ functions = functions.filter(fn => fn.semantics.isEntryPoint);
126
+ }
127
+ if (options.dataAccessorsOnly) {
128
+ functions = functions.filter(fn => fn.semantics.isDataAccessor);
129
+ }
130
+ if (options.authRequiredOnly) {
131
+ functions = functions.filter(fn => fn.normalizedDecorators.some(d => d.semantic.requiresAuth));
132
+ }
133
+ if (options.table) {
134
+ functions = functions.filter(fn => fn.semantics.dataAccess.some(da => da.table === options.table));
135
+ }
136
+ // Collect metadata
137
+ const filesSet = new Set();
138
+ const frameworksSet = new Set();
139
+ const languagesSet = new Set();
140
+ for (const fn of functions) {
141
+ for (const d of fn.normalizedDecorators) {
142
+ if (d.framework)
143
+ frameworksSet.add(d.framework);
144
+ languagesSet.add(d.language);
145
+ }
146
+ }
147
+ // Get file paths from the original files
148
+ for (const file of files) {
149
+ if (file.functions.some(fn => functions.includes(fn))) {
150
+ filesSet.add(file.file);
151
+ }
152
+ }
153
+ return {
154
+ functions,
155
+ files: Array.from(filesSet),
156
+ frameworks: Array.from(frameworksSet),
157
+ languages: Array.from(languagesSet),
158
+ count: functions.length,
159
+ };
160
+ }
161
+ /**
162
+ * Explain what a decorator means
163
+ *
164
+ * Returns semantic information about a decorator string.
165
+ */
166
+ explainDecorator(decorator, language) {
167
+ this.ensureInitialized();
168
+ const normalizer = this.normalizers.get(language);
169
+ if (!normalizer)
170
+ return null;
171
+ const frameworks = normalizer.detectFrameworks(''); // Empty source, just use all registered
172
+ const normalized = normalizer.normalizeDecorator(decorator, frameworks);
173
+ return normalized.semantic.category !== 'unknown' ? normalized.semantic : null;
174
+ }
175
+ /**
176
+ * Get summary statistics for normalized files
177
+ */
178
+ getSummary(files) {
179
+ const byFramework = {};
180
+ const byLanguage = {};
181
+ const byCategory = {};
182
+ let totalFunctions = 0;
183
+ let entryPoints = 0;
184
+ let dataAccessors = 0;
185
+ let injectables = 0;
186
+ let authHandlers = 0;
187
+ let testCases = 0;
188
+ for (const file of files) {
189
+ for (const fn of file.functions) {
190
+ totalFunctions++;
191
+ if (fn.semantics.isEntryPoint)
192
+ entryPoints++;
193
+ if (fn.semantics.isDataAccessor)
194
+ dataAccessors++;
195
+ if (fn.semantics.isInjectable)
196
+ injectables++;
197
+ if (fn.semantics.isAuthHandler)
198
+ authHandlers++;
199
+ if (fn.semantics.isTestCase)
200
+ testCases++;
201
+ for (const d of fn.normalizedDecorators) {
202
+ if (d.framework) {
203
+ byFramework[d.framework] = (byFramework[d.framework] ?? 0) + 1;
204
+ }
205
+ byLanguage[d.language] = (byLanguage[d.language] ?? 0) + 1;
206
+ byCategory[d.semantic.category] = (byCategory[d.semantic.category] ?? 0) + 1;
207
+ }
208
+ }
209
+ }
210
+ return {
211
+ totalFunctions,
212
+ entryPoints,
213
+ dataAccessors,
214
+ injectables,
215
+ authHandlers,
216
+ testCases,
217
+ byFramework,
218
+ byLanguage,
219
+ byCategory,
220
+ };
221
+ }
222
+ /**
223
+ * Ensure the system is initialized
224
+ */
225
+ ensureInitialized() {
226
+ if (!this.initialized) {
227
+ this.initialize();
228
+ }
229
+ }
230
+ }
231
+ /**
232
+ * Create a new LanguageIntelligence instance
233
+ */
234
+ export function createLanguageIntelligence(config) {
235
+ const intelligence = new LanguageIntelligence(config);
236
+ intelligence.initialize();
237
+ return intelligence;
238
+ }
239
+ //# sourceMappingURL=language-intelligence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-intelligence.js","sourceRoot":"","sources":["../../src/language-intelligence/language-intelligence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * C# Language Normalizer
3
+ *
4
+ * Wraps the existing CSharpCallGraphExtractor and adds semantic normalization.
5
+ * Supports ASP.NET Core 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
+ * C# language normalizer
12
+ */
13
+ export declare class CSharpNormalizer extends BaseLanguageNormalizer {
14
+ readonly language: CallGraphLanguage;
15
+ readonly extensions: string[];
16
+ private extractor;
17
+ /**
18
+ * Extract raw data using the existing C# extractor
19
+ */
20
+ protected extractRaw(source: string, filePath: string): FileExtractionResult;
21
+ /**
22
+ * Extract decorator name from C# attribute
23
+ * C# attributes: [Attribute] or [Attribute(...)]
24
+ */
25
+ protected extractDecoratorName(raw: string): string;
26
+ /**
27
+ * Extract generic arguments from C# attribute
28
+ */
29
+ protected extractGenericArguments(raw: string): DecoratorArguments;
30
+ /**
31
+ * Extract dependencies from constructor parameters (ASP.NET Core DI pattern)
32
+ */
33
+ protected extractDependencies(fn: FunctionExtraction, _decorators: NormalizedDecorator[]): string[];
34
+ /**
35
+ * Check if a type is primitive or common C# type
36
+ */
37
+ private isPrimitiveOrCommon;
38
+ }
39
+ //# sourceMappingURL=csharp-normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csharp-normalizer.d.ts","sourceRoot":"","sources":["../../../src/language-intelligence/normalizers/csharp-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,CAAW;IAExC,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;IAS5D;;OAEG;cACgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAkB3E;;OAEG;cACgB,mBAAmB,CACpC,EAAE,EAAE,kBAAkB,EACtB,WAAW,EAAE,mBAAmB,EAAE,GACjC,MAAM,EAAE;IAoBX;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAW5B"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * C# Language Normalizer
3
+ *
4
+ * Wraps the existing CSharpCallGraphExtractor and adds semantic normalization.
5
+ * Supports ASP.NET Core framework patterns.
6
+ */
7
+ import { CSharpCallGraphExtractor } from '../../call-graph/extractors/csharp-extractor.js';
8
+ import { BaseLanguageNormalizer } from '../base-normalizer.js';
9
+ /**
10
+ * C# language normalizer
11
+ */
12
+ export class CSharpNormalizer extends BaseLanguageNormalizer {
13
+ language = 'csharp';
14
+ extensions = ['.cs'];
15
+ extractor = new CSharpCallGraphExtractor();
16
+ /**
17
+ * Extract raw data using the existing C# extractor
18
+ */
19
+ extractRaw(source, filePath) {
20
+ return this.extractor.extract(source, filePath);
21
+ }
22
+ /**
23
+ * Extract decorator name from C# attribute
24
+ * C# attributes: [Attribute] or [Attribute(...)]
25
+ */
26
+ extractDecoratorName(raw) {
27
+ // Remove brackets and any arguments
28
+ return raw
29
+ .replace(/^\[/, '')
30
+ .replace(/\]$/, '')
31
+ .replace(/\(.*$/, '')
32
+ .trim();
33
+ }
34
+ /**
35
+ * Extract generic arguments from C# attribute
36
+ */
37
+ extractGenericArguments(raw) {
38
+ const args = {};
39
+ // Extract string value: [Attribute("value")] or [Route("path")]
40
+ const valueMatch = raw.match(/\(\s*["']([^"']+)["']/);
41
+ if (valueMatch && valueMatch[1] !== undefined) {
42
+ args.path = valueMatch[1];
43
+ }
44
+ // Extract named parameters: [Authorize(Roles = "Admin")]
45
+ const rolesMatch = raw.match(/Roles\s*=\s*["']([^"']+)["']/);
46
+ if (rolesMatch && rolesMatch[1]) {
47
+ args.roles = rolesMatch[1].split(',').map(r => r.trim());
48
+ }
49
+ return args;
50
+ }
51
+ /**
52
+ * Extract dependencies from constructor parameters (ASP.NET Core DI pattern)
53
+ */
54
+ extractDependencies(fn, _decorators) {
55
+ const deps = [];
56
+ // In ASP.NET Core, constructor injection is the primary DI pattern
57
+ if (fn.isConstructor && fn.parameters.length > 0) {
58
+ for (const param of fn.parameters) {
59
+ if (param.type && !this.isPrimitiveOrCommon(param.type)) {
60
+ // Extract interface name (IUserService -> UserService)
61
+ const typeName = param.type
62
+ .replace(/<.*>/, '') // Remove generics
63
+ .replace(/^I(?=[A-Z])/, '') // Remove I prefix from interfaces
64
+ .trim();
65
+ deps.push(typeName);
66
+ }
67
+ }
68
+ }
69
+ return [...new Set(deps)]; // Deduplicate
70
+ }
71
+ /**
72
+ * Check if a type is primitive or common C# type
73
+ */
74
+ isPrimitiveOrCommon(type) {
75
+ const primitives = [
76
+ 'int', 'long', 'short', 'byte', 'float', 'double', 'decimal', 'bool', 'char',
77
+ 'Int32', 'Int64', 'Int16', 'Byte', 'Single', 'Double', 'Decimal', 'Boolean', 'Char',
78
+ 'string', 'String', 'object', 'Object', 'void', 'Void',
79
+ 'List', 'Dictionary', 'HashSet', 'IEnumerable', 'IList', 'IDictionary',
80
+ 'Task', 'ValueTask', 'CancellationToken',
81
+ 'ILogger', 'IConfiguration', 'IOptions',
82
+ ];
83
+ return primitives.some(p => type.includes(p));
84
+ }
85
+ }
86
+ //# sourceMappingURL=csharp-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csharp-normalizer.js","sourceRoot":"","sources":["../../../src/language-intelligence/normalizers/csharp-normalizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Language Normalizers Index
3
+ *
4
+ * Exports all language-specific normalizers.
5
+ */
6
+ export { JavaNormalizer } from './java-normalizer.js';
7
+ export { PythonNormalizer } from './python-normalizer.js';
8
+ export { TypeScriptNormalizer } from './typescript-normalizer.js';
9
+ export { CSharpNormalizer } from './csharp-normalizer.js';
10
+ export { PhpNormalizer } from './php-normalizer.js';
11
+ import type { CallGraphLanguage } from '../../call-graph/types.js';
12
+ import type { LanguageNormalizer } from '../types.js';
13
+ /**
14
+ * Create a normalizer for a specific language
15
+ */
16
+ export declare function createNormalizer(language: CallGraphLanguage): LanguageNormalizer | null;
17
+ /**
18
+ * Create all available normalizers
19
+ */
20
+ export declare function createAllNormalizers(): LanguageNormalizer[];
21
+ /**
22
+ * Get normalizer for a file based on extension
23
+ */
24
+ export declare function getNormalizerForFile(filePath: string): LanguageNormalizer | null;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/language-intelligence/normalizers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAOtD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,IAAI,CAgBvF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,kBAAkB,EAAE,CAQ3D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAQhF"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Language Normalizers Index
3
+ *
4
+ * Exports all language-specific normalizers.
5
+ */
6
+ export { JavaNormalizer } from './java-normalizer.js';
7
+ export { PythonNormalizer } from './python-normalizer.js';
8
+ export { TypeScriptNormalizer } from './typescript-normalizer.js';
9
+ export { CSharpNormalizer } from './csharp-normalizer.js';
10
+ export { PhpNormalizer } from './php-normalizer.js';
11
+ import { JavaNormalizer } from './java-normalizer.js';
12
+ import { PythonNormalizer } from './python-normalizer.js';
13
+ import { TypeScriptNormalizer } from './typescript-normalizer.js';
14
+ import { CSharpNormalizer } from './csharp-normalizer.js';
15
+ import { PhpNormalizer } from './php-normalizer.js';
16
+ /**
17
+ * Create a normalizer for a specific language
18
+ */
19
+ export function createNormalizer(language) {
20
+ switch (language) {
21
+ case 'java':
22
+ return new JavaNormalizer();
23
+ case 'python':
24
+ return new PythonNormalizer();
25
+ case 'typescript':
26
+ case 'javascript':
27
+ return new TypeScriptNormalizer();
28
+ case 'csharp':
29
+ return new CSharpNormalizer();
30
+ case 'php':
31
+ return new PhpNormalizer();
32
+ default:
33
+ return null;
34
+ }
35
+ }
36
+ /**
37
+ * Create all available normalizers
38
+ */
39
+ export function createAllNormalizers() {
40
+ return [
41
+ new JavaNormalizer(),
42
+ new PythonNormalizer(),
43
+ new TypeScriptNormalizer(),
44
+ new CSharpNormalizer(),
45
+ new PhpNormalizer(),
46
+ ];
47
+ }
48
+ /**
49
+ * Get normalizer for a file based on extension
50
+ */
51
+ export function getNormalizerForFile(filePath) {
52
+ const normalizers = createAllNormalizers();
53
+ for (const normalizer of normalizers) {
54
+ if (normalizer.canHandle(filePath)) {
55
+ return normalizer;
56
+ }
57
+ }
58
+ return null;
59
+ }
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/language-intelligence/normalizers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAA2B;IAC1D,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,IAAI,cAAc,EAAE,CAAC;QAC9B,KAAK,QAAQ;YACX,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAChC,KAAK,YAAY,CAAC;QAClB,KAAK,YAAY;YACf,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACpC,KAAK,QAAQ;YACX,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAChC,KAAK,KAAK;YACR,OAAO,IAAI,aAAa,EAAE,CAAC;QAC7B;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,IAAI,cAAc,EAAE;QACpB,IAAI,gBAAgB,EAAE;QACtB,IAAI,oBAAoB,EAAE;QAC1B,IAAI,gBAAgB,EAAE;QACtB,IAAI,aAAa,EAAE;KACpB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,WAAW,GAAG,oBAAoB,EAAE,CAAC;IAC3C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Java Language Normalizer
3
+ *
4
+ * Wraps the existing JavaCallGraphExtractor and adds semantic normalization.
5
+ * Supports Spring Boot 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
+ * Java language normalizer
12
+ */
13
+ export declare class JavaNormalizer extends BaseLanguageNormalizer {
14
+ readonly language: CallGraphLanguage;
15
+ readonly extensions: string[];
16
+ private extractor;
17
+ /**
18
+ * Extract raw data using the existing Java extractor
19
+ */
20
+ protected extractRaw(source: string, filePath: string): FileExtractionResult;
21
+ /**
22
+ * Extract decorator name from Java annotation
23
+ * Java annotations: @Annotation or @Annotation(...)
24
+ */
25
+ protected extractDecoratorName(raw: string): string;
26
+ /**
27
+ * Extract generic arguments from Java annotation
28
+ */
29
+ protected extractGenericArguments(raw: string): DecoratorArguments;
30
+ /**
31
+ * Extract dependencies from constructor parameters (Spring DI pattern)
32
+ */
33
+ protected extractDependencies(fn: FunctionExtraction, decorators: NormalizedDecorator[]): string[];
34
+ /**
35
+ * Check if a type is primitive or common Java type
36
+ */
37
+ private isPrimitiveOrCommon;
38
+ }
39
+ //# sourceMappingURL=java-normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"java-normalizer.d.ts","sourceRoot":"","sources":["../../../src/language-intelligence/normalizers/java-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,cAAe,SAAQ,sBAAsB;IACxD,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAU;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAa;IAE1C,OAAO,CAAC,SAAS,CAAgC;IAEjD;;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;IAqB3E;;OAEG;cACgB,mBAAmB,CACpC,EAAE,EAAE,kBAAkB,EACtB,UAAU,EAAE,mBAAmB,EAAE,GAChC,MAAM,EAAE;IA+BX;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAS5B"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Java Language Normalizer
3
+ *
4
+ * Wraps the existing JavaCallGraphExtractor and adds semantic normalization.
5
+ * Supports Spring Boot framework patterns.
6
+ */
7
+ import { JavaCallGraphExtractor } from '../../call-graph/extractors/java-extractor.js';
8
+ import { BaseLanguageNormalizer } from '../base-normalizer.js';
9
+ /**
10
+ * Java language normalizer
11
+ */
12
+ export class JavaNormalizer extends BaseLanguageNormalizer {
13
+ language = 'java';
14
+ extensions = ['.java'];
15
+ extractor = new JavaCallGraphExtractor();
16
+ /**
17
+ * Extract raw data using the existing Java extractor
18
+ */
19
+ extractRaw(source, filePath) {
20
+ return this.extractor.extract(source, filePath);
21
+ }
22
+ /**
23
+ * Extract decorator name from Java annotation
24
+ * Java annotations: @Annotation or @Annotation(...)
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 Java annotation
35
+ */
36
+ extractGenericArguments(raw) {
37
+ const args = {};
38
+ // Extract string value: @Annotation("value") or @Annotation(value = "...")
39
+ const valuePatterns = [
40
+ /\(\s*["']([^"']+)["']\s*\)/, // Simple: @Ann("value")
41
+ /value\s*=\s*["']([^"']+)["']/, // Named: @Ann(value = "value")
42
+ /path\s*=\s*["']([^"']+)["']/, // Path: @Ann(path = "/api")
43
+ ];
44
+ for (const pattern of valuePatterns) {
45
+ const match = raw.match(pattern);
46
+ if (match && match[1] !== undefined) {
47
+ args.path = match[1];
48
+ break;
49
+ }
50
+ }
51
+ return args;
52
+ }
53
+ /**
54
+ * Extract dependencies from constructor parameters (Spring DI pattern)
55
+ */
56
+ extractDependencies(fn, decorators) {
57
+ const deps = [];
58
+ // In Spring, constructor injection is the primary DI pattern
59
+ // Dependencies are the constructor parameter types
60
+ if (fn.isConstructor && fn.parameters.length > 0) {
61
+ for (const param of fn.parameters) {
62
+ if (param.type) {
63
+ // Extract the type name (handle generics like List<User>)
64
+ const typeName = param.type.replace(/<.*>/, '').trim();
65
+ // Skip primitive types and common Java types
66
+ if (!this.isPrimitiveOrCommon(typeName)) {
67
+ deps.push(typeName);
68
+ }
69
+ }
70
+ }
71
+ }
72
+ // Also check for @Autowired on fields (though constructor injection is preferred)
73
+ const hasAutowired = decorators.some(d => d.name === 'Autowired');
74
+ if (hasAutowired && fn.parameters.length > 0) {
75
+ for (const param of fn.parameters) {
76
+ if (param.type && !this.isPrimitiveOrCommon(param.type)) {
77
+ deps.push(param.type.replace(/<.*>/, '').trim());
78
+ }
79
+ }
80
+ }
81
+ return [...new Set(deps)]; // Deduplicate
82
+ }
83
+ /**
84
+ * Check if a type is primitive or common Java type
85
+ */
86
+ isPrimitiveOrCommon(type) {
87
+ const primitives = [
88
+ 'int', 'long', 'short', 'byte', 'float', 'double', 'boolean', 'char',
89
+ 'Integer', 'Long', 'Short', 'Byte', 'Float', 'Double', 'Boolean', 'Character',
90
+ 'String', 'Object', 'void', 'Void',
91
+ 'List', 'Set', 'Map', 'Collection', 'Optional',
92
+ ];
93
+ return primitives.includes(type);
94
+ }
95
+ }
96
+ //# sourceMappingURL=java-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"java-normalizer.js","sourceRoot":"","sources":["../../../src/language-intelligence/normalizers/java-normalizer.ts"],"names":[],"mappings":"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"}