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