driftdetect-detectors 0.2.1 → 0.3.0

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 (769) hide show
  1. package/dist/api/laravel/api-semantic.d.ts +26 -0
  2. package/dist/api/laravel/api-semantic.d.ts.map +1 -0
  3. package/dist/api/laravel/api-semantic.js +115 -0
  4. package/dist/api/laravel/api-semantic.js.map +1 -0
  5. package/dist/async/laravel/async-semantic.d.ts +26 -0
  6. package/dist/async/laravel/async-semantic.d.ts.map +1 -0
  7. package/dist/async/laravel/async-semantic.js +118 -0
  8. package/dist/async/laravel/async-semantic.js.map +1 -0
  9. package/dist/auth/aspnet/authorize-attribute-detector.d.ts +82 -0
  10. package/dist/auth/aspnet/authorize-attribute-detector.d.ts.map +1 -0
  11. package/dist/auth/aspnet/authorize-attribute-detector.js +261 -0
  12. package/dist/auth/aspnet/authorize-attribute-detector.js.map +1 -0
  13. package/dist/auth/aspnet/authorize-attribute-semantic.d.ts +41 -0
  14. package/dist/auth/aspnet/authorize-attribute-semantic.d.ts.map +1 -0
  15. package/dist/auth/aspnet/authorize-attribute-semantic.js +159 -0
  16. package/dist/auth/aspnet/authorize-attribute-semantic.js.map +1 -0
  17. package/dist/auth/aspnet/identity-patterns-detector.d.ts +57 -0
  18. package/dist/auth/aspnet/identity-patterns-detector.d.ts.map +1 -0
  19. package/dist/auth/aspnet/identity-patterns-detector.js +205 -0
  20. package/dist/auth/aspnet/identity-patterns-detector.js.map +1 -0
  21. package/dist/auth/aspnet/identity-patterns-semantic.d.ts +42 -0
  22. package/dist/auth/aspnet/identity-patterns-semantic.d.ts.map +1 -0
  23. package/dist/auth/aspnet/identity-patterns-semantic.js +178 -0
  24. package/dist/auth/aspnet/identity-patterns-semantic.js.map +1 -0
  25. package/dist/auth/aspnet/index.d.ts +22 -0
  26. package/dist/auth/aspnet/index.d.ts.map +1 -0
  27. package/dist/auth/aspnet/index.js +28 -0
  28. package/dist/auth/aspnet/index.js.map +1 -0
  29. package/dist/auth/aspnet/jwt-patterns-detector.d.ts +55 -0
  30. package/dist/auth/aspnet/jwt-patterns-detector.d.ts.map +1 -0
  31. package/dist/auth/aspnet/jwt-patterns-detector.js +251 -0
  32. package/dist/auth/aspnet/jwt-patterns-detector.js.map +1 -0
  33. package/dist/auth/aspnet/jwt-patterns-semantic.d.ts +41 -0
  34. package/dist/auth/aspnet/jwt-patterns-semantic.d.ts.map +1 -0
  35. package/dist/auth/aspnet/jwt-patterns-semantic.js +186 -0
  36. package/dist/auth/aspnet/jwt-patterns-semantic.js.map +1 -0
  37. package/dist/auth/aspnet/policy-handlers-detector.d.ts +52 -0
  38. package/dist/auth/aspnet/policy-handlers-detector.d.ts.map +1 -0
  39. package/dist/auth/aspnet/policy-handlers-detector.js +159 -0
  40. package/dist/auth/aspnet/policy-handlers-detector.js.map +1 -0
  41. package/dist/auth/aspnet/policy-handlers-semantic.d.ts +41 -0
  42. package/dist/auth/aspnet/policy-handlers-semantic.d.ts.map +1 -0
  43. package/dist/auth/aspnet/policy-handlers-semantic.js +180 -0
  44. package/dist/auth/aspnet/policy-handlers-semantic.js.map +1 -0
  45. package/dist/auth/aspnet/resource-authorization-detector.d.ts +51 -0
  46. package/dist/auth/aspnet/resource-authorization-detector.d.ts.map +1 -0
  47. package/dist/auth/aspnet/resource-authorization-detector.js +147 -0
  48. package/dist/auth/aspnet/resource-authorization-detector.js.map +1 -0
  49. package/dist/auth/aspnet/resource-authorization-semantic.d.ts +40 -0
  50. package/dist/auth/aspnet/resource-authorization-semantic.d.ts.map +1 -0
  51. package/dist/auth/aspnet/resource-authorization-semantic.js +172 -0
  52. package/dist/auth/aspnet/resource-authorization-semantic.js.map +1 -0
  53. package/dist/auth/index.d.ts +1 -0
  54. package/dist/auth/index.d.ts.map +1 -1
  55. package/dist/auth/index.js +4 -0
  56. package/dist/auth/index.js.map +1 -1
  57. package/dist/auth/laravel/auth-detector.d.ts +64 -0
  58. package/dist/auth/laravel/auth-detector.d.ts.map +1 -0
  59. package/dist/auth/laravel/auth-detector.js +203 -0
  60. package/dist/auth/laravel/auth-detector.js.map +1 -0
  61. package/dist/auth/laravel/auth-semantic.d.ts +41 -0
  62. package/dist/auth/laravel/auth-semantic.d.ts.map +1 -0
  63. package/dist/auth/laravel/auth-semantic.js +187 -0
  64. package/dist/auth/laravel/auth-semantic.js.map +1 -0
  65. package/dist/auth/laravel/extractors/gate-extractor.d.ts +58 -0
  66. package/dist/auth/laravel/extractors/gate-extractor.d.ts.map +1 -0
  67. package/dist/auth/laravel/extractors/gate-extractor.js +284 -0
  68. package/dist/auth/laravel/extractors/gate-extractor.js.map +1 -0
  69. package/dist/auth/laravel/extractors/index.d.ts +9 -0
  70. package/dist/auth/laravel/extractors/index.d.ts.map +1 -0
  71. package/dist/auth/laravel/extractors/index.js +9 -0
  72. package/dist/auth/laravel/extractors/index.js.map +1 -0
  73. package/dist/auth/laravel/extractors/middleware-extractor.d.ts +66 -0
  74. package/dist/auth/laravel/extractors/middleware-extractor.d.ts.map +1 -0
  75. package/dist/auth/laravel/extractors/middleware-extractor.js +341 -0
  76. package/dist/auth/laravel/extractors/middleware-extractor.js.map +1 -0
  77. package/dist/auth/laravel/extractors/policy-extractor.d.ts +70 -0
  78. package/dist/auth/laravel/extractors/policy-extractor.d.ts.map +1 -0
  79. package/dist/auth/laravel/extractors/policy-extractor.js +288 -0
  80. package/dist/auth/laravel/extractors/policy-extractor.js.map +1 -0
  81. package/dist/auth/laravel/index.d.ts +9 -0
  82. package/dist/auth/laravel/index.d.ts.map +1 -0
  83. package/dist/auth/laravel/index.js +12 -0
  84. package/dist/auth/laravel/index.js.map +1 -0
  85. package/dist/auth/laravel/types.d.ts +285 -0
  86. package/dist/auth/laravel/types.d.ts.map +1 -0
  87. package/dist/auth/laravel/types.js +45 -0
  88. package/dist/auth/laravel/types.js.map +1 -0
  89. package/dist/base/semantic-detector.d.ts.map +1 -1
  90. package/dist/base/semantic-detector.js +15 -9
  91. package/dist/base/semantic-detector.js.map +1 -1
  92. package/dist/config/aspnet/index.d.ts +6 -0
  93. package/dist/config/aspnet/index.d.ts.map +1 -0
  94. package/dist/config/aspnet/index.js +9 -0
  95. package/dist/config/aspnet/index.js.map +1 -0
  96. package/dist/config/aspnet/options-pattern-detector.d.ts +42 -0
  97. package/dist/config/aspnet/options-pattern-detector.d.ts.map +1 -0
  98. package/dist/config/aspnet/options-pattern-detector.js +90 -0
  99. package/dist/config/aspnet/options-pattern-detector.js.map +1 -0
  100. package/dist/config/aspnet/options-pattern-semantic.d.ts +44 -0
  101. package/dist/config/aspnet/options-pattern-semantic.d.ts.map +1 -0
  102. package/dist/config/aspnet/options-pattern-semantic.js +182 -0
  103. package/dist/config/aspnet/options-pattern-semantic.js.map +1 -0
  104. package/dist/config/index.d.ts +1 -0
  105. package/dist/config/index.d.ts.map +1 -1
  106. package/dist/config/index.js +4 -0
  107. package/dist/config/index.js.map +1 -1
  108. package/dist/config/laravel/config-detector.d.ts +26 -0
  109. package/dist/config/laravel/config-detector.d.ts.map +1 -0
  110. package/dist/config/laravel/config-detector.js +44 -0
  111. package/dist/config/laravel/config-detector.js.map +1 -0
  112. package/dist/config/laravel/config-semantic.d.ts +27 -0
  113. package/dist/config/laravel/config-semantic.d.ts.map +1 -0
  114. package/dist/config/laravel/config-semantic.js +130 -0
  115. package/dist/config/laravel/config-semantic.js.map +1 -0
  116. package/dist/config/laravel/extractors/env-extractor.d.ts +16 -0
  117. package/dist/config/laravel/extractors/env-extractor.d.ts.map +1 -0
  118. package/dist/config/laravel/extractors/env-extractor.js +41 -0
  119. package/dist/config/laravel/extractors/env-extractor.js.map +1 -0
  120. package/dist/config/laravel/extractors/index.d.ts +7 -0
  121. package/dist/config/laravel/extractors/index.d.ts.map +1 -0
  122. package/dist/config/laravel/extractors/index.js +7 -0
  123. package/dist/config/laravel/extractors/index.js.map +1 -0
  124. package/dist/config/laravel/index.d.ts +9 -0
  125. package/dist/config/laravel/index.d.ts.map +1 -0
  126. package/dist/config/laravel/index.js +9 -0
  127. package/dist/config/laravel/index.js.map +1 -0
  128. package/dist/config/laravel/types.d.ts +23 -0
  129. package/dist/config/laravel/types.d.ts.map +1 -0
  130. package/dist/config/laravel/types.js +7 -0
  131. package/dist/config/laravel/types.js.map +1 -0
  132. package/dist/contracts/aspnet/aspnet-endpoint-detector.d.ts +68 -0
  133. package/dist/contracts/aspnet/aspnet-endpoint-detector.d.ts.map +1 -0
  134. package/dist/contracts/aspnet/aspnet-endpoint-detector.js +481 -0
  135. package/dist/contracts/aspnet/aspnet-endpoint-detector.js.map +1 -0
  136. package/dist/contracts/aspnet/index.d.ts +6 -0
  137. package/dist/contracts/aspnet/index.d.ts.map +1 -0
  138. package/dist/contracts/aspnet/index.js +6 -0
  139. package/dist/contracts/aspnet/index.js.map +1 -0
  140. package/dist/contracts/aspnet/types.d.ts +137 -0
  141. package/dist/contracts/aspnet/types.d.ts.map +1 -0
  142. package/dist/contracts/aspnet/types.js +5 -0
  143. package/dist/contracts/aspnet/types.js.map +1 -0
  144. package/dist/contracts/backend-endpoint-detector.d.ts +8 -1
  145. package/dist/contracts/backend-endpoint-detector.d.ts.map +1 -1
  146. package/dist/contracts/backend-endpoint-detector.js +79 -4
  147. package/dist/contracts/backend-endpoint-detector.js.map +1 -1
  148. package/dist/contracts/django/django-endpoint-detector.d.ts +81 -0
  149. package/dist/contracts/django/django-endpoint-detector.d.ts.map +1 -0
  150. package/dist/contracts/django/django-endpoint-detector.js +291 -0
  151. package/dist/contracts/django/django-endpoint-detector.js.map +1 -0
  152. package/dist/contracts/django/index.d.ts +14 -0
  153. package/dist/contracts/django/index.d.ts.map +1 -0
  154. package/dist/contracts/django/index.js +19 -0
  155. package/dist/contracts/django/index.js.map +1 -0
  156. package/dist/contracts/django/serializer-extractor.d.ts +87 -0
  157. package/dist/contracts/django/serializer-extractor.d.ts.map +1 -0
  158. package/dist/contracts/django/serializer-extractor.js +393 -0
  159. package/dist/contracts/django/serializer-extractor.js.map +1 -0
  160. package/dist/contracts/django/types.d.ts +245 -0
  161. package/dist/contracts/django/types.d.ts.map +1 -0
  162. package/dist/contracts/django/types.js +83 -0
  163. package/dist/contracts/django/types.js.map +1 -0
  164. package/dist/contracts/django/url-extractor.d.ts +80 -0
  165. package/dist/contracts/django/url-extractor.d.ts.map +1 -0
  166. package/dist/contracts/django/url-extractor.js +303 -0
  167. package/dist/contracts/django/url-extractor.js.map +1 -0
  168. package/dist/contracts/django/viewset-extractor.d.ts +95 -0
  169. package/dist/contracts/django/viewset-extractor.d.ts.map +1 -0
  170. package/dist/contracts/django/viewset-extractor.js +405 -0
  171. package/dist/contracts/django/viewset-extractor.js.map +1 -0
  172. package/dist/contracts/index.d.ts +5 -0
  173. package/dist/contracts/index.d.ts.map +1 -1
  174. package/dist/contracts/index.js +10 -0
  175. package/dist/contracts/index.js.map +1 -1
  176. package/dist/contracts/laravel/extractors/controller-extractor.d.ts +97 -0
  177. package/dist/contracts/laravel/extractors/controller-extractor.d.ts.map +1 -0
  178. package/dist/contracts/laravel/extractors/controller-extractor.js +316 -0
  179. package/dist/contracts/laravel/extractors/controller-extractor.js.map +1 -0
  180. package/dist/contracts/laravel/extractors/form-request-extractor.d.ts +61 -0
  181. package/dist/contracts/laravel/extractors/form-request-extractor.d.ts.map +1 -0
  182. package/dist/contracts/laravel/extractors/form-request-extractor.js +200 -0
  183. package/dist/contracts/laravel/extractors/form-request-extractor.js.map +1 -0
  184. package/dist/contracts/laravel/extractors/index.d.ts +14 -0
  185. package/dist/contracts/laravel/extractors/index.d.ts.map +1 -0
  186. package/dist/contracts/laravel/extractors/index.js +14 -0
  187. package/dist/contracts/laravel/extractors/index.js.map +1 -0
  188. package/dist/contracts/laravel/extractors/resource-extractor.d.ts +61 -0
  189. package/dist/contracts/laravel/extractors/resource-extractor.d.ts.map +1 -0
  190. package/dist/contracts/laravel/extractors/resource-extractor.js +254 -0
  191. package/dist/contracts/laravel/extractors/resource-extractor.js.map +1 -0
  192. package/dist/contracts/laravel/extractors/route-extractor.d.ts +87 -0
  193. package/dist/contracts/laravel/extractors/route-extractor.d.ts.map +1 -0
  194. package/dist/contracts/laravel/extractors/route-extractor.js +364 -0
  195. package/dist/contracts/laravel/extractors/route-extractor.js.map +1 -0
  196. package/dist/contracts/laravel/index.d.ts +12 -0
  197. package/dist/contracts/laravel/index.d.ts.map +1 -0
  198. package/dist/contracts/laravel/index.js +15 -0
  199. package/dist/contracts/laravel/index.js.map +1 -0
  200. package/dist/contracts/laravel/laravel-endpoint-detector.d.ts +78 -0
  201. package/dist/contracts/laravel/laravel-endpoint-detector.d.ts.map +1 -0
  202. package/dist/contracts/laravel/laravel-endpoint-detector.js +278 -0
  203. package/dist/contracts/laravel/laravel-endpoint-detector.js.map +1 -0
  204. package/dist/contracts/laravel/types.d.ts +284 -0
  205. package/dist/contracts/laravel/types.d.ts.map +1 -0
  206. package/dist/contracts/laravel/types.js +89 -0
  207. package/dist/contracts/laravel/types.js.map +1 -0
  208. package/dist/contracts/spring/dto-extractor.d.ts +97 -0
  209. package/dist/contracts/spring/dto-extractor.d.ts.map +1 -0
  210. package/dist/contracts/spring/dto-extractor.js +427 -0
  211. package/dist/contracts/spring/dto-extractor.js.map +1 -0
  212. package/dist/contracts/spring/index.d.ts +12 -0
  213. package/dist/contracts/spring/index.d.ts.map +1 -0
  214. package/dist/contracts/spring/index.js +15 -0
  215. package/dist/contracts/spring/index.js.map +1 -0
  216. package/dist/contracts/spring/spring-endpoint-detector.d.ts +136 -0
  217. package/dist/contracts/spring/spring-endpoint-detector.d.ts.map +1 -0
  218. package/dist/contracts/spring/spring-endpoint-detector.js +664 -0
  219. package/dist/contracts/spring/spring-endpoint-detector.js.map +1 -0
  220. package/dist/contracts/spring/types.d.ts +174 -0
  221. package/dist/contracts/spring/types.d.ts.map +1 -0
  222. package/dist/contracts/spring/types.js +52 -0
  223. package/dist/contracts/spring/types.js.map +1 -0
  224. package/dist/contracts/types.d.ts +1 -0
  225. package/dist/contracts/types.d.ts.map +1 -1
  226. package/dist/data-access/aspnet/efcore-patterns-detector.d.ts +60 -0
  227. package/dist/data-access/aspnet/efcore-patterns-detector.d.ts.map +1 -0
  228. package/dist/data-access/aspnet/efcore-patterns-detector.js +230 -0
  229. package/dist/data-access/aspnet/efcore-patterns-detector.js.map +1 -0
  230. package/dist/data-access/aspnet/efcore-patterns-semantic.d.ts +46 -0
  231. package/dist/data-access/aspnet/efcore-patterns-semantic.d.ts.map +1 -0
  232. package/dist/data-access/aspnet/efcore-patterns-semantic.js +176 -0
  233. package/dist/data-access/aspnet/efcore-patterns-semantic.js.map +1 -0
  234. package/dist/data-access/aspnet/index.d.ts +16 -0
  235. package/dist/data-access/aspnet/index.d.ts.map +1 -0
  236. package/dist/data-access/aspnet/index.js +22 -0
  237. package/dist/data-access/aspnet/index.js.map +1 -0
  238. package/dist/data-access/aspnet/repository-pattern-detector.d.ts +56 -0
  239. package/dist/data-access/aspnet/repository-pattern-detector.d.ts.map +1 -0
  240. package/dist/data-access/aspnet/repository-pattern-detector.js +203 -0
  241. package/dist/data-access/aspnet/repository-pattern-detector.js.map +1 -0
  242. package/dist/data-access/aspnet/repository-pattern-semantic.d.ts +44 -0
  243. package/dist/data-access/aspnet/repository-pattern-semantic.d.ts.map +1 -0
  244. package/dist/data-access/aspnet/repository-pattern-semantic.js +187 -0
  245. package/dist/data-access/aspnet/repository-pattern-semantic.js.map +1 -0
  246. package/dist/data-access/boundaries/index.d.ts +12 -0
  247. package/dist/data-access/boundaries/index.d.ts.map +1 -0
  248. package/dist/data-access/boundaries/index.js +12 -0
  249. package/dist/data-access/boundaries/index.js.map +1 -0
  250. package/dist/data-access/boundaries/orm-model-detector.d.ts +24 -0
  251. package/dist/data-access/boundaries/orm-model-detector.d.ts.map +1 -0
  252. package/dist/data-access/boundaries/orm-model-detector.js +91 -0
  253. package/dist/data-access/boundaries/orm-model-detector.js.map +1 -0
  254. package/dist/data-access/boundaries/query-access-detector.d.ts +24 -0
  255. package/dist/data-access/boundaries/query-access-detector.d.ts.map +1 -0
  256. package/dist/data-access/boundaries/query-access-detector.js +92 -0
  257. package/dist/data-access/boundaries/query-access-detector.js.map +1 -0
  258. package/dist/data-access/boundaries/sensitive-field-detector.d.ts +24 -0
  259. package/dist/data-access/boundaries/sensitive-field-detector.d.ts.map +1 -0
  260. package/dist/data-access/boundaries/sensitive-field-detector.js +98 -0
  261. package/dist/data-access/boundaries/sensitive-field-detector.js.map +1 -0
  262. package/dist/data-access/index.d.ts +11 -0
  263. package/dist/data-access/index.d.ts.map +1 -1
  264. package/dist/data-access/index.js +30 -0
  265. package/dist/data-access/index.js.map +1 -1
  266. package/dist/data-access/laravel/eloquent-detector.d.ts +50 -0
  267. package/dist/data-access/laravel/eloquent-detector.d.ts.map +1 -0
  268. package/dist/data-access/laravel/eloquent-detector.js +88 -0
  269. package/dist/data-access/laravel/eloquent-detector.js.map +1 -0
  270. package/dist/data-access/laravel/eloquent-semantic.d.ts +27 -0
  271. package/dist/data-access/laravel/eloquent-semantic.d.ts.map +1 -0
  272. package/dist/data-access/laravel/eloquent-semantic.js +142 -0
  273. package/dist/data-access/laravel/eloquent-semantic.js.map +1 -0
  274. package/dist/data-access/laravel/extractors/eloquent-model-extractor.d.ts +102 -0
  275. package/dist/data-access/laravel/extractors/eloquent-model-extractor.d.ts.map +1 -0
  276. package/dist/data-access/laravel/extractors/eloquent-model-extractor.js +439 -0
  277. package/dist/data-access/laravel/extractors/eloquent-model-extractor.js.map +1 -0
  278. package/dist/data-access/laravel/extractors/index.d.ts +11 -0
  279. package/dist/data-access/laravel/extractors/index.d.ts.map +1 -0
  280. package/dist/data-access/laravel/extractors/index.js +10 -0
  281. package/dist/data-access/laravel/extractors/index.js.map +1 -0
  282. package/dist/data-access/laravel/extractors/query-builder-extractor.d.ts +62 -0
  283. package/dist/data-access/laravel/extractors/query-builder-extractor.d.ts.map +1 -0
  284. package/dist/data-access/laravel/extractors/query-builder-extractor.js +306 -0
  285. package/dist/data-access/laravel/extractors/query-builder-extractor.js.map +1 -0
  286. package/dist/data-access/laravel/extractors/relationship-extractor.d.ts +47 -0
  287. package/dist/data-access/laravel/extractors/relationship-extractor.d.ts.map +1 -0
  288. package/dist/data-access/laravel/extractors/relationship-extractor.js +165 -0
  289. package/dist/data-access/laravel/extractors/relationship-extractor.js.map +1 -0
  290. package/dist/data-access/laravel/extractors/scope-extractor.d.ts +73 -0
  291. package/dist/data-access/laravel/extractors/scope-extractor.d.ts.map +1 -0
  292. package/dist/data-access/laravel/extractors/scope-extractor.js +155 -0
  293. package/dist/data-access/laravel/extractors/scope-extractor.js.map +1 -0
  294. package/dist/data-access/laravel/index.d.ts +9 -0
  295. package/dist/data-access/laravel/index.d.ts.map +1 -0
  296. package/dist/data-access/laravel/index.js +12 -0
  297. package/dist/data-access/laravel/index.js.map +1 -0
  298. package/dist/data-access/laravel/transaction-semantic.d.ts +26 -0
  299. package/dist/data-access/laravel/transaction-semantic.d.ts.map +1 -0
  300. package/dist/data-access/laravel/transaction-semantic.js +106 -0
  301. package/dist/data-access/laravel/transaction-semantic.js.map +1 -0
  302. package/dist/data-access/laravel/types.d.ts +244 -0
  303. package/dist/data-access/laravel/types.d.ts.map +1 -0
  304. package/dist/data-access/laravel/types.js +63 -0
  305. package/dist/data-access/laravel/types.js.map +1 -0
  306. package/dist/documentation/aspnet/index.d.ts +6 -0
  307. package/dist/documentation/aspnet/index.d.ts.map +1 -0
  308. package/dist/documentation/aspnet/index.js +6 -0
  309. package/dist/documentation/aspnet/index.js.map +1 -0
  310. package/dist/documentation/aspnet/xml-documentation-detector.d.ts +44 -0
  311. package/dist/documentation/aspnet/xml-documentation-detector.d.ts.map +1 -0
  312. package/dist/documentation/aspnet/xml-documentation-detector.js +107 -0
  313. package/dist/documentation/aspnet/xml-documentation-detector.js.map +1 -0
  314. package/dist/documentation/aspnet/xml-documentation-semantic.d.ts +38 -0
  315. package/dist/documentation/aspnet/xml-documentation-semantic.d.ts.map +1 -0
  316. package/dist/documentation/aspnet/xml-documentation-semantic.js +120 -0
  317. package/dist/documentation/aspnet/xml-documentation-semantic.js.map +1 -0
  318. package/dist/documentation/index.d.ts +1 -0
  319. package/dist/documentation/index.d.ts.map +1 -1
  320. package/dist/documentation/index.js +4 -0
  321. package/dist/documentation/index.js.map +1 -1
  322. package/dist/errors/aspnet/exception-patterns-detector.d.ts +57 -0
  323. package/dist/errors/aspnet/exception-patterns-detector.d.ts.map +1 -0
  324. package/dist/errors/aspnet/exception-patterns-detector.js +213 -0
  325. package/dist/errors/aspnet/exception-patterns-detector.js.map +1 -0
  326. package/dist/errors/aspnet/exception-patterns-semantic.d.ts +41 -0
  327. package/dist/errors/aspnet/exception-patterns-semantic.d.ts.map +1 -0
  328. package/dist/errors/aspnet/exception-patterns-semantic.js +186 -0
  329. package/dist/errors/aspnet/exception-patterns-semantic.js.map +1 -0
  330. package/dist/errors/aspnet/index.d.ts +10 -0
  331. package/dist/errors/aspnet/index.d.ts.map +1 -0
  332. package/dist/errors/aspnet/index.js +16 -0
  333. package/dist/errors/aspnet/index.js.map +1 -0
  334. package/dist/errors/aspnet/result-pattern-detector.d.ts +53 -0
  335. package/dist/errors/aspnet/result-pattern-detector.d.ts.map +1 -0
  336. package/dist/errors/aspnet/result-pattern-detector.js +168 -0
  337. package/dist/errors/aspnet/result-pattern-detector.js.map +1 -0
  338. package/dist/errors/aspnet/result-pattern-semantic.d.ts +42 -0
  339. package/dist/errors/aspnet/result-pattern-semantic.d.ts.map +1 -0
  340. package/dist/errors/aspnet/result-pattern-semantic.js +196 -0
  341. package/dist/errors/aspnet/result-pattern-semantic.js.map +1 -0
  342. package/dist/errors/index.d.ts +4 -0
  343. package/dist/errors/index.d.ts.map +1 -1
  344. package/dist/errors/index.js +8 -0
  345. package/dist/errors/index.js.map +1 -1
  346. package/dist/errors/laravel/errors-semantic.d.ts +32 -0
  347. package/dist/errors/laravel/errors-semantic.d.ts.map +1 -0
  348. package/dist/errors/laravel/errors-semantic.js +171 -0
  349. package/dist/errors/laravel/errors-semantic.js.map +1 -0
  350. package/dist/errors/laravel/exception-detector.d.ts +29 -0
  351. package/dist/errors/laravel/exception-detector.d.ts.map +1 -0
  352. package/dist/errors/laravel/exception-detector.js +59 -0
  353. package/dist/errors/laravel/exception-detector.js.map +1 -0
  354. package/dist/errors/laravel/extractors/custom-exception-extractor.d.ts +62 -0
  355. package/dist/errors/laravel/extractors/custom-exception-extractor.d.ts.map +1 -0
  356. package/dist/errors/laravel/extractors/custom-exception-extractor.js +312 -0
  357. package/dist/errors/laravel/extractors/custom-exception-extractor.js.map +1 -0
  358. package/dist/errors/laravel/extractors/exception-handler-extractor.d.ts +62 -0
  359. package/dist/errors/laravel/extractors/exception-handler-extractor.d.ts.map +1 -0
  360. package/dist/errors/laravel/extractors/exception-handler-extractor.js +280 -0
  361. package/dist/errors/laravel/extractors/exception-handler-extractor.js.map +1 -0
  362. package/dist/errors/laravel/extractors/index.d.ts +8 -0
  363. package/dist/errors/laravel/extractors/index.d.ts.map +1 -0
  364. package/dist/errors/laravel/extractors/index.js +8 -0
  365. package/dist/errors/laravel/extractors/index.js.map +1 -0
  366. package/dist/errors/laravel/index.d.ts +9 -0
  367. package/dist/errors/laravel/index.d.ts.map +1 -0
  368. package/dist/errors/laravel/index.js +12 -0
  369. package/dist/errors/laravel/index.js.map +1 -0
  370. package/dist/errors/laravel/types.d.ts +207 -0
  371. package/dist/errors/laravel/types.d.ts.map +1 -0
  372. package/dist/errors/laravel/types.js +41 -0
  373. package/dist/errors/laravel/types.js.map +1 -0
  374. package/dist/index.d.ts +10 -5
  375. package/dist/index.d.ts.map +1 -1
  376. package/dist/index.js +84 -3
  377. package/dist/index.js.map +1 -1
  378. package/dist/laravel/index.d.ts +25 -0
  379. package/dist/laravel/index.d.ts.map +1 -0
  380. package/dist/laravel/index.js +55 -0
  381. package/dist/laravel/index.js.map +1 -0
  382. package/dist/logging/aspnet/ilogger-patterns-detector.d.ts +61 -0
  383. package/dist/logging/aspnet/ilogger-patterns-detector.d.ts.map +1 -0
  384. package/dist/logging/aspnet/ilogger-patterns-detector.js +191 -0
  385. package/dist/logging/aspnet/ilogger-patterns-detector.js.map +1 -0
  386. package/dist/logging/aspnet/ilogger-patterns-semantic.d.ts +41 -0
  387. package/dist/logging/aspnet/ilogger-patterns-semantic.d.ts.map +1 -0
  388. package/dist/logging/aspnet/ilogger-patterns-semantic.js +196 -0
  389. package/dist/logging/aspnet/ilogger-patterns-semantic.js.map +1 -0
  390. package/dist/logging/aspnet/index.d.ts +8 -0
  391. package/dist/logging/aspnet/index.d.ts.map +1 -0
  392. package/dist/logging/aspnet/index.js +14 -0
  393. package/dist/logging/aspnet/index.js.map +1 -0
  394. package/dist/logging/index.d.ts +2 -0
  395. package/dist/logging/index.d.ts.map +1 -1
  396. package/dist/logging/index.js +6 -0
  397. package/dist/logging/index.js.map +1 -1
  398. package/dist/logging/laravel/extractors/channel-extractor.d.ts +46 -0
  399. package/dist/logging/laravel/extractors/channel-extractor.d.ts.map +1 -0
  400. package/dist/logging/laravel/extractors/channel-extractor.js +188 -0
  401. package/dist/logging/laravel/extractors/channel-extractor.js.map +1 -0
  402. package/dist/logging/laravel/extractors/index.d.ts +8 -0
  403. package/dist/logging/laravel/extractors/index.d.ts.map +1 -0
  404. package/dist/logging/laravel/extractors/index.js +8 -0
  405. package/dist/logging/laravel/extractors/index.js.map +1 -0
  406. package/dist/logging/laravel/extractors/log-facade-extractor.d.ts +42 -0
  407. package/dist/logging/laravel/extractors/log-facade-extractor.d.ts.map +1 -0
  408. package/dist/logging/laravel/extractors/log-facade-extractor.js +182 -0
  409. package/dist/logging/laravel/extractors/log-facade-extractor.js.map +1 -0
  410. package/dist/logging/laravel/index.d.ts +9 -0
  411. package/dist/logging/laravel/index.d.ts.map +1 -0
  412. package/dist/logging/laravel/index.js +12 -0
  413. package/dist/logging/laravel/index.js.map +1 -0
  414. package/dist/logging/laravel/logging-detector.d.ts +30 -0
  415. package/dist/logging/laravel/logging-detector.d.ts.map +1 -0
  416. package/dist/logging/laravel/logging-detector.js +81 -0
  417. package/dist/logging/laravel/logging-detector.js.map +1 -0
  418. package/dist/logging/laravel/logging-semantic.d.ts +26 -0
  419. package/dist/logging/laravel/logging-semantic.d.ts.map +1 -0
  420. package/dist/logging/laravel/logging-semantic.js +115 -0
  421. package/dist/logging/laravel/logging-semantic.js.map +1 -0
  422. package/dist/logging/laravel/types.d.ts +142 -0
  423. package/dist/logging/laravel/types.d.ts.map +1 -0
  424. package/dist/logging/laravel/types.js +55 -0
  425. package/dist/logging/laravel/types.js.map +1 -0
  426. package/dist/performance/aspnet/async-patterns-detector.d.ts +43 -0
  427. package/dist/performance/aspnet/async-patterns-detector.d.ts.map +1 -0
  428. package/dist/performance/aspnet/async-patterns-detector.js +110 -0
  429. package/dist/performance/aspnet/async-patterns-detector.js.map +1 -0
  430. package/dist/performance/aspnet/async-patterns-semantic.d.ts +39 -0
  431. package/dist/performance/aspnet/async-patterns-semantic.d.ts.map +1 -0
  432. package/dist/performance/aspnet/async-patterns-semantic.js +147 -0
  433. package/dist/performance/aspnet/async-patterns-semantic.js.map +1 -0
  434. package/dist/performance/aspnet/index.d.ts +6 -0
  435. package/dist/performance/aspnet/index.d.ts.map +1 -0
  436. package/dist/performance/aspnet/index.js +6 -0
  437. package/dist/performance/aspnet/index.js.map +1 -0
  438. package/dist/performance/index.d.ts +1 -0
  439. package/dist/performance/index.d.ts.map +1 -1
  440. package/dist/performance/index.js +4 -0
  441. package/dist/performance/index.js.map +1 -1
  442. package/dist/performance/laravel/extractors/cache-extractor.d.ts +15 -0
  443. package/dist/performance/laravel/extractors/cache-extractor.d.ts.map +1 -0
  444. package/dist/performance/laravel/extractors/cache-extractor.js +43 -0
  445. package/dist/performance/laravel/extractors/cache-extractor.js.map +1 -0
  446. package/dist/performance/laravel/extractors/eager-loading-extractor.d.ts +97 -0
  447. package/dist/performance/laravel/extractors/eager-loading-extractor.d.ts.map +1 -0
  448. package/dist/performance/laravel/extractors/eager-loading-extractor.js +236 -0
  449. package/dist/performance/laravel/extractors/eager-loading-extractor.js.map +1 -0
  450. package/dist/performance/laravel/extractors/index.d.ts +11 -0
  451. package/dist/performance/laravel/extractors/index.d.ts.map +1 -0
  452. package/dist/performance/laravel/extractors/index.js +9 -0
  453. package/dist/performance/laravel/extractors/index.js.map +1 -0
  454. package/dist/performance/laravel/extractors/queue-extractor.d.ts +78 -0
  455. package/dist/performance/laravel/extractors/queue-extractor.d.ts.map +1 -0
  456. package/dist/performance/laravel/extractors/queue-extractor.js +252 -0
  457. package/dist/performance/laravel/extractors/queue-extractor.js.map +1 -0
  458. package/dist/performance/laravel/index.d.ts +9 -0
  459. package/dist/performance/laravel/index.d.ts.map +1 -0
  460. package/dist/performance/laravel/index.js +9 -0
  461. package/dist/performance/laravel/index.js.map +1 -0
  462. package/dist/performance/laravel/performance-detector.d.ts +26 -0
  463. package/dist/performance/laravel/performance-detector.d.ts.map +1 -0
  464. package/dist/performance/laravel/performance-detector.js +45 -0
  465. package/dist/performance/laravel/performance-detector.js.map +1 -0
  466. package/dist/performance/laravel/performance-semantic.d.ts +27 -0
  467. package/dist/performance/laravel/performance-semantic.d.ts.map +1 -0
  468. package/dist/performance/laravel/performance-semantic.js +141 -0
  469. package/dist/performance/laravel/performance-semantic.js.map +1 -0
  470. package/dist/performance/laravel/types.d.ts +34 -0
  471. package/dist/performance/laravel/types.d.ts.map +1 -0
  472. package/dist/performance/laravel/types.js +7 -0
  473. package/dist/performance/laravel/types.js.map +1 -0
  474. package/dist/php/attribute-extractor.d.ts +88 -0
  475. package/dist/php/attribute-extractor.d.ts.map +1 -0
  476. package/dist/php/attribute-extractor.js +293 -0
  477. package/dist/php/attribute-extractor.js.map +1 -0
  478. package/dist/php/class-extractor.d.ts +75 -0
  479. package/dist/php/class-extractor.d.ts.map +1 -0
  480. package/dist/php/class-extractor.js +298 -0
  481. package/dist/php/class-extractor.js.map +1 -0
  482. package/dist/php/docblock-extractor.d.ts +84 -0
  483. package/dist/php/docblock-extractor.d.ts.map +1 -0
  484. package/dist/php/docblock-extractor.js +278 -0
  485. package/dist/php/docblock-extractor.js.map +1 -0
  486. package/dist/php/index.d.ts +15 -0
  487. package/dist/php/index.d.ts.map +1 -0
  488. package/dist/php/index.js +17 -0
  489. package/dist/php/index.js.map +1 -0
  490. package/dist/php/method-extractor.d.ts +80 -0
  491. package/dist/php/method-extractor.d.ts.map +1 -0
  492. package/dist/php/method-extractor.js +282 -0
  493. package/dist/php/method-extractor.js.map +1 -0
  494. package/dist/php/types.d.ts +433 -0
  495. package/dist/php/types.d.ts.map +1 -0
  496. package/dist/php/types.js +38 -0
  497. package/dist/php/types.js.map +1 -0
  498. package/dist/security/aspnet/index.d.ts +8 -0
  499. package/dist/security/aspnet/index.d.ts.map +1 -0
  500. package/dist/security/aspnet/index.js +8 -0
  501. package/dist/security/aspnet/index.js.map +1 -0
  502. package/dist/security/aspnet/input-validation-detector.d.ts +54 -0
  503. package/dist/security/aspnet/input-validation-detector.d.ts.map +1 -0
  504. package/dist/security/aspnet/input-validation-detector.js +194 -0
  505. package/dist/security/aspnet/input-validation-detector.js.map +1 -0
  506. package/dist/security/aspnet/input-validation-semantic.d.ts +38 -0
  507. package/dist/security/aspnet/input-validation-semantic.d.ts.map +1 -0
  508. package/dist/security/aspnet/input-validation-semantic.js +161 -0
  509. package/dist/security/aspnet/input-validation-semantic.js.map +1 -0
  510. package/dist/security/index.d.ts +1 -0
  511. package/dist/security/index.d.ts.map +1 -1
  512. package/dist/security/index.js +4 -0
  513. package/dist/security/index.js.map +1 -1
  514. package/dist/security/laravel/extractors/csrf-extractor.d.ts +15 -0
  515. package/dist/security/laravel/extractors/csrf-extractor.d.ts.map +1 -0
  516. package/dist/security/laravel/extractors/csrf-extractor.js +55 -0
  517. package/dist/security/laravel/extractors/csrf-extractor.js.map +1 -0
  518. package/dist/security/laravel/extractors/index.d.ts +11 -0
  519. package/dist/security/laravel/extractors/index.d.ts.map +1 -0
  520. package/dist/security/laravel/extractors/index.js +9 -0
  521. package/dist/security/laravel/extractors/index.js.map +1 -0
  522. package/dist/security/laravel/extractors/mass-assignment-extractor.d.ts +73 -0
  523. package/dist/security/laravel/extractors/mass-assignment-extractor.d.ts.map +1 -0
  524. package/dist/security/laravel/extractors/mass-assignment-extractor.js +231 -0
  525. package/dist/security/laravel/extractors/mass-assignment-extractor.js.map +1 -0
  526. package/dist/security/laravel/extractors/xss-extractor.d.ts +69 -0
  527. package/dist/security/laravel/extractors/xss-extractor.d.ts.map +1 -0
  528. package/dist/security/laravel/extractors/xss-extractor.js +173 -0
  529. package/dist/security/laravel/extractors/xss-extractor.js.map +1 -0
  530. package/dist/security/laravel/index.d.ts +9 -0
  531. package/dist/security/laravel/index.d.ts.map +1 -0
  532. package/dist/security/laravel/index.js +9 -0
  533. package/dist/security/laravel/index.js.map +1 -0
  534. package/dist/security/laravel/security-detector.d.ts +28 -0
  535. package/dist/security/laravel/security-detector.d.ts.map +1 -0
  536. package/dist/security/laravel/security-detector.js +63 -0
  537. package/dist/security/laravel/security-detector.js.map +1 -0
  538. package/dist/security/laravel/security-semantic.d.ts +28 -0
  539. package/dist/security/laravel/security-semantic.d.ts.map +1 -0
  540. package/dist/security/laravel/security-semantic.js +140 -0
  541. package/dist/security/laravel/security-semantic.js.map +1 -0
  542. package/dist/security/laravel/types.d.ts +31 -0
  543. package/dist/security/laravel/types.d.ts.map +1 -0
  544. package/dist/security/laravel/types.js +7 -0
  545. package/dist/security/laravel/types.js.map +1 -0
  546. package/dist/spring/api-learning.d.ts +37 -0
  547. package/dist/spring/api-learning.d.ts.map +1 -0
  548. package/dist/spring/api-learning.js +142 -0
  549. package/dist/spring/api-learning.js.map +1 -0
  550. package/dist/spring/api-semantic.d.ts +26 -0
  551. package/dist/spring/api-semantic.d.ts.map +1 -0
  552. package/dist/spring/api-semantic.js +74 -0
  553. package/dist/spring/api-semantic.js.map +1 -0
  554. package/dist/spring/async-learning.d.ts +40 -0
  555. package/dist/spring/async-learning.d.ts.map +1 -0
  556. package/dist/spring/async-learning.js +193 -0
  557. package/dist/spring/async-learning.js.map +1 -0
  558. package/dist/spring/async-semantic.d.ts +26 -0
  559. package/dist/spring/async-semantic.d.ts.map +1 -0
  560. package/dist/spring/async-semantic.js +86 -0
  561. package/dist/spring/async-semantic.js.map +1 -0
  562. package/dist/spring/auth-learning.d.ts +37 -0
  563. package/dist/spring/auth-learning.d.ts.map +1 -0
  564. package/dist/spring/auth-learning.js +173 -0
  565. package/dist/spring/auth-learning.js.map +1 -0
  566. package/dist/spring/auth-semantic.d.ts +26 -0
  567. package/dist/spring/auth-semantic.d.ts.map +1 -0
  568. package/dist/spring/auth-semantic.js +97 -0
  569. package/dist/spring/auth-semantic.js.map +1 -0
  570. package/dist/spring/config-learning.d.ts +37 -0
  571. package/dist/spring/config-learning.d.ts.map +1 -0
  572. package/dist/spring/config-learning.js +153 -0
  573. package/dist/spring/config-learning.js.map +1 -0
  574. package/dist/spring/config-semantic.d.ts +26 -0
  575. package/dist/spring/config-semantic.d.ts.map +1 -0
  576. package/dist/spring/config-semantic.js +78 -0
  577. package/dist/spring/config-semantic.js.map +1 -0
  578. package/dist/spring/data-learning.d.ts +38 -0
  579. package/dist/spring/data-learning.d.ts.map +1 -0
  580. package/dist/spring/data-learning.js +187 -0
  581. package/dist/spring/data-learning.js.map +1 -0
  582. package/dist/spring/data-semantic.d.ts +26 -0
  583. package/dist/spring/data-semantic.d.ts.map +1 -0
  584. package/dist/spring/data-semantic.js +81 -0
  585. package/dist/spring/data-semantic.js.map +1 -0
  586. package/dist/spring/di-learning.d.ts +37 -0
  587. package/dist/spring/di-learning.d.ts.map +1 -0
  588. package/dist/spring/di-learning.js +160 -0
  589. package/dist/spring/di-learning.js.map +1 -0
  590. package/dist/spring/di-semantic.d.ts +27 -0
  591. package/dist/spring/di-semantic.d.ts.map +1 -0
  592. package/dist/spring/di-semantic.js +75 -0
  593. package/dist/spring/di-semantic.js.map +1 -0
  594. package/dist/spring/errors-learning.d.ts +40 -0
  595. package/dist/spring/errors-learning.d.ts.map +1 -0
  596. package/dist/spring/errors-learning.js +191 -0
  597. package/dist/spring/errors-learning.js.map +1 -0
  598. package/dist/spring/errors-semantic.d.ts +26 -0
  599. package/dist/spring/errors-semantic.d.ts.map +1 -0
  600. package/dist/spring/errors-semantic.js +90 -0
  601. package/dist/spring/errors-semantic.js.map +1 -0
  602. package/dist/spring/index.d.ts +93 -0
  603. package/dist/spring/index.d.ts.map +1 -0
  604. package/dist/spring/index.js +183 -0
  605. package/dist/spring/index.js.map +1 -0
  606. package/dist/spring/keywords.d.ts +85 -0
  607. package/dist/spring/keywords.d.ts.map +1 -0
  608. package/dist/spring/keywords.js +282 -0
  609. package/dist/spring/keywords.js.map +1 -0
  610. package/dist/spring/logging-learning.d.ts +40 -0
  611. package/dist/spring/logging-learning.d.ts.map +1 -0
  612. package/dist/spring/logging-learning.js +209 -0
  613. package/dist/spring/logging-learning.js.map +1 -0
  614. package/dist/spring/logging-semantic.d.ts +26 -0
  615. package/dist/spring/logging-semantic.d.ts.map +1 -0
  616. package/dist/spring/logging-semantic.js +93 -0
  617. package/dist/spring/logging-semantic.js.map +1 -0
  618. package/dist/spring/structural-learning.d.ts +36 -0
  619. package/dist/spring/structural-learning.d.ts.map +1 -0
  620. package/dist/spring/structural-learning.js +137 -0
  621. package/dist/spring/structural-learning.js.map +1 -0
  622. package/dist/spring/structural-semantic.d.ts +26 -0
  623. package/dist/spring/structural-semantic.d.ts.map +1 -0
  624. package/dist/spring/structural-semantic.js +74 -0
  625. package/dist/spring/structural-semantic.js.map +1 -0
  626. package/dist/spring/testing-learning.d.ts +41 -0
  627. package/dist/spring/testing-learning.d.ts.map +1 -0
  628. package/dist/spring/testing-learning.js +187 -0
  629. package/dist/spring/testing-learning.js.map +1 -0
  630. package/dist/spring/testing-semantic.d.ts +26 -0
  631. package/dist/spring/testing-semantic.d.ts.map +1 -0
  632. package/dist/spring/testing-semantic.js +105 -0
  633. package/dist/spring/testing-semantic.js.map +1 -0
  634. package/dist/spring/transaction-learning.d.ts +41 -0
  635. package/dist/spring/transaction-learning.d.ts.map +1 -0
  636. package/dist/spring/transaction-learning.js +165 -0
  637. package/dist/spring/transaction-learning.js.map +1 -0
  638. package/dist/spring/transaction-semantic.d.ts +26 -0
  639. package/dist/spring/transaction-semantic.d.ts.map +1 -0
  640. package/dist/spring/transaction-semantic.js +80 -0
  641. package/dist/spring/transaction-semantic.js.map +1 -0
  642. package/dist/spring/validation-learning.d.ts +40 -0
  643. package/dist/spring/validation-learning.d.ts.map +1 -0
  644. package/dist/spring/validation-learning.js +147 -0
  645. package/dist/spring/validation-learning.js.map +1 -0
  646. package/dist/spring/validation-semantic.d.ts +26 -0
  647. package/dist/spring/validation-semantic.d.ts.map +1 -0
  648. package/dist/spring/validation-semantic.js +92 -0
  649. package/dist/spring/validation-semantic.js.map +1 -0
  650. package/dist/structural/aspnet/di-registration-detector.d.ts +43 -0
  651. package/dist/structural/aspnet/di-registration-detector.d.ts.map +1 -0
  652. package/dist/structural/aspnet/di-registration-detector.js +101 -0
  653. package/dist/structural/aspnet/di-registration-detector.js.map +1 -0
  654. package/dist/structural/aspnet/di-registration-semantic.d.ts +39 -0
  655. package/dist/structural/aspnet/di-registration-semantic.d.ts.map +1 -0
  656. package/dist/structural/aspnet/di-registration-semantic.js +156 -0
  657. package/dist/structural/aspnet/di-registration-semantic.js.map +1 -0
  658. package/dist/structural/aspnet/index.d.ts +6 -0
  659. package/dist/structural/aspnet/index.d.ts.map +1 -0
  660. package/dist/structural/aspnet/index.js +6 -0
  661. package/dist/structural/aspnet/index.js.map +1 -0
  662. package/dist/structural/index.d.ts +1 -0
  663. package/dist/structural/index.d.ts.map +1 -1
  664. package/dist/structural/index.js +4 -0
  665. package/dist/structural/index.js.map +1 -1
  666. package/dist/structural/laravel/di-detector.d.ts +26 -0
  667. package/dist/structural/laravel/di-detector.d.ts.map +1 -0
  668. package/dist/structural/laravel/di-detector.js +45 -0
  669. package/dist/structural/laravel/di-detector.js.map +1 -0
  670. package/dist/structural/laravel/extractors/container-binding-extractor.d.ts +88 -0
  671. package/dist/structural/laravel/extractors/container-binding-extractor.d.ts.map +1 -0
  672. package/dist/structural/laravel/extractors/container-binding-extractor.js +175 -0
  673. package/dist/structural/laravel/extractors/container-binding-extractor.js.map +1 -0
  674. package/dist/structural/laravel/extractors/facade-extractor.d.ts +75 -0
  675. package/dist/structural/laravel/extractors/facade-extractor.d.ts.map +1 -0
  676. package/dist/structural/laravel/extractors/facade-extractor.js +167 -0
  677. package/dist/structural/laravel/extractors/facade-extractor.js.map +1 -0
  678. package/dist/structural/laravel/extractors/index.d.ts +11 -0
  679. package/dist/structural/laravel/extractors/index.d.ts.map +1 -0
  680. package/dist/structural/laravel/extractors/index.js +9 -0
  681. package/dist/structural/laravel/extractors/index.js.map +1 -0
  682. package/dist/structural/laravel/extractors/service-provider-extractor.d.ts +21 -0
  683. package/dist/structural/laravel/extractors/service-provider-extractor.d.ts.map +1 -0
  684. package/dist/structural/laravel/extractors/service-provider-extractor.js +98 -0
  685. package/dist/structural/laravel/extractors/service-provider-extractor.js.map +1 -0
  686. package/dist/structural/laravel/index.d.ts +9 -0
  687. package/dist/structural/laravel/index.d.ts.map +1 -0
  688. package/dist/structural/laravel/index.js +9 -0
  689. package/dist/structural/laravel/index.js.map +1 -0
  690. package/dist/structural/laravel/structural-semantic.d.ts +27 -0
  691. package/dist/structural/laravel/structural-semantic.d.ts.map +1 -0
  692. package/dist/structural/laravel/structural-semantic.js +125 -0
  693. package/dist/structural/laravel/structural-semantic.js.map +1 -0
  694. package/dist/structural/laravel/types.d.ts +37 -0
  695. package/dist/structural/laravel/types.d.ts.map +1 -0
  696. package/dist/structural/laravel/types.js +9 -0
  697. package/dist/structural/laravel/types.js.map +1 -0
  698. package/dist/styling/design-tokens.d.ts.map +1 -1
  699. package/dist/styling/design-tokens.js +2 -1
  700. package/dist/styling/design-tokens.js.map +1 -1
  701. package/dist/testing/aspnet/index.d.ts +8 -0
  702. package/dist/testing/aspnet/index.d.ts.map +1 -0
  703. package/dist/testing/aspnet/index.js +8 -0
  704. package/dist/testing/aspnet/index.js.map +1 -0
  705. package/dist/testing/aspnet/xunit-patterns-detector.d.ts +57 -0
  706. package/dist/testing/aspnet/xunit-patterns-detector.d.ts.map +1 -0
  707. package/dist/testing/aspnet/xunit-patterns-detector.js +210 -0
  708. package/dist/testing/aspnet/xunit-patterns-detector.js.map +1 -0
  709. package/dist/testing/aspnet/xunit-patterns-semantic.d.ts +38 -0
  710. package/dist/testing/aspnet/xunit-patterns-semantic.d.ts.map +1 -0
  711. package/dist/testing/aspnet/xunit-patterns-semantic.js +154 -0
  712. package/dist/testing/aspnet/xunit-patterns-semantic.js.map +1 -0
  713. package/dist/testing/index.d.ts +1 -0
  714. package/dist/testing/index.d.ts.map +1 -1
  715. package/dist/testing/index.js +4 -0
  716. package/dist/testing/index.js.map +1 -1
  717. package/dist/testing/laravel/extractors/factory-extractor.d.ts +55 -0
  718. package/dist/testing/laravel/extractors/factory-extractor.d.ts.map +1 -0
  719. package/dist/testing/laravel/extractors/factory-extractor.js +197 -0
  720. package/dist/testing/laravel/extractors/factory-extractor.js.map +1 -0
  721. package/dist/testing/laravel/extractors/index.d.ts +9 -0
  722. package/dist/testing/laravel/extractors/index.d.ts.map +1 -0
  723. package/dist/testing/laravel/extractors/index.js +9 -0
  724. package/dist/testing/laravel/extractors/index.js.map +1 -0
  725. package/dist/testing/laravel/extractors/mock-extractor.d.ts +62 -0
  726. package/dist/testing/laravel/extractors/mock-extractor.d.ts.map +1 -0
  727. package/dist/testing/laravel/extractors/mock-extractor.js +305 -0
  728. package/dist/testing/laravel/extractors/mock-extractor.js.map +1 -0
  729. package/dist/testing/laravel/extractors/test-case-extractor.d.ts +23 -0
  730. package/dist/testing/laravel/extractors/test-case-extractor.d.ts.map +1 -0
  731. package/dist/testing/laravel/extractors/test-case-extractor.js +143 -0
  732. package/dist/testing/laravel/extractors/test-case-extractor.js.map +1 -0
  733. package/dist/testing/laravel/index.d.ts +9 -0
  734. package/dist/testing/laravel/index.d.ts.map +1 -0
  735. package/dist/testing/laravel/index.js +9 -0
  736. package/dist/testing/laravel/index.js.map +1 -0
  737. package/dist/testing/laravel/testing-detector.d.ts +28 -0
  738. package/dist/testing/laravel/testing-detector.d.ts.map +1 -0
  739. package/dist/testing/laravel/testing-detector.js +52 -0
  740. package/dist/testing/laravel/testing-detector.js.map +1 -0
  741. package/dist/testing/laravel/testing-semantic.d.ts +27 -0
  742. package/dist/testing/laravel/testing-semantic.d.ts.map +1 -0
  743. package/dist/testing/laravel/testing-semantic.js +130 -0
  744. package/dist/testing/laravel/testing-semantic.js.map +1 -0
  745. package/dist/testing/laravel/types.d.ts +163 -0
  746. package/dist/testing/laravel/types.d.ts.map +1 -0
  747. package/dist/testing/laravel/types.js +47 -0
  748. package/dist/testing/laravel/types.js.map +1 -0
  749. package/dist/types/aspnet/index.d.ts +6 -0
  750. package/dist/types/aspnet/index.d.ts.map +1 -0
  751. package/dist/types/aspnet/index.js +6 -0
  752. package/dist/types/aspnet/index.js.map +1 -0
  753. package/dist/types/aspnet/record-patterns-detector.d.ts +43 -0
  754. package/dist/types/aspnet/record-patterns-detector.d.ts.map +1 -0
  755. package/dist/types/aspnet/record-patterns-detector.js +95 -0
  756. package/dist/types/aspnet/record-patterns-detector.js.map +1 -0
  757. package/dist/types/aspnet/record-patterns-semantic.d.ts +38 -0
  758. package/dist/types/aspnet/record-patterns-semantic.d.ts.map +1 -0
  759. package/dist/types/aspnet/record-patterns-semantic.js +145 -0
  760. package/dist/types/aspnet/record-patterns-semantic.js.map +1 -0
  761. package/dist/types/index.d.ts +1 -0
  762. package/dist/types/index.d.ts.map +1 -1
  763. package/dist/types/index.js +4 -0
  764. package/dist/types/index.js.map +1 -1
  765. package/dist/validation/laravel/validation-semantic.d.ts +26 -0
  766. package/dist/validation/laravel/validation-semantic.d.ts.map +1 -0
  767. package/dist/validation/laravel/validation-semantic.js +118 -0
  768. package/dist/validation/laravel/validation-semantic.js.map +1 -0
  769. package/package.json +2 -2
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Laravel API Patterns Detector - SEMANTIC VERSION
3
+ *
4
+ * Learns API patterns from your Laravel codebase:
5
+ * - Controller patterns (resource, invokable, API)
6
+ * - Route patterns (RESTful, API versioning)
7
+ * - Response patterns (JSON, Resources, Collections)
8
+ * - Request handling patterns
9
+ */
10
+ import type { Violation, Language } from 'driftdetect-core';
11
+ import { SemanticDetector, type SemanticMatch, type UsagePattern } from '../../base/semantic-detector.js';
12
+ export declare class LaravelAPISemanticDetector extends SemanticDetector {
13
+ readonly id = "api/laravel-api-semantic";
14
+ readonly name = "Laravel API Patterns Detector";
15
+ readonly description = "Learns API patterns from your Laravel codebase";
16
+ readonly category: "api";
17
+ readonly subcategory = "laravel";
18
+ readonly supportedLanguages: Language[];
19
+ constructor();
20
+ protected getSemanticKeywords(): string[];
21
+ protected getSemanticCategory(): string;
22
+ protected isRelevantMatch(match: SemanticMatch): boolean;
23
+ protected createPatternViolation(match: SemanticMatch, dominantPattern: UsagePattern): Violation;
24
+ }
25
+ export declare function createLaravelAPISemanticDetector(): LaravelAPISemanticDetector;
26
+ //# sourceMappingURL=api-semantic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-semantic.d.ts","sourceRoot":"","sources":["../../../src/api/laravel/api-semantic.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,iCAAiC,CAAC;AAezC,qBAAa,0BAA2B,SAAQ,gBAAgB;IAC9D,QAAQ,CAAC,EAAE,8BAA8B;IACzC,QAAQ,CAAC,IAAI,mCAAmC;IAChD,QAAQ,CAAC,WAAW,oDAAoD;IACxE,QAAQ,CAAC,QAAQ,EAAG,KAAK,CAAU;IACnC,QAAQ,CAAC,WAAW,aAAa;IAEjC,SAAkB,kBAAkB,EAAE,QAAQ,EAAE,CAAW;;IAY3D,SAAS,CAAC,mBAAmB,IAAI,MAAM,EAAE;IAkCzC,SAAS,CAAC,mBAAmB,IAAI,MAAM;cAKpB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IA6BjE,SAAS,CAAC,sBAAsB,CAC9B,KAAK,EAAE,aAAa,EACpB,eAAe,EAAE,YAAY,GAC5B,SAAS;CAoBb;AAED,wBAAgB,gCAAgC,IAAI,0BAA0B,CAE7E"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Laravel API Patterns Detector - SEMANTIC VERSION
3
+ *
4
+ * Learns API patterns from your Laravel codebase:
5
+ * - Controller patterns (resource, invokable, API)
6
+ * - Route patterns (RESTful, API versioning)
7
+ * - Response patterns (JSON, Resources, Collections)
8
+ * - Request handling patterns
9
+ */
10
+ import { SemanticDetector, } from '../../base/semantic-detector.js';
11
+ const API_FILE_PATTERNS = [
12
+ /controllers\//i, /routes\//i, /resources\//i,
13
+ /api\.php$/i, /requests\//i,
14
+ ];
15
+ const API_CONTEXT_KEYWORDS = [
16
+ 'illuminate\\routing', 'illuminate\\http',
17
+ 'route::', 'response()', 'request()',
18
+ 'jsonresource', 'resourcecollection',
19
+ 'apiresource', 'controller',
20
+ ];
21
+ export class LaravelAPISemanticDetector extends SemanticDetector {
22
+ id = 'api/laravel-api-semantic';
23
+ name = 'Laravel API Patterns Detector';
24
+ description = 'Learns API patterns from your Laravel codebase';
25
+ category = 'api';
26
+ subcategory = 'laravel';
27
+ supportedLanguages = ['php'];
28
+ constructor() {
29
+ super({
30
+ minOccurrences: 2,
31
+ dominanceThreshold: 0.3,
32
+ minFiles: 1,
33
+ includeComments: false,
34
+ includeStrings: false,
35
+ });
36
+ }
37
+ getSemanticKeywords() {
38
+ return [
39
+ // Controllers
40
+ 'Controller', 'ResourceController', 'ApiController',
41
+ 'index', 'show', 'store', 'update', 'destroy',
42
+ '__invoke', 'callAction',
43
+ // Routes
44
+ 'Route', 'get', 'post', 'put', 'patch', 'delete', 'options',
45
+ 'resource', 'apiResource', 'singleton',
46
+ 'prefix', 'middleware', 'name', 'group',
47
+ 'where', 'whereNumber', 'whereAlpha', 'whereUuid',
48
+ // Responses
49
+ 'response', 'json', 'jsonResponse', 'download', 'file', 'redirect',
50
+ 'JsonResource', 'ResourceCollection', 'AnonymousResourceCollection',
51
+ 'toArray', 'with', 'additional', 'wrap',
52
+ // Requests
53
+ 'Request', 'FormRequest', 'input', 'query', 'all', 'only', 'except',
54
+ 'validated', 'validate', 'rules', 'authorize',
55
+ 'has', 'filled', 'missing', 'whenHas', 'whenFilled',
56
+ // API versioning
57
+ 'v1', 'v2', 'api', 'version',
58
+ // Rate limiting
59
+ 'throttle', 'RateLimiter',
60
+ // Sanctum/Passport
61
+ 'sanctum', 'passport', 'token', 'abilities',
62
+ ];
63
+ }
64
+ getSemanticCategory() {
65
+ return 'api';
66
+ }
67
+ isRelevantMatch(match) {
68
+ const { file, lineContent, surroundingContext, keyword } = match;
69
+ const contextLower = surroundingContext.toLowerCase();
70
+ const highConfidenceKeywords = [
71
+ 'Controller', 'Route', 'JsonResource', 'ResourceCollection',
72
+ 'FormRequest', 'apiResource', 'sanctum', 'passport',
73
+ ];
74
+ if (highConfidenceKeywords.includes(keyword)) {
75
+ return true;
76
+ }
77
+ if (/^\s*\/\//.test(lineContent) || /^\s*\/\*/.test(lineContent)) {
78
+ return false;
79
+ }
80
+ const ambiguousKeywords = ['get', 'post', 'put', 'delete', 'index', 'show', 'store', 'update'];
81
+ if (ambiguousKeywords.includes(keyword.toLowerCase())) {
82
+ const hasContext = API_CONTEXT_KEYWORDS.some(k => contextLower.includes(k));
83
+ if (!hasContext) {
84
+ const inApiFile = API_FILE_PATTERNS.some(p => p.test(file));
85
+ if (!inApiFile)
86
+ return false;
87
+ }
88
+ }
89
+ return true;
90
+ }
91
+ createPatternViolation(match, dominantPattern) {
92
+ return {
93
+ id: `${this.id}-${match.file}-${match.line}-${match.column}`,
94
+ patternId: this.id,
95
+ severity: 'warning',
96
+ file: match.file,
97
+ range: {
98
+ start: { line: match.line - 1, character: match.column - 1 },
99
+ end: { line: match.line - 1, character: match.column + match.matchedText.length - 1 },
100
+ },
101
+ message: `Inconsistent API pattern: using '${match.contextType}' but project primarily uses '${dominantPattern.contextType}'`,
102
+ expected: dominantPattern.contextType,
103
+ actual: match.contextType,
104
+ explanation: `Your Laravel project uses '${dominantPattern.contextType}' for API patterns in ${dominantPattern.percentage.toFixed(0)}% of cases.`,
105
+ aiExplainAvailable: true,
106
+ aiFixAvailable: true,
107
+ firstSeen: new Date(),
108
+ occurrences: 1,
109
+ };
110
+ }
111
+ }
112
+ export function createLaravelAPISemanticDetector() {
113
+ return new LaravelAPISemanticDetector();
114
+ }
115
+ //# sourceMappingURL=api-semantic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-semantic.js","sourceRoot":"","sources":["../../../src/api/laravel/api-semantic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Laravel Async Patterns Detector - SEMANTIC VERSION
3
+ *
4
+ * Learns async patterns from your Laravel codebase:
5
+ * - Job patterns (dispatch, queues)
6
+ * - Event patterns (listeners, subscribers)
7
+ * - Broadcasting patterns
8
+ * - Scheduled tasks
9
+ */
10
+ import type { Violation, Language } from 'driftdetect-core';
11
+ import { SemanticDetector, type SemanticMatch, type UsagePattern } from '../../base/semantic-detector.js';
12
+ export declare class LaravelAsyncSemanticDetector extends SemanticDetector {
13
+ readonly id = "async/laravel-async-semantic";
14
+ readonly name = "Laravel Async Patterns Detector";
15
+ readonly description = "Learns async patterns (jobs, events, queues) from your Laravel codebase";
16
+ readonly category: "performance";
17
+ readonly subcategory = "laravel";
18
+ readonly supportedLanguages: Language[];
19
+ constructor();
20
+ protected getSemanticKeywords(): string[];
21
+ protected getSemanticCategory(): string;
22
+ protected isRelevantMatch(match: SemanticMatch): boolean;
23
+ protected createPatternViolation(match: SemanticMatch, dominantPattern: UsagePattern): Violation;
24
+ }
25
+ export declare function createLaravelAsyncSemanticDetector(): LaravelAsyncSemanticDetector;
26
+ //# sourceMappingURL=async-semantic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-semantic.d.ts","sourceRoot":"","sources":["../../../src/async/laravel/async-semantic.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,iCAAiC,CAAC;AAiBzC,qBAAa,4BAA6B,SAAQ,gBAAgB;IAChE,QAAQ,CAAC,EAAE,kCAAkC;IAC7C,QAAQ,CAAC,IAAI,qCAAqC;IAClD,QAAQ,CAAC,WAAW,6EAA6E;IACjG,QAAQ,CAAC,QAAQ,EAAG,aAAa,CAAU;IAC3C,QAAQ,CAAC,WAAW,aAAa;IAEjC,SAAkB,kBAAkB,EAAE,QAAQ,EAAE,CAAW;;IAY3D,SAAS,CAAC,mBAAmB,IAAI,MAAM,EAAE;IAiCzC,SAAS,CAAC,mBAAmB,IAAI,MAAM;cAKpB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IA8BjE,SAAS,CAAC,sBAAsB,CAC9B,KAAK,EAAE,aAAa,EACpB,eAAe,EAAE,YAAY,GAC5B,SAAS;CAoBb;AAED,wBAAgB,kCAAkC,IAAI,4BAA4B,CAEjF"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Laravel Async Patterns Detector - SEMANTIC VERSION
3
+ *
4
+ * Learns async patterns from your Laravel codebase:
5
+ * - Job patterns (dispatch, queues)
6
+ * - Event patterns (listeners, subscribers)
7
+ * - Broadcasting patterns
8
+ * - Scheduled tasks
9
+ */
10
+ import { SemanticDetector, } from '../../base/semantic-detector.js';
11
+ const ASYNC_FILE_PATTERNS = [
12
+ /jobs\//i, /events\//i, /listeners\//i,
13
+ /subscribers\//i, /broadcasting\//i,
14
+ /console\/kernel/i,
15
+ ];
16
+ const ASYNC_CONTEXT_KEYWORDS = [
17
+ 'illuminate\\contracts\\queue',
18
+ 'illuminate\\bus\\queueable',
19
+ 'illuminate\\queue\\interactswithqueue',
20
+ 'shouldqueue', 'dispatchable', 'queueable',
21
+ 'dispatch(', 'event(', 'broadcast(',
22
+ ];
23
+ export class LaravelAsyncSemanticDetector extends SemanticDetector {
24
+ id = 'async/laravel-async-semantic';
25
+ name = 'Laravel Async Patterns Detector';
26
+ description = 'Learns async patterns (jobs, events, queues) from your Laravel codebase';
27
+ category = 'performance';
28
+ subcategory = 'laravel';
29
+ supportedLanguages = ['php'];
30
+ constructor() {
31
+ super({
32
+ minOccurrences: 2,
33
+ dominanceThreshold: 0.3,
34
+ minFiles: 1,
35
+ includeComments: false,
36
+ includeStrings: false,
37
+ });
38
+ }
39
+ getSemanticKeywords() {
40
+ return [
41
+ // Jobs
42
+ 'Job', 'ShouldQueue', 'Dispatchable', 'Queueable', 'InteractsWithQueue',
43
+ 'SerializesModels', 'dispatch', 'dispatchSync', 'dispatchNow',
44
+ 'dispatchAfterResponse', 'handle', 'failed', 'retryUntil',
45
+ 'tries', 'timeout', 'backoff', 'maxExceptions',
46
+ 'onQueue', 'onConnection', 'delay', 'afterCommit',
47
+ // Batches
48
+ 'Bus', 'batch', 'chain', 'Batch', 'PendingBatch',
49
+ 'allowFailures', 'then', 'catch', 'finally',
50
+ // Events
51
+ 'Event', 'event', 'Listener', 'listen', 'subscribe',
52
+ 'ShouldBroadcast', 'ShouldBroadcastNow', 'broadcastOn',
53
+ 'broadcastAs', 'broadcastWith', 'broadcastWhen',
54
+ // Broadcasting
55
+ 'broadcast', 'Channel', 'PrivateChannel', 'PresenceChannel',
56
+ 'Pusher', 'Echo', 'whisper', 'here', 'joining', 'leaving',
57
+ // Scheduling
58
+ 'schedule', 'command', 'call', 'job', 'exec',
59
+ 'everyMinute', 'hourly', 'daily', 'weekly', 'monthly',
60
+ 'cron', 'timezone', 'withoutOverlapping', 'runInBackground',
61
+ // Notifications
62
+ 'Notification', 'notify', 'notifyNow', 'Notifiable',
63
+ 'via', 'toMail', 'toDatabase', 'toArray', 'toBroadcast',
64
+ ];
65
+ }
66
+ getSemanticCategory() {
67
+ return 'async';
68
+ }
69
+ isRelevantMatch(match) {
70
+ const { file, lineContent, surroundingContext, keyword } = match;
71
+ const contextLower = surroundingContext.toLowerCase();
72
+ const highConfidenceKeywords = [
73
+ 'Job', 'ShouldQueue', 'Dispatchable', 'dispatch',
74
+ 'Event', 'Listener', 'ShouldBroadcast', 'broadcast',
75
+ 'Notification', 'schedule', 'Bus', 'batch',
76
+ ];
77
+ if (highConfidenceKeywords.includes(keyword)) {
78
+ return true;
79
+ }
80
+ if (/^\s*\/\//.test(lineContent) || /^\s*\/\*/.test(lineContent)) {
81
+ return false;
82
+ }
83
+ const ambiguousKeywords = ['handle', 'event', 'listen', 'call', 'job'];
84
+ if (ambiguousKeywords.includes(keyword.toLowerCase())) {
85
+ const hasContext = ASYNC_CONTEXT_KEYWORDS.some(k => contextLower.includes(k));
86
+ if (!hasContext) {
87
+ const inAsyncFile = ASYNC_FILE_PATTERNS.some(p => p.test(file));
88
+ if (!inAsyncFile)
89
+ return false;
90
+ }
91
+ }
92
+ return true;
93
+ }
94
+ createPatternViolation(match, dominantPattern) {
95
+ return {
96
+ id: `${this.id}-${match.file}-${match.line}-${match.column}`,
97
+ patternId: this.id,
98
+ severity: 'warning',
99
+ file: match.file,
100
+ range: {
101
+ start: { line: match.line - 1, character: match.column - 1 },
102
+ end: { line: match.line - 1, character: match.column + match.matchedText.length - 1 },
103
+ },
104
+ message: `Inconsistent async pattern: using '${match.contextType}' but project primarily uses '${dominantPattern.contextType}'`,
105
+ expected: dominantPattern.contextType,
106
+ actual: match.contextType,
107
+ explanation: `Your Laravel project uses '${dominantPattern.contextType}' for async patterns in ${dominantPattern.percentage.toFixed(0)}% of cases.`,
108
+ aiExplainAvailable: true,
109
+ aiFixAvailable: true,
110
+ firstSeen: new Date(),
111
+ occurrences: 1,
112
+ };
113
+ }
114
+ }
115
+ export function createLaravelAsyncSemanticDetector() {
116
+ return new LaravelAsyncSemanticDetector();
117
+ }
118
+ //# sourceMappingURL=async-semantic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-semantic.js","sourceRoot":"","sources":["../../../src/async/laravel/async-semantic.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,gBAAgB,GAGjB,MAAM,iCAAiC,CAAC;AAEzC,MAAM,mBAAmB,GAAG;IAC1B,SAAS,EAAE,WAAW,EAAE,cAAc;IACtC,gBAAgB,EAAE,iBAAiB;IACnC,kBAAkB;CACnB,CAAC;AAEF,MAAM,sBAAsB,GAAG;IAC7B,8BAA8B;IAC9B,4BAA4B;IAC5B,uCAAuC;IACvC,aAAa,EAAE,cAAc,EAAE,WAAW;IAC1C,WAAW,EAAE,QAAQ,EAAE,YAAY;CACpC,CAAC;AAGF,MAAM,OAAO,4BAA6B,SAAQ,gBAAgB;IACvD,EAAE,GAAG,8BAA8B,CAAC;IACpC,IAAI,GAAG,iCAAiC,CAAC;IACzC,WAAW,GAAG,yEAAyE,CAAC;IACxF,QAAQ,GAAG,aAAsB,CAAC;IAClC,WAAW,GAAG,SAAS,CAAC;IAEf,kBAAkB,GAAe,CAAC,KAAK,CAAC,CAAC;IAE3D;QACE,KAAK,CAAC;YACJ,cAAc,EAAE,CAAC;YACjB,kBAAkB,EAAE,GAAG;YACvB,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;SACtB,CAAC,CAAC;IACL,CAAC;IAES,mBAAmB;QAC3B,OAAO;YACL,OAAO;YACP,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,oBAAoB;YACvE,kBAAkB,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa;YAC7D,uBAAuB,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY;YACzD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe;YAC9C,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa;YAEjD,UAAU;YACV,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc;YAChD,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS;YAE3C,SAAS;YACT,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW;YACnD,iBAAiB,EAAE,oBAAoB,EAAE,aAAa;YACtD,aAAa,EAAE,eAAe,EAAE,eAAe;YAE/C,eAAe;YACf,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB;YAC3D,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS;YAEzD,aAAa;YACb,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;YAC5C,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS;YACrD,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,iBAAiB;YAE3D,gBAAgB;YAChB,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY;YACnD,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa;SACxD,CAAC;IACJ,CAAC;IAES,mBAAmB;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAGkB,eAAe,CAAC,KAAoB;QACrD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QACjE,MAAM,YAAY,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC;QAEtD,MAAM,sBAAsB,GAAG;YAC7B,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU;YAChD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW;YACnD,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO;SAC3C,CAAC;QAEF,IAAI,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACjE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACvE,IAAI,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACtD,MAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,WAAW;oBAAE,OAAO,KAAK,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAES,sBAAsB,CAC9B,KAAoB,EACpB,eAA6B;QAE7B,OAAO;YACL,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE;YAC5D,SAAS,EAAE,IAAI,CAAC,EAAE;YAClB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE;gBACL,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5D,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;aACtF;YACD,OAAO,EAAE,sCAAsC,KAAK,CAAC,WAAW,iCAAiC,eAAe,CAAC,WAAW,GAAG;YAC/H,QAAQ,EAAE,eAAe,CAAC,WAAW;YACrC,MAAM,EAAE,KAAK,CAAC,WAAW;YACzB,WAAW,EAAE,8BAA8B,eAAe,CAAC,WAAW,2BAA2B,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa;YACnJ,kBAAkB,EAAE,IAAI;YACxB,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,WAAW,EAAE,CAAC;SACf,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,kCAAkC;IAChD,OAAO,IAAI,4BAA4B,EAAE,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * ASP.NET Core Authorize Attribute Detector
3
+ *
4
+ * Detects authorization patterns in ASP.NET Core applications:
5
+ * - [Authorize] attribute usage
6
+ * - [Authorize(Roles = "...")] role-based authorization
7
+ * - [Authorize(Policy = "...")] policy-based authorization
8
+ * - [AllowAnonymous] exceptions
9
+ * - Authorization at controller vs action level
10
+ */
11
+ import type { Language } from 'driftdetect-core';
12
+ import type { DetectionContext, DetectionResult } from '../../base/base-detector.js';
13
+ import { BaseDetector } from '../../base/base-detector.js';
14
+ export interface AuthorizeAttributeInfo {
15
+ /** Type of authorization */
16
+ type: 'authorize' | 'allow-anonymous' | 'authorize-roles' | 'authorize-policy';
17
+ /** Roles if specified */
18
+ roles: string[];
19
+ /** Policy name if specified */
20
+ policy: string | null;
21
+ /** Authentication schemes if specified */
22
+ authenticationSchemes: string[];
23
+ /** Whether this is at controller level */
24
+ isControllerLevel: boolean;
25
+ /** The target (controller name or action name) */
26
+ target: string;
27
+ /** Line number */
28
+ line: number;
29
+ /** File path */
30
+ file: string;
31
+ }
32
+ export interface AuthorizationAnalysis {
33
+ /** All authorization attributes found */
34
+ attributes: AuthorizeAttributeInfo[];
35
+ /** Controllers with authorization */
36
+ authorizedControllers: string[];
37
+ /** Actions with authorization */
38
+ authorizedActions: string[];
39
+ /** Actions with AllowAnonymous */
40
+ anonymousActions: string[];
41
+ /** Unique roles used */
42
+ roles: string[];
43
+ /** Unique policies used */
44
+ policies: string[];
45
+ /** Whether authorization is consistent */
46
+ isConsistent: boolean;
47
+ /** Confidence score */
48
+ confidence: number;
49
+ }
50
+ export declare class AuthorizeAttributeDetector extends BaseDetector {
51
+ readonly id = "auth/aspnet-authorize-attribute";
52
+ readonly category: "auth";
53
+ readonly subcategory = "authorization";
54
+ readonly name = "ASP.NET Authorize Attribute Detector";
55
+ readonly description = "Detects [Authorize] and [AllowAnonymous] attribute patterns in ASP.NET Core";
56
+ readonly supportedLanguages: Language[];
57
+ readonly detectionMethod: "regex";
58
+ detect(context: DetectionContext): Promise<DetectionResult>;
59
+ /**
60
+ * Check if file is relevant for authorization detection
61
+ */
62
+ private isRelevantFile;
63
+ /**
64
+ * Analyze authorization patterns in the file
65
+ */
66
+ analyzeAuthorization(content: string, file: string): AuthorizationAnalysis;
67
+ /**
68
+ * Parse [Authorize(...)] arguments
69
+ */
70
+ private parseAuthorizeArgs;
71
+ /**
72
+ * Check if authorization patterns are consistent
73
+ */
74
+ private checkConsistency;
75
+ /**
76
+ * Detect potential authorization violations
77
+ */
78
+ private detectViolations;
79
+ generateQuickFix(): null;
80
+ }
81
+ export declare function createAuthorizeAttributeDetector(): AuthorizeAttributeDetector;
82
+ //# sourceMappingURL=authorize-attribute-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorize-attribute-detector.d.ts","sourceRoot":"","sources":["../../../src/auth/aspnet/authorize-attribute-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAA2B,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAM3D,MAAM,WAAW,sBAAsB;IACrC,4BAA4B;IAC5B,IAAI,EAAE,WAAW,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;IAC/E,yBAAyB;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,0CAA0C;IAC1C,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,0CAA0C;IAC1C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,yCAAyC;IACzC,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,qCAAqC;IACrC,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,iCAAiC;IACjC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,kCAAkC;IAClC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,wBAAwB;IACxB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,0CAA0C;IAC1C,YAAY,EAAE,OAAO,CAAC;IACtB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,qBAAa,0BAA2B,SAAQ,YAAY;IAC1D,QAAQ,CAAC,EAAE,qCAAqC;IAChD,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IACpC,QAAQ,CAAC,WAAW,mBAAmB;IACvC,QAAQ,CAAC,IAAI,0CAA0C;IACvD,QAAQ,CAAC,WAAW,iFAAiF;IACrG,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,EAAE,CAAc;IACrD,QAAQ,CAAC,eAAe,EAAG,OAAO,CAAU;IAEtC,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAoCjE;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,qBAAqB;IAoH1E;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA4B1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4CxB,gBAAgB,IAAI,IAAI;CAGzB;AAED,wBAAgB,gCAAgC,IAAI,0BAA0B,CAE7E"}
@@ -0,0 +1,261 @@
1
+ /**
2
+ * ASP.NET Core Authorize Attribute Detector
3
+ *
4
+ * Detects authorization patterns in ASP.NET Core applications:
5
+ * - [Authorize] attribute usage
6
+ * - [Authorize(Roles = "...")] role-based authorization
7
+ * - [Authorize(Policy = "...")] policy-based authorization
8
+ * - [AllowAnonymous] exceptions
9
+ * - Authorization at controller vs action level
10
+ */
11
+ import { BaseDetector } from '../../base/base-detector.js';
12
+ // ============================================================================
13
+ // Detector Implementation
14
+ // ============================================================================
15
+ export class AuthorizeAttributeDetector extends BaseDetector {
16
+ id = 'auth/aspnet-authorize-attribute';
17
+ category = 'auth';
18
+ subcategory = 'authorization';
19
+ name = 'ASP.NET Authorize Attribute Detector';
20
+ description = 'Detects [Authorize] and [AllowAnonymous] attribute patterns in ASP.NET Core';
21
+ supportedLanguages = ['csharp'];
22
+ detectionMethod = 'regex';
23
+ async detect(context) {
24
+ const { content, file } = context;
25
+ // Only process C# files that look like controllers or have auth attributes
26
+ if (!this.isRelevantFile(content)) {
27
+ return this.createEmptyResult();
28
+ }
29
+ const analysis = this.analyzeAuthorization(content, file);
30
+ const patterns = [];
31
+ const violations = [];
32
+ // Create pattern matches for each authorization attribute
33
+ for (const attr of analysis.attributes) {
34
+ patterns.push({
35
+ patternId: `${this.id}/${attr.type}`,
36
+ location: {
37
+ file: attr.file,
38
+ line: attr.line,
39
+ column: 1,
40
+ },
41
+ confidence: analysis.confidence,
42
+ isOutlier: false,
43
+ });
44
+ }
45
+ // Check for potential issues
46
+ violations.push(...this.detectViolations(analysis, file));
47
+ return this.createResult(patterns, violations, analysis.confidence, {
48
+ custom: {
49
+ authorizationAnalysis: analysis,
50
+ },
51
+ });
52
+ }
53
+ /**
54
+ * Check if file is relevant for authorization detection
55
+ */
56
+ isRelevantFile(content) {
57
+ return (content.includes('[Authorize') ||
58
+ content.includes('[AllowAnonymous]') ||
59
+ content.includes('ControllerBase') ||
60
+ content.includes(': Controller'));
61
+ }
62
+ /**
63
+ * Analyze authorization patterns in the file
64
+ */
65
+ analyzeAuthorization(content, file) {
66
+ const attributes = [];
67
+ const authorizedControllers = [];
68
+ const authorizedActions = [];
69
+ const anonymousActions = [];
70
+ const roles = new Set();
71
+ const policies = new Set();
72
+ const lines = content.split('\n');
73
+ let currentController = null;
74
+ let pendingAttributes = [];
75
+ for (let i = 0; i < lines.length; i++) {
76
+ const line = lines[i] || '';
77
+ const lineNum = i + 1;
78
+ // Detect [Authorize] attributes
79
+ const authorizeMatch = line.match(/\[Authorize(?:\s*\(([^)]*)\))?\]/);
80
+ if (authorizeMatch) {
81
+ const args = authorizeMatch[1] || '';
82
+ const attrInfo = this.parseAuthorizeArgs(args);
83
+ // Add roles and policies to sets
84
+ attrInfo.roles.forEach(r => roles.add(r));
85
+ if (attrInfo.policy)
86
+ policies.add(attrInfo.policy);
87
+ pendingAttributes.push({
88
+ type: attrInfo.roles.length > 0 ? 'authorize-roles' :
89
+ attrInfo.policy ? 'authorize-policy' : 'authorize',
90
+ roles: attrInfo.roles,
91
+ policy: attrInfo.policy,
92
+ schemes: attrInfo.schemes,
93
+ line: lineNum,
94
+ });
95
+ }
96
+ // Detect [AllowAnonymous]
97
+ if (line.includes('[AllowAnonymous]')) {
98
+ pendingAttributes.push({
99
+ type: 'allow-anonymous',
100
+ roles: [],
101
+ policy: null,
102
+ schemes: [],
103
+ line: lineNum,
104
+ });
105
+ }
106
+ // Detect controller class
107
+ const controllerMatch = line.match(/public\s+class\s+(\w+Controller)\s*:/);
108
+ if (controllerMatch && controllerMatch[1]) {
109
+ currentController = controllerMatch[1];
110
+ // Apply pending attributes to controller
111
+ for (const attr of pendingAttributes) {
112
+ attributes.push({
113
+ type: attr.type,
114
+ roles: attr.roles,
115
+ policy: attr.policy,
116
+ authenticationSchemes: attr.schemes,
117
+ isControllerLevel: true,
118
+ target: currentController,
119
+ line: attr.line,
120
+ file,
121
+ });
122
+ if (attr.type !== 'allow-anonymous') {
123
+ authorizedControllers.push(currentController);
124
+ }
125
+ }
126
+ pendingAttributes = [];
127
+ }
128
+ // Detect action methods
129
+ const actionMatch = line.match(/public\s+(?:async\s+)?(?:Task<)?(?:ActionResult|IActionResult|[\w<>]+)\s+(\w+)\s*\(/);
130
+ if (actionMatch && actionMatch[1] && currentController) {
131
+ const actionName = actionMatch[1];
132
+ // Apply pending attributes to action
133
+ for (const attr of pendingAttributes) {
134
+ attributes.push({
135
+ type: attr.type,
136
+ roles: attr.roles,
137
+ policy: attr.policy,
138
+ authenticationSchemes: attr.schemes,
139
+ isControllerLevel: false,
140
+ target: actionName,
141
+ line: attr.line,
142
+ file,
143
+ });
144
+ if (attr.type === 'allow-anonymous') {
145
+ anonymousActions.push(`${currentController}.${actionName}`);
146
+ }
147
+ else {
148
+ authorizedActions.push(`${currentController}.${actionName}`);
149
+ }
150
+ }
151
+ pendingAttributes = [];
152
+ }
153
+ }
154
+ // Calculate consistency
155
+ const isConsistent = this.checkConsistency(attributes);
156
+ const confidence = attributes.length > 0 ? 0.9 : 0;
157
+ return {
158
+ attributes,
159
+ authorizedControllers: [...new Set(authorizedControllers)],
160
+ authorizedActions: [...new Set(authorizedActions)],
161
+ anonymousActions: [...new Set(anonymousActions)],
162
+ roles: Array.from(roles),
163
+ policies: Array.from(policies),
164
+ isConsistent,
165
+ confidence,
166
+ };
167
+ }
168
+ /**
169
+ * Parse [Authorize(...)] arguments
170
+ */
171
+ parseAuthorizeArgs(args) {
172
+ const roles = [];
173
+ let policy = null;
174
+ const schemes = [];
175
+ if (!args)
176
+ return { roles, policy, schemes };
177
+ // Extract Roles
178
+ const rolesMatch = args.match(/Roles\s*=\s*["']([^"']+)["']/);
179
+ if (rolesMatch && rolesMatch[1]) {
180
+ roles.push(...rolesMatch[1].split(',').map(r => r.trim()));
181
+ }
182
+ // Extract Policy
183
+ const policyMatch = args.match(/Policy\s*=\s*["']([^"']+)["']/);
184
+ if (policyMatch && policyMatch[1]) {
185
+ policy = policyMatch[1];
186
+ }
187
+ // Extract AuthenticationSchemes
188
+ const schemesMatch = args.match(/AuthenticationSchemes\s*=\s*["']([^"']+)["']/);
189
+ if (schemesMatch && schemesMatch[1]) {
190
+ schemes.push(...schemesMatch[1].split(',').map(s => s.trim()));
191
+ }
192
+ return { roles, policy, schemes };
193
+ }
194
+ /**
195
+ * Check if authorization patterns are consistent
196
+ */
197
+ checkConsistency(attributes) {
198
+ if (attributes.length < 2)
199
+ return true;
200
+ // Check if mixing roles and policies inconsistently
201
+ const hasRoles = attributes.some(a => a.roles.length > 0);
202
+ const hasPolicies = attributes.some(a => a.policy !== null);
203
+ // Mixing roles and policies is fine in ASP.NET Core
204
+ // Consider inconsistent only if there's a clear anti-pattern
205
+ // For now, having both is acceptable
206
+ if (hasRoles && hasPolicies) {
207
+ // Both approaches used - this is actually fine in ASP.NET Core
208
+ return true;
209
+ }
210
+ return true;
211
+ }
212
+ /**
213
+ * Detect potential authorization violations
214
+ */
215
+ detectViolations(analysis, file) {
216
+ const violations = [];
217
+ // Check for controllers without any authorization
218
+ const controllerAttrs = analysis.attributes.filter(a => a.isControllerLevel);
219
+ const actionAttrs = analysis.attributes.filter(a => !a.isControllerLevel);
220
+ // If some actions have auth but controller doesn't, might be inconsistent
221
+ if (controllerAttrs.length === 0 && actionAttrs.length > 0) {
222
+ // Check if all actions have auth or if some are missing
223
+ // This is informational, not necessarily a violation
224
+ }
225
+ // Check for [AllowAnonymous] on sensitive-looking endpoints
226
+ for (const attr of analysis.attributes) {
227
+ if (attr.type === 'allow-anonymous') {
228
+ const target = attr.target.toLowerCase();
229
+ if (target.includes('admin') || target.includes('delete') || target.includes('update')) {
230
+ violations.push({
231
+ id: `${this.id}-${file}-${attr.line}-sensitive-anonymous`,
232
+ patternId: this.id,
233
+ severity: 'warning',
234
+ file,
235
+ range: {
236
+ start: { line: attr.line - 1, character: 0 },
237
+ end: { line: attr.line - 1, character: 100 },
238
+ },
239
+ message: `[AllowAnonymous] on potentially sensitive endpoint: ${attr.target}`,
240
+ expected: '[Authorize]',
241
+ actual: '[AllowAnonymous]',
242
+ explanation: `The endpoint '${attr.target}' appears to be sensitive based on its name, ` +
243
+ `but is marked as [AllowAnonymous]. Consider if this is intentional.`,
244
+ aiExplainAvailable: true,
245
+ aiFixAvailable: false,
246
+ firstSeen: new Date(),
247
+ occurrences: 1,
248
+ });
249
+ }
250
+ }
251
+ }
252
+ return violations;
253
+ }
254
+ generateQuickFix() {
255
+ return null;
256
+ }
257
+ }
258
+ export function createAuthorizeAttributeDetector() {
259
+ return new AuthorizeAttributeDetector();
260
+ }
261
+ //# sourceMappingURL=authorize-attribute-detector.js.map