cotx-engine 0.1.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 (501) hide show
  1. package/LICENSE +94 -0
  2. package/README.md +103 -0
  3. package/dist/commands/compile.d.ts +3 -0
  4. package/dist/commands/compile.js +93 -0
  5. package/dist/commands/compile.js.map +1 -0
  6. package/dist/commands/context.d.ts +1 -0
  7. package/dist/commands/context.js +98 -0
  8. package/dist/commands/context.js.map +1 -0
  9. package/dist/commands/diff.d.ts +19 -0
  10. package/dist/commands/diff.js +127 -0
  11. package/dist/commands/diff.js.map +1 -0
  12. package/dist/commands/impact.d.ts +3 -0
  13. package/dist/commands/impact.js +91 -0
  14. package/dist/commands/impact.js.map +1 -0
  15. package/dist/commands/init.d.ts +1 -0
  16. package/dist/commands/init.js +13 -0
  17. package/dist/commands/init.js.map +1 -0
  18. package/dist/commands/lint.d.ts +13 -0
  19. package/dist/commands/lint.js +290 -0
  20. package/dist/commands/lint.js.map +1 -0
  21. package/dist/commands/map.d.ts +6 -0
  22. package/dist/commands/map.js +409 -0
  23. package/dist/commands/map.js.map +1 -0
  24. package/dist/commands/migrate.d.ts +16 -0
  25. package/dist/commands/migrate.js +150 -0
  26. package/dist/commands/migrate.js.map +1 -0
  27. package/dist/commands/query.d.ts +3 -0
  28. package/dist/commands/query.js +47 -0
  29. package/dist/commands/query.js.map +1 -0
  30. package/dist/commands/rename.d.ts +5 -0
  31. package/dist/commands/rename.js +163 -0
  32. package/dist/commands/rename.js.map +1 -0
  33. package/dist/commands/snapshot.d.ts +6 -0
  34. package/dist/commands/snapshot.js +48 -0
  35. package/dist/commands/snapshot.js.map +1 -0
  36. package/dist/commands/status.d.ts +1 -0
  37. package/dist/commands/status.js +72 -0
  38. package/dist/commands/status.js.map +1 -0
  39. package/dist/commands/update.d.ts +8 -0
  40. package/dist/commands/update.js +163 -0
  41. package/dist/commands/update.js.map +1 -0
  42. package/dist/commands/write.d.ts +6 -0
  43. package/dist/commands/write.js +221 -0
  44. package/dist/commands/write.js.map +1 -0
  45. package/dist/compiler/auto-describe.d.ts +13 -0
  46. package/dist/compiler/auto-describe.js +91 -0
  47. package/dist/compiler/auto-describe.js.map +1 -0
  48. package/dist/compiler/concept-compiler.d.ts +21 -0
  49. package/dist/compiler/concept-compiler.js +125 -0
  50. package/dist/compiler/concept-compiler.js.map +1 -0
  51. package/dist/compiler/contract-compiler.d.ts +16 -0
  52. package/dist/compiler/contract-compiler.js +90 -0
  53. package/dist/compiler/contract-compiler.js.map +1 -0
  54. package/dist/compiler/delta-detector.d.ts +8 -0
  55. package/dist/compiler/delta-detector.js +34 -0
  56. package/dist/compiler/delta-detector.js.map +1 -0
  57. package/dist/compiler/flow-compiler.d.ts +18 -0
  58. package/dist/compiler/flow-compiler.js +69 -0
  59. package/dist/compiler/flow-compiler.js.map +1 -0
  60. package/dist/compiler/module-compiler.d.ts +18 -0
  61. package/dist/compiler/module-compiler.js +420 -0
  62. package/dist/compiler/module-compiler.js.map +1 -0
  63. package/dist/compiler/stale-detector.d.ts +22 -0
  64. package/dist/compiler/stale-detector.js +79 -0
  65. package/dist/compiler/stale-detector.js.map +1 -0
  66. package/dist/config/ignore-service.d.ts +26 -0
  67. package/dist/config/ignore-service.js +366 -0
  68. package/dist/config/ignore-service.js.map +1 -0
  69. package/dist/core/analysis/cluster-enricher.d.ts +38 -0
  70. package/dist/core/analysis/cluster-enricher.js +169 -0
  71. package/dist/core/analysis/cluster-enricher.js.map +1 -0
  72. package/dist/core/analysis/community-processor.d.ts +39 -0
  73. package/dist/core/analysis/community-processor.js +319 -0
  74. package/dist/core/analysis/community-processor.js.map +1 -0
  75. package/dist/core/analysis/process-processor.d.ts +51 -0
  76. package/dist/core/analysis/process-processor.js +318 -0
  77. package/dist/core/analysis/process-processor.js.map +1 -0
  78. package/dist/core/bridge.d.ts +15 -0
  79. package/dist/core/bridge.js +63 -0
  80. package/dist/core/bridge.js.map +1 -0
  81. package/dist/core/export/json-exporter.d.ts +43 -0
  82. package/dist/core/export/json-exporter.js +13 -0
  83. package/dist/core/export/json-exporter.js.map +1 -0
  84. package/dist/core/graph/graph.d.ts +2 -0
  85. package/dist/core/graph/graph.js +79 -0
  86. package/dist/core/graph/graph.js.map +1 -0
  87. package/dist/core/graph/types.d.ts +25 -0
  88. package/dist/core/graph/types.js +2 -0
  89. package/dist/core/graph/types.js.map +1 -0
  90. package/dist/core/parser/ast-cache.d.ts +11 -0
  91. package/dist/core/parser/ast-cache.js +36 -0
  92. package/dist/core/parser/ast-cache.js.map +1 -0
  93. package/dist/core/parser/call-processor.d.ts +105 -0
  94. package/dist/core/parser/call-processor.js +1807 -0
  95. package/dist/core/parser/call-processor.js.map +1 -0
  96. package/dist/core/parser/call-routing.d.ts +55 -0
  97. package/dist/core/parser/call-routing.js +113 -0
  98. package/dist/core/parser/call-routing.js.map +1 -0
  99. package/dist/core/parser/call-sites/extract-language-call-site.d.ts +10 -0
  100. package/dist/core/parser/call-sites/extract-language-call-site.js +23 -0
  101. package/dist/core/parser/call-sites/extract-language-call-site.js.map +1 -0
  102. package/dist/core/parser/call-sites/java.d.ts +9 -0
  103. package/dist/core/parser/call-sites/java.js +31 -0
  104. package/dist/core/parser/call-sites/java.js.map +1 -0
  105. package/dist/core/parser/cluster-enricher.d.ts +38 -0
  106. package/dist/core/parser/cluster-enricher.js +169 -0
  107. package/dist/core/parser/cluster-enricher.js.map +1 -0
  108. package/dist/core/parser/community-processor.d.ts +39 -0
  109. package/dist/core/parser/community-processor.js +321 -0
  110. package/dist/core/parser/community-processor.js.map +1 -0
  111. package/dist/core/parser/constants.d.ts +16 -0
  112. package/dist/core/parser/constants.js +17 -0
  113. package/dist/core/parser/constants.js.map +1 -0
  114. package/dist/core/parser/entry-point-scoring.d.ts +57 -0
  115. package/dist/core/parser/entry-point-scoring.js +377 -0
  116. package/dist/core/parser/entry-point-scoring.js.map +1 -0
  117. package/dist/core/parser/export-detection.d.ts +57 -0
  118. package/dist/core/parser/export-detection.js +234 -0
  119. package/dist/core/parser/export-detection.js.map +1 -0
  120. package/dist/core/parser/field-extractor.d.ts +34 -0
  121. package/dist/core/parser/field-extractor.js +33 -0
  122. package/dist/core/parser/field-extractor.js.map +1 -0
  123. package/dist/core/parser/field-extractors/configs/c-cpp.d.ts +16 -0
  124. package/dist/core/parser/field-extractors/configs/c-cpp.js +129 -0
  125. package/dist/core/parser/field-extractors/configs/c-cpp.js.map +1 -0
  126. package/dist/core/parser/field-extractors/configs/csharp.d.ts +15 -0
  127. package/dist/core/parser/field-extractors/configs/csharp.js +129 -0
  128. package/dist/core/parser/field-extractors/configs/csharp.js.map +1 -0
  129. package/dist/core/parser/field-extractors/configs/dart.d.ts +12 -0
  130. package/dist/core/parser/field-extractors/configs/dart.js +93 -0
  131. package/dist/core/parser/field-extractors/configs/dart.js.map +1 -0
  132. package/dist/core/parser/field-extractors/configs/go.d.ts +12 -0
  133. package/dist/core/parser/field-extractors/configs/go.js +66 -0
  134. package/dist/core/parser/field-extractors/configs/go.js.map +1 -0
  135. package/dist/core/parser/field-extractors/configs/helpers.d.ts +40 -0
  136. package/dist/core/parser/field-extractors/configs/helpers.js +118 -0
  137. package/dist/core/parser/field-extractors/configs/helpers.js.map +1 -0
  138. package/dist/core/parser/field-extractors/configs/jvm.d.ts +17 -0
  139. package/dist/core/parser/field-extractors/configs/jvm.js +139 -0
  140. package/dist/core/parser/field-extractors/configs/jvm.js.map +1 -0
  141. package/dist/core/parser/field-extractors/configs/php.d.ts +12 -0
  142. package/dist/core/parser/field-extractors/configs/php.js +69 -0
  143. package/dist/core/parser/field-extractors/configs/php.js.map +1 -0
  144. package/dist/core/parser/field-extractors/configs/python.d.ts +15 -0
  145. package/dist/core/parser/field-extractors/configs/python.js +92 -0
  146. package/dist/core/parser/field-extractors/configs/python.js.map +1 -0
  147. package/dist/core/parser/field-extractors/configs/ruby.d.ts +15 -0
  148. package/dist/core/parser/field-extractors/configs/ruby.js +68 -0
  149. package/dist/core/parser/field-extractors/configs/ruby.js.map +1 -0
  150. package/dist/core/parser/field-extractors/configs/rust.d.ts +12 -0
  151. package/dist/core/parser/field-extractors/configs/rust.js +58 -0
  152. package/dist/core/parser/field-extractors/configs/rust.js.map +1 -0
  153. package/dist/core/parser/field-extractors/configs/swift.d.ts +15 -0
  154. package/dist/core/parser/field-extractors/configs/swift.js +75 -0
  155. package/dist/core/parser/field-extractors/configs/swift.js.map +1 -0
  156. package/dist/core/parser/field-extractors/configs/typescript-javascript.d.ts +14 -0
  157. package/dist/core/parser/field-extractors/configs/typescript-javascript.js +72 -0
  158. package/dist/core/parser/field-extractors/configs/typescript-javascript.js.map +1 -0
  159. package/dist/core/parser/field-extractors/generic.d.ts +61 -0
  160. package/dist/core/parser/field-extractors/generic.js +170 -0
  161. package/dist/core/parser/field-extractors/generic.js.map +1 -0
  162. package/dist/core/parser/field-extractors/typescript.d.ts +16 -0
  163. package/dist/core/parser/field-extractors/typescript.js +167 -0
  164. package/dist/core/parser/field-extractors/typescript.js.map +1 -0
  165. package/dist/core/parser/field-types.d.ts +46 -0
  166. package/dist/core/parser/field-types.js +2 -0
  167. package/dist/core/parser/field-types.js.map +1 -0
  168. package/dist/core/parser/filesystem-walker.d.ts +28 -0
  169. package/dist/core/parser/filesystem-walker.js +82 -0
  170. package/dist/core/parser/filesystem-walker.js.map +1 -0
  171. package/dist/core/parser/framework-detection.d.ts +149 -0
  172. package/dist/core/parser/framework-detection.js +782 -0
  173. package/dist/core/parser/framework-detection.js.map +1 -0
  174. package/dist/core/parser/heritage-processor.d.ts +52 -0
  175. package/dist/core/parser/heritage-processor.js +339 -0
  176. package/dist/core/parser/heritage-processor.js.map +1 -0
  177. package/dist/core/parser/import-processor.d.ts +33 -0
  178. package/dist/core/parser/import-processor.js +382 -0
  179. package/dist/core/parser/import-processor.js.map +1 -0
  180. package/dist/core/parser/import-resolvers/csharp.d.ts +19 -0
  181. package/dist/core/parser/import-resolvers/csharp.js +132 -0
  182. package/dist/core/parser/import-resolvers/csharp.js.map +1 -0
  183. package/dist/core/parser/import-resolvers/dart.d.ts +7 -0
  184. package/dist/core/parser/import-resolvers/dart.js +45 -0
  185. package/dist/core/parser/import-resolvers/dart.js.map +1 -0
  186. package/dist/core/parser/import-resolvers/go.d.ts +18 -0
  187. package/dist/core/parser/import-resolvers/go.js +62 -0
  188. package/dist/core/parser/import-resolvers/go.js.map +1 -0
  189. package/dist/core/parser/import-resolvers/jvm.d.ts +32 -0
  190. package/dist/core/parser/import-resolvers/jvm.js +160 -0
  191. package/dist/core/parser/import-resolvers/jvm.js.map +1 -0
  192. package/dist/core/parser/import-resolvers/php.d.ts +25 -0
  193. package/dist/core/parser/import-resolvers/php.js +81 -0
  194. package/dist/core/parser/import-resolvers/php.js.map +1 -0
  195. package/dist/core/parser/import-resolvers/python.d.ts +25 -0
  196. package/dist/core/parser/import-resolvers/python.js +85 -0
  197. package/dist/core/parser/import-resolvers/python.js.map +1 -0
  198. package/dist/core/parser/import-resolvers/ruby.d.ts +15 -0
  199. package/dist/core/parser/import-resolvers/ruby.js +21 -0
  200. package/dist/core/parser/import-resolvers/ruby.js.map +1 -0
  201. package/dist/core/parser/import-resolvers/rust.d.ts +18 -0
  202. package/dist/core/parser/import-resolvers/rust.js +119 -0
  203. package/dist/core/parser/import-resolvers/rust.js.map +1 -0
  204. package/dist/core/parser/import-resolvers/standard.d.ts +36 -0
  205. package/dist/core/parser/import-resolvers/standard.js +144 -0
  206. package/dist/core/parser/import-resolvers/standard.js.map +1 -0
  207. package/dist/core/parser/import-resolvers/swift.d.ts +7 -0
  208. package/dist/core/parser/import-resolvers/swift.js +25 -0
  209. package/dist/core/parser/import-resolvers/swift.js.map +1 -0
  210. package/dist/core/parser/import-resolvers/types.d.ts +44 -0
  211. package/dist/core/parser/import-resolvers/types.js +7 -0
  212. package/dist/core/parser/import-resolvers/types.js.map +1 -0
  213. package/dist/core/parser/import-resolvers/utils.d.ts +35 -0
  214. package/dist/core/parser/import-resolvers/utils.js +150 -0
  215. package/dist/core/parser/import-resolvers/utils.js.map +1 -0
  216. package/dist/core/parser/import-resolvers/vue.d.ts +8 -0
  217. package/dist/core/parser/import-resolvers/vue.js +10 -0
  218. package/dist/core/parser/import-resolvers/vue.js.map +1 -0
  219. package/dist/core/parser/language-config.d.ts +52 -0
  220. package/dist/core/parser/language-config.js +182 -0
  221. package/dist/core/parser/language-config.js.map +1 -0
  222. package/dist/core/parser/language-provider.d.ts +126 -0
  223. package/dist/core/parser/language-provider.js +25 -0
  224. package/dist/core/parser/language-provider.js.map +1 -0
  225. package/dist/core/parser/languages/c-cpp.d.ts +12 -0
  226. package/dist/core/parser/languages/c-cpp.js +312 -0
  227. package/dist/core/parser/languages/c-cpp.js.map +1 -0
  228. package/dist/core/parser/languages/csharp.d.ts +8 -0
  229. package/dist/core/parser/languages/csharp.js +127 -0
  230. package/dist/core/parser/languages/csharp.js.map +1 -0
  231. package/dist/core/parser/languages/dart.d.ts +12 -0
  232. package/dist/core/parser/languages/dart.js +91 -0
  233. package/dist/core/parser/languages/dart.js.map +1 -0
  234. package/dist/core/parser/languages/go.d.ts +11 -0
  235. package/dist/core/parser/languages/go.js +32 -0
  236. package/dist/core/parser/languages/go.js.map +1 -0
  237. package/dist/core/parser/languages/index.d.ts +38 -0
  238. package/dist/core/parser/languages/index.js +63 -0
  239. package/dist/core/parser/languages/index.js.map +1 -0
  240. package/dist/core/parser/languages/java.d.ts +9 -0
  241. package/dist/core/parser/languages/java.js +33 -0
  242. package/dist/core/parser/languages/java.js.map +1 -0
  243. package/dist/core/parser/languages/kotlin.d.ts +9 -0
  244. package/dist/core/parser/languages/kotlin.js +112 -0
  245. package/dist/core/parser/languages/kotlin.js.map +1 -0
  246. package/dist/core/parser/languages/php.d.ts +8 -0
  247. package/dist/core/parser/languages/php.js +226 -0
  248. package/dist/core/parser/languages/php.js.map +1 -0
  249. package/dist/core/parser/languages/python.d.ts +12 -0
  250. package/dist/core/parser/languages/python.js +66 -0
  251. package/dist/core/parser/languages/python.js.map +1 -0
  252. package/dist/core/parser/languages/ruby.d.ts +9 -0
  253. package/dist/core/parser/languages/ruby.js +109 -0
  254. package/dist/core/parser/languages/ruby.js.map +1 -0
  255. package/dist/core/parser/languages/rust.d.ts +12 -0
  256. package/dist/core/parser/languages/rust.js +121 -0
  257. package/dist/core/parser/languages/rust.js.map +1 -0
  258. package/dist/core/parser/languages/swift.d.ts +12 -0
  259. package/dist/core/parser/languages/swift.js +233 -0
  260. package/dist/core/parser/languages/swift.js.map +1 -0
  261. package/dist/core/parser/languages/typescript.d.ts +11 -0
  262. package/dist/core/parser/languages/typescript.js +169 -0
  263. package/dist/core/parser/languages/typescript.js.map +1 -0
  264. package/dist/core/parser/languages/vue.d.ts +13 -0
  265. package/dist/core/parser/languages/vue.js +65 -0
  266. package/dist/core/parser/languages/vue.js.map +1 -0
  267. package/dist/core/parser/markdown-processor.d.ts +17 -0
  268. package/dist/core/parser/markdown-processor.js +125 -0
  269. package/dist/core/parser/markdown-processor.js.map +1 -0
  270. package/dist/core/parser/method-extractors/configs/c-cpp.d.ts +3 -0
  271. package/dist/core/parser/method-extractors/configs/c-cpp.js +276 -0
  272. package/dist/core/parser/method-extractors/configs/c-cpp.js.map +1 -0
  273. package/dist/core/parser/method-extractors/configs/csharp.d.ts +2 -0
  274. package/dist/core/parser/method-extractors/configs/csharp.js +243 -0
  275. package/dist/core/parser/method-extractors/configs/csharp.js.map +1 -0
  276. package/dist/core/parser/method-extractors/configs/dart.d.ts +2 -0
  277. package/dist/core/parser/method-extractors/configs/dart.js +263 -0
  278. package/dist/core/parser/method-extractors/configs/dart.js.map +1 -0
  279. package/dist/core/parser/method-extractors/configs/go.d.ts +2 -0
  280. package/dist/core/parser/method-extractors/configs/go.js +120 -0
  281. package/dist/core/parser/method-extractors/configs/go.js.map +1 -0
  282. package/dist/core/parser/method-extractors/configs/jvm.d.ts +3 -0
  283. package/dist/core/parser/method-extractors/configs/jvm.js +309 -0
  284. package/dist/core/parser/method-extractors/configs/jvm.js.map +1 -0
  285. package/dist/core/parser/method-extractors/configs/php.d.ts +2 -0
  286. package/dist/core/parser/method-extractors/configs/php.js +243 -0
  287. package/dist/core/parser/method-extractors/configs/php.js.map +1 -0
  288. package/dist/core/parser/method-extractors/configs/python.d.ts +2 -0
  289. package/dist/core/parser/method-extractors/configs/python.js +219 -0
  290. package/dist/core/parser/method-extractors/configs/python.js.map +1 -0
  291. package/dist/core/parser/method-extractors/configs/ruby.d.ts +2 -0
  292. package/dist/core/parser/method-extractors/configs/ruby.js +201 -0
  293. package/dist/core/parser/method-extractors/configs/ruby.js.map +1 -0
  294. package/dist/core/parser/method-extractors/configs/rust.d.ts +2 -0
  295. package/dist/core/parser/method-extractors/configs/rust.js +120 -0
  296. package/dist/core/parser/method-extractors/configs/rust.js.map +1 -0
  297. package/dist/core/parser/method-extractors/configs/swift.d.ts +2 -0
  298. package/dist/core/parser/method-extractors/configs/swift.js +191 -0
  299. package/dist/core/parser/method-extractors/configs/swift.js.map +1 -0
  300. package/dist/core/parser/method-extractors/configs/typescript-javascript.d.ts +3 -0
  301. package/dist/core/parser/method-extractors/configs/typescript-javascript.js +231 -0
  302. package/dist/core/parser/method-extractors/configs/typescript-javascript.js.map +1 -0
  303. package/dist/core/parser/method-extractors/generic.d.ts +11 -0
  304. package/dist/core/parser/method-extractors/generic.js +162 -0
  305. package/dist/core/parser/method-extractors/generic.js.map +1 -0
  306. package/dist/core/parser/method-types.d.ts +110 -0
  307. package/dist/core/parser/method-types.js +2 -0
  308. package/dist/core/parser/method-types.js.map +1 -0
  309. package/dist/core/parser/mro-processor.d.ts +46 -0
  310. package/dist/core/parser/mro-processor.js +677 -0
  311. package/dist/core/parser/mro-processor.js.map +1 -0
  312. package/dist/core/parser/named-binding-processor.d.ts +18 -0
  313. package/dist/core/parser/named-binding-processor.js +43 -0
  314. package/dist/core/parser/named-binding-processor.js.map +1 -0
  315. package/dist/core/parser/named-bindings/csharp.d.ts +3 -0
  316. package/dist/core/parser/named-bindings/csharp.js +38 -0
  317. package/dist/core/parser/named-bindings/csharp.js.map +1 -0
  318. package/dist/core/parser/named-bindings/java.d.ts +3 -0
  319. package/dist/core/parser/named-bindings/java.js +30 -0
  320. package/dist/core/parser/named-bindings/java.js.map +1 -0
  321. package/dist/core/parser/named-bindings/kotlin.d.ts +3 -0
  322. package/dist/core/parser/named-bindings/kotlin.js +37 -0
  323. package/dist/core/parser/named-bindings/kotlin.js.map +1 -0
  324. package/dist/core/parser/named-bindings/php.d.ts +3 -0
  325. package/dist/core/parser/named-bindings/php.js +62 -0
  326. package/dist/core/parser/named-bindings/php.js.map +1 -0
  327. package/dist/core/parser/named-bindings/python.d.ts +3 -0
  328. package/dist/core/parser/named-bindings/python.js +50 -0
  329. package/dist/core/parser/named-bindings/python.js.map +1 -0
  330. package/dist/core/parser/named-bindings/rust.d.ts +3 -0
  331. package/dist/core/parser/named-bindings/rust.js +67 -0
  332. package/dist/core/parser/named-bindings/rust.js.map +1 -0
  333. package/dist/core/parser/named-bindings/types.d.ts +16 -0
  334. package/dist/core/parser/named-bindings/types.js +7 -0
  335. package/dist/core/parser/named-bindings/types.js.map +1 -0
  336. package/dist/core/parser/named-bindings/typescript.d.ts +3 -0
  337. package/dist/core/parser/named-bindings/typescript.js +59 -0
  338. package/dist/core/parser/named-bindings/typescript.js.map +1 -0
  339. package/dist/core/parser/parsing-processor.d.ts +23 -0
  340. package/dist/core/parser/parsing-processor.js +464 -0
  341. package/dist/core/parser/parsing-processor.js.map +1 -0
  342. package/dist/core/parser/pipeline.d.ts +17 -0
  343. package/dist/core/parser/pipeline.js +1405 -0
  344. package/dist/core/parser/pipeline.js.map +1 -0
  345. package/dist/core/parser/process-processor.d.ts +51 -0
  346. package/dist/core/parser/process-processor.js +318 -0
  347. package/dist/core/parser/process-processor.js.map +1 -0
  348. package/dist/core/parser/resolution-context.d.ts +58 -0
  349. package/dist/core/parser/resolution-context.js +136 -0
  350. package/dist/core/parser/resolution-context.js.map +1 -0
  351. package/dist/core/parser/route-extractors/expo.d.ts +1 -0
  352. package/dist/core/parser/route-extractors/expo.js +37 -0
  353. package/dist/core/parser/route-extractors/expo.js.map +1 -0
  354. package/dist/core/parser/route-extractors/middleware.d.ts +47 -0
  355. package/dist/core/parser/route-extractors/middleware.js +168 -0
  356. package/dist/core/parser/route-extractors/middleware.js.map +1 -0
  357. package/dist/core/parser/route-extractors/nextjs.d.ts +3 -0
  358. package/dist/core/parser/route-extractors/nextjs.js +77 -0
  359. package/dist/core/parser/route-extractors/nextjs.js.map +1 -0
  360. package/dist/core/parser/route-extractors/php.d.ts +7 -0
  361. package/dist/core/parser/route-extractors/php.js +23 -0
  362. package/dist/core/parser/route-extractors/php.js.map +1 -0
  363. package/dist/core/parser/route-extractors/response-shapes.d.ts +20 -0
  364. package/dist/core/parser/route-extractors/response-shapes.js +295 -0
  365. package/dist/core/parser/route-extractors/response-shapes.js.map +1 -0
  366. package/dist/core/parser/structure-processor.d.ts +2 -0
  367. package/dist/core/parser/structure-processor.js +37 -0
  368. package/dist/core/parser/structure-processor.js.map +1 -0
  369. package/dist/core/parser/symbol-table.d.ts +79 -0
  370. package/dist/core/parser/symbol-table.js +116 -0
  371. package/dist/core/parser/symbol-table.js.map +1 -0
  372. package/dist/core/parser/tree-sitter-queries.d.ts +16 -0
  373. package/dist/core/parser/tree-sitter-queries.js +1180 -0
  374. package/dist/core/parser/tree-sitter-queries.js.map +1 -0
  375. package/dist/core/parser/type-env.d.ts +81 -0
  376. package/dist/core/parser/type-env.js +1048 -0
  377. package/dist/core/parser/type-env.js.map +1 -0
  378. package/dist/core/parser/type-extractors/c-cpp.d.ts +7 -0
  379. package/dist/core/parser/type-extractors/c-cpp.js +533 -0
  380. package/dist/core/parser/type-extractors/c-cpp.js.map +1 -0
  381. package/dist/core/parser/type-extractors/csharp.d.ts +2 -0
  382. package/dist/core/parser/type-extractors/csharp.js +584 -0
  383. package/dist/core/parser/type-extractors/csharp.js.map +1 -0
  384. package/dist/core/parser/type-extractors/dart.d.ts +15 -0
  385. package/dist/core/parser/type-extractors/dart.js +370 -0
  386. package/dist/core/parser/type-extractors/dart.js.map +1 -0
  387. package/dist/core/parser/type-extractors/go.d.ts +2 -0
  388. package/dist/core/parser/type-extractors/go.js +514 -0
  389. package/dist/core/parser/type-extractors/go.js.map +1 -0
  390. package/dist/core/parser/type-extractors/jvm.d.ts +3 -0
  391. package/dist/core/parser/type-extractors/jvm.js +857 -0
  392. package/dist/core/parser/type-extractors/jvm.js.map +1 -0
  393. package/dist/core/parser/type-extractors/php.d.ts +2 -0
  394. package/dist/core/parser/type-extractors/php.js +535 -0
  395. package/dist/core/parser/type-extractors/php.js.map +1 -0
  396. package/dist/core/parser/type-extractors/python.d.ts +2 -0
  397. package/dist/core/parser/type-extractors/python.js +475 -0
  398. package/dist/core/parser/type-extractors/python.js.map +1 -0
  399. package/dist/core/parser/type-extractors/ruby.d.ts +2 -0
  400. package/dist/core/parser/type-extractors/ruby.js +378 -0
  401. package/dist/core/parser/type-extractors/ruby.js.map +1 -0
  402. package/dist/core/parser/type-extractors/rust.d.ts +2 -0
  403. package/dist/core/parser/type-extractors/rust.js +516 -0
  404. package/dist/core/parser/type-extractors/rust.js.map +1 -0
  405. package/dist/core/parser/type-extractors/shared.d.ts +131 -0
  406. package/dist/core/parser/type-extractors/shared.js +797 -0
  407. package/dist/core/parser/type-extractors/shared.js.map +1 -0
  408. package/dist/core/parser/type-extractors/swift.d.ts +2 -0
  409. package/dist/core/parser/type-extractors/swift.js +485 -0
  410. package/dist/core/parser/type-extractors/swift.js.map +1 -0
  411. package/dist/core/parser/type-extractors/types.d.ts +172 -0
  412. package/dist/core/parser/type-extractors/types.js +2 -0
  413. package/dist/core/parser/type-extractors/types.js.map +1 -0
  414. package/dist/core/parser/type-extractors/typescript.d.ts +2 -0
  415. package/dist/core/parser/type-extractors/typescript.js +662 -0
  416. package/dist/core/parser/type-extractors/typescript.js.map +1 -0
  417. package/dist/core/parser/utils/ast-helpers.d.ts +73 -0
  418. package/dist/core/parser/utils/ast-helpers.js +415 -0
  419. package/dist/core/parser/utils/ast-helpers.js.map +1 -0
  420. package/dist/core/parser/utils/call-analysis.d.ts +75 -0
  421. package/dist/core/parser/utils/call-analysis.js +575 -0
  422. package/dist/core/parser/utils/call-analysis.js.map +1 -0
  423. package/dist/core/parser/utils/event-loop.d.ts +5 -0
  424. package/dist/core/parser/utils/event-loop.js +6 -0
  425. package/dist/core/parser/utils/event-loop.js.map +1 -0
  426. package/dist/core/parser/utils/method-props.d.ts +8 -0
  427. package/dist/core/parser/utils/method-props.js +39 -0
  428. package/dist/core/parser/utils/method-props.js.map +1 -0
  429. package/dist/core/parser/utils/verbose.d.ts +1 -0
  430. package/dist/core/parser/utils/verbose.js +8 -0
  431. package/dist/core/parser/utils/verbose.js.map +1 -0
  432. package/dist/core/parser/vue-sfc-extractor.d.ts +44 -0
  433. package/dist/core/parser/vue-sfc-extractor.js +95 -0
  434. package/dist/core/parser/vue-sfc-extractor.js.map +1 -0
  435. package/dist/core/parser/workers/parse-worker.d.ts +171 -0
  436. package/dist/core/parser/workers/parse-worker.js +1724 -0
  437. package/dist/core/parser/workers/parse-worker.js.map +1 -0
  438. package/dist/core/parser/workers/worker-pool.d.ts +16 -0
  439. package/dist/core/parser/workers/worker-pool.js +124 -0
  440. package/dist/core/parser/workers/worker-pool.js.map +1 -0
  441. package/dist/core/shared/graph-types.d.ts +61 -0
  442. package/dist/core/shared/graph-types.js +5 -0
  443. package/dist/core/shared/graph-types.js.map +1 -0
  444. package/dist/core/shared/index.d.ts +4 -0
  445. package/dist/core/shared/index.js +4 -0
  446. package/dist/core/shared/index.js.map +1 -0
  447. package/dist/core/shared/language-detection.d.ts +22 -0
  448. package/dist/core/shared/language-detection.js +137 -0
  449. package/dist/core/shared/language-detection.js.map +1 -0
  450. package/dist/core/shared/languages.d.ts +23 -0
  451. package/dist/core/shared/languages.js +25 -0
  452. package/dist/core/shared/languages.js.map +1 -0
  453. package/dist/core/shared/pipeline.d.ts +15 -0
  454. package/dist/core/shared/pipeline.js +5 -0
  455. package/dist/core/shared/pipeline.js.map +1 -0
  456. package/dist/core/tree-sitter/parser-loader.d.ts +5 -0
  457. package/dist/core/tree-sitter/parser-loader.js +71 -0
  458. package/dist/core/tree-sitter/parser-loader.js.map +1 -0
  459. package/dist/index.d.ts +2 -0
  460. package/dist/index.js +132 -0
  461. package/dist/index.js.map +1 -0
  462. package/dist/lib/hash.d.ts +1 -0
  463. package/dist/lib/hash.js +6 -0
  464. package/dist/lib/hash.js.map +1 -0
  465. package/dist/lib/naming.d.ts +12 -0
  466. package/dist/lib/naming.js +28 -0
  467. package/dist/lib/naming.js.map +1 -0
  468. package/dist/lib/utils.d.ts +1 -0
  469. package/dist/lib/utils.js +4 -0
  470. package/dist/lib/utils.js.map +1 -0
  471. package/dist/mcp/server.d.ts +26 -0
  472. package/dist/mcp/server.js +282 -0
  473. package/dist/mcp/server.js.map +1 -0
  474. package/dist/mcp/tools.d.ts +37 -0
  475. package/dist/mcp/tools.js +650 -0
  476. package/dist/mcp/tools.js.map +1 -0
  477. package/dist/query/bm25.d.ts +19 -0
  478. package/dist/query/bm25.js +60 -0
  479. package/dist/query/bm25.js.map +1 -0
  480. package/dist/query/graph-index.d.ts +40 -0
  481. package/dist/query/graph-index.js +178 -0
  482. package/dist/query/graph-index.js.map +1 -0
  483. package/dist/store/derived-index.d.ts +4 -0
  484. package/dist/store/derived-index.js +68 -0
  485. package/dist/store/derived-index.js.map +1 -0
  486. package/dist/store/meta.d.ts +1 -0
  487. package/dist/store/meta.js +3 -0
  488. package/dist/store/meta.js.map +1 -0
  489. package/dist/store/schema.d.ts +135 -0
  490. package/dist/store/schema.js +2 -0
  491. package/dist/store/schema.js.map +1 -0
  492. package/dist/store/store.d.ts +49 -0
  493. package/dist/store/store.js +254 -0
  494. package/dist/store/store.js.map +1 -0
  495. package/dist/types/pipeline.d.ts +12 -0
  496. package/dist/types/pipeline.js +2 -0
  497. package/dist/types/pipeline.js.map +1 -0
  498. package/package.json +69 -0
  499. package/skills/cotx-enrich/SKILL.md +59 -0
  500. package/vendor/leiden/index.cjs +355 -0
  501. package/vendor/leiden/utils.cjs +392 -0
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Resolution Context
3
+ *
4
+ * Single implementation of tiered name resolution. Replaces the duplicated
5
+ * tier-selection logic previously split between symbol-resolver.ts and
6
+ * call-processor.ts.
7
+ *
8
+ * Resolution tiers (highest confidence first):
9
+ * 1. Same file (lookupExactFull — authoritative)
10
+ * 2a-named. Named binding chain (walkBindingChain via NamedImportMap)
11
+ * 2a. Import-scoped (lookupFuzzy filtered by ImportMap)
12
+ * 2b. Package-scoped (lookupFuzzy filtered by PackageMap)
13
+ * 3. Global (all candidates — consumers must check candidate count)
14
+ */
15
+ import { createSymbolTable } from './symbol-table.js';
16
+ import { isFileInPackageDir } from './import-processor.js';
17
+ import { walkBindingChain } from './named-binding-processor.js';
18
+ /** Confidence scores per resolution tier. */
19
+ export const TIER_CONFIDENCE = {
20
+ 'same-file': 0.95,
21
+ 'import-scoped': 0.9,
22
+ global: 0.5,
23
+ };
24
+ export const createResolutionContext = () => {
25
+ const symbols = createSymbolTable();
26
+ const importMap = new Map();
27
+ const packageMap = new Map();
28
+ const namedImportMap = new Map();
29
+ const moduleAliasMap = new Map();
30
+ // Per-file cache state
31
+ let cacheFile = null;
32
+ let cache = null;
33
+ let cacheHits = 0;
34
+ let cacheMisses = 0;
35
+ // --- Core resolution (single implementation of tier logic) ---
36
+ const resolveUncached = (name, fromFile) => {
37
+ // Tier 1: Same file — authoritative match (returns all overloads)
38
+ const localDefs = symbols.lookupExactAll(fromFile, name);
39
+ if (localDefs.length > 0) {
40
+ return { candidates: localDefs, tier: 'same-file' };
41
+ }
42
+ // Get all global definitions for subsequent tiers
43
+ const allDefs = symbols.lookupFuzzy(name);
44
+ // Tier 2a-named: Check named bindings BEFORE empty-allDefs early return
45
+ // because aliased imports mean lookupFuzzy('U') returns empty but we
46
+ // can resolve via the exported name.
47
+ const chainResult = walkBindingChain(name, fromFile, symbols, namedImportMap, allDefs);
48
+ if (chainResult && chainResult.length > 0) {
49
+ return { candidates: chainResult, tier: 'import-scoped' };
50
+ }
51
+ if (allDefs.length === 0)
52
+ return null;
53
+ // Tier 2a: Import-scoped — definition in a file imported by fromFile
54
+ const importedFiles = importMap.get(fromFile);
55
+ if (importedFiles) {
56
+ const importedDefs = allDefs.filter((def) => importedFiles.has(def.filePath));
57
+ if (importedDefs.length > 0) {
58
+ return { candidates: importedDefs, tier: 'import-scoped' };
59
+ }
60
+ }
61
+ // Tier 2b: Package-scoped — definition in a package dir imported by fromFile
62
+ const importedPackages = packageMap.get(fromFile);
63
+ if (importedPackages) {
64
+ const packageDefs = allDefs.filter((def) => {
65
+ for (const dirSuffix of importedPackages) {
66
+ if (isFileInPackageDir(def.filePath, dirSuffix))
67
+ return true;
68
+ }
69
+ return false;
70
+ });
71
+ if (packageDefs.length > 0) {
72
+ return { candidates: packageDefs, tier: 'import-scoped' };
73
+ }
74
+ }
75
+ // Tier 3: Global — pass all candidates through.
76
+ // Consumers must check candidate count and refuse ambiguous matches.
77
+ return { candidates: allDefs, tier: 'global' };
78
+ };
79
+ const resolve = (name, fromFile) => {
80
+ // Check cache (only when enabled AND fromFile matches cached file)
81
+ if (cache && cacheFile === fromFile) {
82
+ if (cache.has(name)) {
83
+ cacheHits++;
84
+ return cache.get(name);
85
+ }
86
+ cacheMisses++;
87
+ }
88
+ const result = resolveUncached(name, fromFile);
89
+ // Store in cache if active and file matches
90
+ if (cache && cacheFile === fromFile) {
91
+ cache.set(name, result);
92
+ }
93
+ return result;
94
+ };
95
+ // --- Cache lifecycle ---
96
+ const enableCache = (filePath) => {
97
+ cacheFile = filePath;
98
+ if (!cache)
99
+ cache = new Map();
100
+ else
101
+ cache.clear();
102
+ };
103
+ const clearCache = () => {
104
+ cacheFile = null;
105
+ // Reuse the Map instance — just clear entries to reduce GC pressure at scale.
106
+ cache?.clear();
107
+ };
108
+ const getStats = () => ({
109
+ ...symbols.getStats(),
110
+ cacheHits,
111
+ cacheMisses,
112
+ });
113
+ const clear = () => {
114
+ symbols.clear();
115
+ importMap.clear();
116
+ packageMap.clear();
117
+ namedImportMap.clear();
118
+ moduleAliasMap.clear();
119
+ clearCache();
120
+ cacheHits = 0;
121
+ cacheMisses = 0;
122
+ };
123
+ return {
124
+ resolve,
125
+ symbols,
126
+ importMap,
127
+ packageMap,
128
+ namedImportMap,
129
+ moduleAliasMap,
130
+ enableCache,
131
+ clearCache,
132
+ getStats,
133
+ clear,
134
+ };
135
+ };
136
+ //# sourceMappingURL=resolution-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution-context.js","sourceRoot":"","sources":["../../../src/core/parser/resolution-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function expoFileToRouteURL(filePath: string): string | null;
@@ -0,0 +1,37 @@
1
+ // Expo Router route extraction utilities.
2
+ export function expoFileToRouteURL(filePath) {
3
+ const normalized = filePath.replace(/\\/g, '/');
4
+ // Skip TypeScript declaration files
5
+ if (/\.d\.tsx?$/.test(normalized))
6
+ return null;
7
+ // Must be inside an app/ directory
8
+ const appMatch = normalized.match(/app\/(.+)\.(tsx?|jsx?)$/);
9
+ if (!appMatch)
10
+ return null;
11
+ const segments = appMatch[1];
12
+ const fileName = segments.split('/').pop() || '';
13
+ // Skip layout files (_layout.tsx)
14
+ if (fileName.startsWith('_'))
15
+ return null;
16
+ // Skip special Expo files (+not-found.tsx, +html.tsx) — but NOT +api files
17
+ if (fileName.startsWith('+') && !fileName.startsWith('+api'))
18
+ return null;
19
+ // Handle Expo API routes: users+api.ts → /users
20
+ if (fileName.endsWith('+api')) {
21
+ const apiSegments = segments.replace(/\+api$/, '');
22
+ const route = '/' + stripRouteGroups(apiSegments);
23
+ return stripIndex(route);
24
+ }
25
+ // Regular screen route
26
+ const route = '/' + stripRouteGroups(segments);
27
+ return stripIndex(route);
28
+ }
29
+ function stripRouteGroups(path) {
30
+ return path.replace(/\([^)]+\)\/?/g, '');
31
+ }
32
+ function stripIndex(route) {
33
+ if (route === '/index')
34
+ return '/';
35
+ return route.replace(/\/index$/, '') || '/';
36
+ }
37
+ //# sourceMappingURL=expo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expo.js","sourceRoot":"","sources":["../../../../src/core/parser/route-extractors/expo.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAE1C,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEhD,oCAAoC;IACpC,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/C,mCAAmC;IACnC,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7D,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAEjD,kCAAkC;IAClC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1C,2EAA2E;IAC3E,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1E,gDAAgD;IAChD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,GAAG,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAClD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,uBAAuB;IACvB,MAAM,KAAK,GAAG,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Middleware chain extraction from route handler file content.
3
+ * Detects wrapper patterns like: export const POST = withA(withB(withC(handler)))
4
+ */
5
+ /** Keywords that terminate middleware chain walking (not wrapper function names) */
6
+ export declare const MIDDLEWARE_STOP_KEYWORDS: Set<string>;
7
+ /**
8
+ * Extract middleware wrapper chain from a route handler file.
9
+ * Detects patterns like: export const POST = withA(withB(withC(handler)))
10
+ * Returns an object with the wrapper function names (outermost-first) and the
11
+ * HTTP method they were captured from, or undefined if no chain found.
12
+ */
13
+ export declare function extractMiddlewareChain(content: string): {
14
+ chain: string[];
15
+ method: string;
16
+ } | undefined;
17
+ export interface NextjsMiddlewareConfig {
18
+ matchers: string[];
19
+ exportedName: string;
20
+ wrappedFunctions: string[];
21
+ }
22
+ /**
23
+ * Parse a Next.js project-level middleware.ts file and extract:
24
+ * - config.matcher patterns (string or string[])
25
+ * - the exported middleware function name
26
+ * - wrapper composition (e.g. chain([withAuth, withI18n]))
27
+ */
28
+ export declare function extractNextjsMiddlewareConfig(content: string): NextjsMiddlewareConfig | undefined;
29
+ /** Pre-compiled matcher for efficient per-route testing. */
30
+ export type CompiledMatcher = {
31
+ type: 'prefix';
32
+ prefix: string;
33
+ } | {
34
+ type: 'regex';
35
+ re: RegExp;
36
+ } | {
37
+ type: 'exact';
38
+ value: string;
39
+ };
40
+ /**
41
+ * Compile a Next.js middleware matcher pattern into a reusable matcher.
42
+ * Call once per pattern, then use compiledMatcherMatchesRoute per route.
43
+ */
44
+ export declare function compileMatcher(matcher: string): CompiledMatcher | null;
45
+ /** Test a route URL against a pre-compiled matcher. */
46
+ export declare function compiledMatcherMatchesRoute(cm: CompiledMatcher, routeURL: string): boolean;
47
+ export declare function middlewareMatcherMatchesRoute(matcher: string, routeURL: string): boolean;
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Middleware chain extraction from route handler file content.
3
+ * Detects wrapper patterns like: export const POST = withA(withB(withC(handler)))
4
+ */
5
+ /** Keywords that terminate middleware chain walking (not wrapper function names) */
6
+ /** Names that are composition wrappers, not middleware functions themselves. */
7
+ const COMPOSER_NAMES = new Set(['middleware', 'default', 'chain', 'compose']);
8
+ /** Keywords that terminate middleware chain walking (not wrapper function names) */
9
+ export const MIDDLEWARE_STOP_KEYWORDS = new Set([
10
+ 'async',
11
+ 'await',
12
+ 'function',
13
+ 'new',
14
+ 'return',
15
+ 'if',
16
+ 'for',
17
+ 'while',
18
+ 'switch',
19
+ 'class',
20
+ 'const',
21
+ 'let',
22
+ 'var',
23
+ 'req',
24
+ 'res',
25
+ 'request',
26
+ 'response',
27
+ 'event',
28
+ 'ctx',
29
+ 'context',
30
+ 'next',
31
+ ]);
32
+ /** Walk nested wrapper calls starting at `pos` in `content`, returning function names. */
33
+ function walkNestedWrappers(content, pos) {
34
+ const names = [];
35
+ const nestedRe = /^\s*(\w+)\s*\(/;
36
+ let remaining = content.slice(pos);
37
+ let nested;
38
+ while ((nested = nestedRe.exec(remaining)) !== null) {
39
+ if (MIDDLEWARE_STOP_KEYWORDS.has(nested[1]))
40
+ break;
41
+ names.push(nested[1]);
42
+ pos += nested[0].length;
43
+ remaining = content.slice(pos);
44
+ }
45
+ return names;
46
+ }
47
+ /**
48
+ * Extract middleware wrapper chain from a route handler file.
49
+ * Detects patterns like: export const POST = withA(withB(withC(handler)))
50
+ * Returns an object with the wrapper function names (outermost-first) and the
51
+ * HTTP method they were captured from, or undefined if no chain found.
52
+ */
53
+ export function extractMiddlewareChain(content) {
54
+ const mwPattern = /export\s+(?:const\s+(POST|GET|PUT|DELETE|PATCH|HEAD|OPTIONS)\s*=|default)\s+(\w+)\s*\(/g;
55
+ let mwMatch;
56
+ while ((mwMatch = mwPattern.exec(content)) !== null) {
57
+ const method = mwMatch[1] ?? 'default';
58
+ const firstWrapper = mwMatch[2];
59
+ const chain = [firstWrapper];
60
+ chain.push(...walkNestedWrappers(content, mwMatch.index + mwMatch[0].length));
61
+ if (chain.length >= 2 || (chain.length === 1 && /^with[A-Z]/.test(chain[0]))) {
62
+ return { chain, method };
63
+ }
64
+ }
65
+ return undefined;
66
+ }
67
+ /**
68
+ * Parse a Next.js project-level middleware.ts file and extract:
69
+ * - config.matcher patterns (string or string[])
70
+ * - the exported middleware function name
71
+ * - wrapper composition (e.g. chain([withAuth, withI18n]))
72
+ */
73
+ export function extractNextjsMiddlewareConfig(content) {
74
+ const matchers = [];
75
+ const matcherArrayRe = /config\s*=\s*\{[^}]*matcher\s*:\s*\[([^\]]*)\]/s;
76
+ const matcherStringRe = /config\s*=\s*\{[^}]*matcher\s*:\s*(['"`])([^'"`]+)\1/s;
77
+ const arrMatch = matcherArrayRe.exec(content);
78
+ if (arrMatch) {
79
+ const items = arrMatch[1];
80
+ const strRe = /(['"`])((?:[^'"`\\\\]|\\\\.)*)\1/g;
81
+ let m;
82
+ while ((m = strRe.exec(items)) !== null) {
83
+ matchers.push(m[2]);
84
+ }
85
+ }
86
+ else {
87
+ const strMatch = matcherStringRe.exec(content);
88
+ if (strMatch) {
89
+ matchers.push(strMatch[2]);
90
+ }
91
+ }
92
+ let exportedName = 'middleware';
93
+ const isNamedMw = /export\s+(?:async\s+)?function\s+middleware\b/.test(content);
94
+ const isConstMw = /export\s+const\s+middleware\s*=/.test(content);
95
+ const defaultFunctionMatch = /export\s+default\s+(?:async\s+)?function(?:\s+(\w+))?/.exec(content);
96
+ const defaultIdentifierMatch = /export\s+default\s+(?!function\b)(\w+)/.exec(content);
97
+ if (!isNamedMw && !isConstMw) {
98
+ if (defaultFunctionMatch) {
99
+ exportedName = defaultFunctionMatch[1] ?? 'middleware';
100
+ }
101
+ else if (defaultIdentifierMatch) {
102
+ exportedName = defaultIdentifierMatch[1];
103
+ }
104
+ }
105
+ // --- wrapper composition ---
106
+ const wrappedFunctions = [];
107
+ // Pattern: chain([fn1, fn2]) or compose(fn1, fn2)
108
+ const chainRe = /(?:chain|compose)\s*\(\s*\[([^\]]+)\]/;
109
+ const chainMatch = chainRe.exec(content);
110
+ if (chainMatch) {
111
+ const fns = chainMatch[1]
112
+ .split(',')
113
+ .map((s) => s.trim())
114
+ .filter(Boolean);
115
+ wrappedFunctions.push(...fns);
116
+ }
117
+ // Pattern: export default withA(withB(handler))
118
+ const wrapperRe = /export\s+default\s+(\w+)\s*\(/;
119
+ const wrapperMatch = wrapperRe.exec(content);
120
+ if (wrapperMatch && wrappedFunctions.length === 0) {
121
+ const name = wrapperMatch[1];
122
+ if (name !== 'function' && name !== 'async') {
123
+ wrappedFunctions.push(name);
124
+ wrappedFunctions.push(...walkNestedWrappers(content, wrapperMatch.index + wrapperMatch[0].length));
125
+ }
126
+ }
127
+ if (!COMPOSER_NAMES.has(exportedName) && !wrappedFunctions.includes(exportedName)) {
128
+ wrappedFunctions.unshift(exportedName);
129
+ }
130
+ const hasExport = isNamedMw || isConstMw || !!defaultFunctionMatch || !!defaultIdentifierMatch;
131
+ if (!hasExport && matchers.length === 0 && wrappedFunctions.length === 0)
132
+ return undefined;
133
+ return { matchers, exportedName, wrappedFunctions };
134
+ }
135
+ /**
136
+ * Compile a Next.js middleware matcher pattern into a reusable matcher.
137
+ * Call once per pattern, then use compiledMatcherMatchesRoute per route.
138
+ */
139
+ export function compileMatcher(matcher) {
140
+ const paramWild = matcher.replace(/\/:path\*$/, '');
141
+ if (paramWild !== matcher)
142
+ return { type: 'prefix', prefix: paramWild };
143
+ if (matcher.includes('(')) {
144
+ try {
145
+ return { type: 'regex', re: new RegExp('^' + matcher + '$') };
146
+ }
147
+ catch {
148
+ return null;
149
+ }
150
+ }
151
+ return { type: 'exact', value: matcher };
152
+ }
153
+ /** Test a route URL against a pre-compiled matcher. */
154
+ export function compiledMatcherMatchesRoute(cm, routeURL) {
155
+ switch (cm.type) {
156
+ case 'prefix':
157
+ return routeURL === cm.prefix || routeURL.startsWith(cm.prefix + '/');
158
+ case 'regex':
159
+ return cm.re.test(routeURL);
160
+ case 'exact':
161
+ return routeURL === cm.value;
162
+ }
163
+ }
164
+ export function middlewareMatcherMatchesRoute(matcher, routeURL) {
165
+ const cm = compileMatcher(matcher);
166
+ return cm ? compiledMatcherMatchesRoute(cm, routeURL) : false;
167
+ }
168
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../../src/core/parser/route-extractors/middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function nextjsFileToRouteURL(filePath: string): string | null;
2
+ export declare function normalizeFetchURL(rawURL: string): string | null;
3
+ export declare function routeMatches(fetchURL: string, routeURL: string): boolean;
@@ -0,0 +1,77 @@
1
+ // Next.js route extraction utilities.
2
+ //
3
+ // Converts file paths to route URLs, extracts HTTP methods from App Router
4
+ // route handlers, normalises fetch URLs, and matches fetch calls to routes.
5
+ // Convert a Next.js file path to its API route URL.
6
+ // Supports both App Router (app/**/route.ts) and Pages Router
7
+ // (pages/api/**/*.ts) conventions.
8
+ // Returns the route URL (e.g. /api/grants) or null if the path is not a
9
+ // recognised route handler.
10
+ export function nextjsFileToRouteURL(filePath) {
11
+ const normalized = filePath.replace(/\\/g, '/');
12
+ // App Router: app/**/api/**/route.ts (restrict to API routes to avoid noise
13
+ // from page-level route handlers that fetch() calls won't match anyway).
14
+ // Route groups like (admin) may appear before api/.
15
+ const appMatch = normalized.match(/app\/(.+?)\/route\.(ts|js|tsx|jsx)$/);
16
+ if (appMatch) {
17
+ // Strip route groups: (admin), (marketing) etc. are not URL segments
18
+ const stripped = appMatch[1].replace(/\([^)]+\)\/?/g, '');
19
+ // Only match if the path contains an api/ segment
20
+ if (!stripped.startsWith('api/') && stripped !== 'api')
21
+ return null;
22
+ return '/' + stripped;
23
+ }
24
+ // Pages Router: pages/api/**/*.ts
25
+ const pagesMatch = normalized.match(/pages\/(api\/.+?)\.(ts|js|tsx|jsx)$/);
26
+ if (pagesMatch) {
27
+ let route = '/' + pagesMatch[1];
28
+ route = route.replace(/\/index$/, '');
29
+ return route;
30
+ }
31
+ return null;
32
+ }
33
+ // Normalise a fetch URL so it can be matched against route patterns.
34
+ // - Strips query strings (?page=1)
35
+ // - Replaces template-literal expressions (${slug}) with [param]
36
+ // - Returns null for URLs that cannot be statically resolved (string
37
+ // concatenation, function calls, non-API paths).
38
+ export function normalizeFetchURL(rawURL) {
39
+ let url = rawURL.split('?')[0];
40
+ url = url.replace(/\$\{[^}]+\}/g, '[param]');
41
+ url = url.replace(/^`|`$/g, '');
42
+ // Strip file extensions from URLs (PHP projects use /api/upload.php but routes are /api/upload)
43
+ url = url.replace(/\.(php|asp|aspx|jsp|cgi)$/, '');
44
+ if (url.includes('+') || url.includes('('))
45
+ return null;
46
+ // Must be an absolute path
47
+ if (!url.startsWith('/'))
48
+ return null;
49
+ return url;
50
+ }
51
+ // Check whether a (normalised) fetch URL matches a Next.js route pattern.
52
+ // Dynamic segments on either side (e.g. [param], [slug]) are treated as
53
+ // wildcards that match any single path segment.
54
+ export function routeMatches(fetchURL, routeURL) {
55
+ const fetchParts = fetchURL.split('/').filter(Boolean);
56
+ const routeParts = routeURL.split('/').filter(Boolean);
57
+ // Check for catch-all route: [...param] or optional catch-all [[...param]]
58
+ const lastRoutePart = routeParts[routeParts.length - 1];
59
+ if (lastRoutePart?.startsWith('[...') || lastRoutePart?.startsWith('[[...')) {
60
+ // Catch-all: match if fetch has at least as many segments as route (minus catch-all)
61
+ if (fetchParts.length < routeParts.length - 1)
62
+ return false;
63
+ return routeParts.slice(0, -1).every((part, i) => {
64
+ if (part.startsWith('[') || fetchParts[i].startsWith('['))
65
+ return true;
66
+ return part === fetchParts[i];
67
+ });
68
+ }
69
+ if (fetchParts.length !== routeParts.length)
70
+ return false;
71
+ return fetchParts.every((part, i) => {
72
+ if (part.startsWith('[') || routeParts[i].startsWith('['))
73
+ return true;
74
+ return part === routeParts[i];
75
+ });
76
+ }
77
+ //# sourceMappingURL=nextjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../../../src/core/parser/route-extractors/nextjs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Convert a PHP file path to its route URL.
3
+ * Handles direct file-based routing (no framework).
4
+ * api/upload.php → /api/upload
5
+ * api/next_sign.php → /api/next_sign
6
+ */
7
+ export declare function phpFileToRouteURL(filePath: string): string | null;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Convert a PHP file path to its route URL.
3
+ * Handles direct file-based routing (no framework).
4
+ * api/upload.php → /api/upload
5
+ * api/next_sign.php → /api/next_sign
6
+ */
7
+ export function phpFileToRouteURL(filePath) {
8
+ const normalized = filePath.replace(/\\/g, '/');
9
+ // Only match files in api/ directory
10
+ const apiMatch = normalized.match(/^(api\/.+?)\.php$/);
11
+ if (apiMatch) {
12
+ const fileName = normalized.split('/').pop().replace('.php', '');
13
+ // Skip non-handler files — use word-boundary matching to avoid false negatives
14
+ // on names like "contest", "attestation", "base64_encode"
15
+ if (fileName.startsWith('_') ||
16
+ /(?:^|_)(helper|config|test|fixture|mock|setup|bootstrap)(?:_|$)/.test(fileName)) {
17
+ return null;
18
+ }
19
+ return '/' + apiMatch[1];
20
+ }
21
+ return null;
22
+ }
23
+ //# sourceMappingURL=php.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"php.js","sourceRoot":"","sources":["../../../../src/core/parser/route-extractors/php.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEhD,qCAAqC;IACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClE,+EAA+E;QAC/E,0DAA0D;QAC1D,IACE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;YACxB,iEAAiE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAChF,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Response shape extraction from route handler file content.
3
+ * Detects .json() calls (JS/TS) and json_encode() calls (PHP),
4
+ * extracts top-level keys, and classifies by HTTP status code.
5
+ */
6
+ /**
7
+ * Detect an HTTP status code associated with a .json() call.
8
+ */
9
+ export declare function detectStatusCode(content: string, jsonMatchPos: number, closingBracePos: number): number | undefined;
10
+ /**
11
+ * Extract response shapes from JS/TS handler file content.
12
+ */
13
+ export declare function extractResponseShapes(content: string): {
14
+ responseKeys?: string[];
15
+ errorKeys?: string[];
16
+ };
17
+ export declare function extractPHPResponseShapes(content: string): {
18
+ responseKeys?: string[];
19
+ errorKeys?: string[];
20
+ };