@liendev/core 0.19.5

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 (298) hide show
  1. package/README.md +336 -0
  2. package/dist/config/loader.d.ts +12 -0
  3. package/dist/config/loader.d.ts.map +1 -0
  4. package/dist/config/loader.js +46 -0
  5. package/dist/config/loader.js.map +1 -0
  6. package/dist/config/merge.d.ts +20 -0
  7. package/dist/config/merge.d.ts.map +1 -0
  8. package/dist/config/merge.js +71 -0
  9. package/dist/config/merge.js.map +1 -0
  10. package/dist/config/migration-manager.d.ts +46 -0
  11. package/dist/config/migration-manager.d.ts.map +1 -0
  12. package/dist/config/migration-manager.js +119 -0
  13. package/dist/config/migration-manager.js.map +1 -0
  14. package/dist/config/migration.d.ts +20 -0
  15. package/dist/config/migration.d.ts.map +1 -0
  16. package/dist/config/migration.js +155 -0
  17. package/dist/config/migration.js.map +1 -0
  18. package/dist/config/schema.d.ts +101 -0
  19. package/dist/config/schema.d.ts.map +1 -0
  20. package/dist/config/schema.js +58 -0
  21. package/dist/config/schema.js.map +1 -0
  22. package/dist/config/service.d.ts +122 -0
  23. package/dist/config/service.d.ts.map +1 -0
  24. package/dist/config/service.js +477 -0
  25. package/dist/config/service.js.map +1 -0
  26. package/dist/constants.d.ts +20 -0
  27. package/dist/constants.d.ts.map +1 -0
  28. package/dist/constants.js +43 -0
  29. package/dist/constants.js.map +1 -0
  30. package/dist/embeddings/cache.d.ts +45 -0
  31. package/dist/embeddings/cache.d.ts.map +1 -0
  32. package/dist/embeddings/cache.js +109 -0
  33. package/dist/embeddings/cache.js.map +1 -0
  34. package/dist/embeddings/local.d.ts +10 -0
  35. package/dist/embeddings/local.d.ts.map +1 -0
  36. package/dist/embeddings/local.js +63 -0
  37. package/dist/embeddings/local.js.map +1 -0
  38. package/dist/embeddings/types.d.ts +9 -0
  39. package/dist/embeddings/types.d.ts.map +1 -0
  40. package/dist/embeddings/types.js +5 -0
  41. package/dist/embeddings/types.js.map +1 -0
  42. package/dist/errors/codes.d.ts +18 -0
  43. package/dist/errors/codes.d.ts.map +1 -0
  44. package/dist/errors/codes.js +25 -0
  45. package/dist/errors/codes.js.map +1 -0
  46. package/dist/errors/index.d.ts +85 -0
  47. package/dist/errors/index.d.ts.map +1 -0
  48. package/dist/errors/index.js +134 -0
  49. package/dist/errors/index.js.map +1 -0
  50. package/dist/frameworks/detector-service.d.ts +59 -0
  51. package/dist/frameworks/detector-service.d.ts.map +1 -0
  52. package/dist/frameworks/detector-service.js +219 -0
  53. package/dist/frameworks/detector-service.js.map +1 -0
  54. package/dist/frameworks/laravel/config.d.ts +6 -0
  55. package/dist/frameworks/laravel/config.d.ts.map +1 -0
  56. package/dist/frameworks/laravel/config.js +68 -0
  57. package/dist/frameworks/laravel/config.js.map +1 -0
  58. package/dist/frameworks/laravel/detector.d.ts +6 -0
  59. package/dist/frameworks/laravel/detector.d.ts.map +1 -0
  60. package/dist/frameworks/laravel/detector.js +96 -0
  61. package/dist/frameworks/laravel/detector.js.map +1 -0
  62. package/dist/frameworks/nodejs/config.d.ts +6 -0
  63. package/dist/frameworks/nodejs/config.d.ts.map +1 -0
  64. package/dist/frameworks/nodejs/config.js +57 -0
  65. package/dist/frameworks/nodejs/config.js.map +1 -0
  66. package/dist/frameworks/nodejs/detector.d.ts +6 -0
  67. package/dist/frameworks/nodejs/detector.d.ts.map +1 -0
  68. package/dist/frameworks/nodejs/detector.js +77 -0
  69. package/dist/frameworks/nodejs/detector.js.map +1 -0
  70. package/dist/frameworks/php/config.d.ts +6 -0
  71. package/dist/frameworks/php/config.d.ts.map +1 -0
  72. package/dist/frameworks/php/config.js +53 -0
  73. package/dist/frameworks/php/config.js.map +1 -0
  74. package/dist/frameworks/php/detector.d.ts +7 -0
  75. package/dist/frameworks/php/detector.d.ts.map +1 -0
  76. package/dist/frameworks/php/detector.js +101 -0
  77. package/dist/frameworks/php/detector.js.map +1 -0
  78. package/dist/frameworks/registry.d.ts +20 -0
  79. package/dist/frameworks/registry.d.ts.map +1 -0
  80. package/dist/frameworks/registry.js +38 -0
  81. package/dist/frameworks/registry.js.map +1 -0
  82. package/dist/frameworks/shopify/config.d.ts +6 -0
  83. package/dist/frameworks/shopify/config.d.ts.map +1 -0
  84. package/dist/frameworks/shopify/config.js +50 -0
  85. package/dist/frameworks/shopify/config.js.map +1 -0
  86. package/dist/frameworks/shopify/detector.d.ts +6 -0
  87. package/dist/frameworks/shopify/detector.d.ts.map +1 -0
  88. package/dist/frameworks/shopify/detector.js +103 -0
  89. package/dist/frameworks/shopify/detector.js.map +1 -0
  90. package/dist/frameworks/types.d.ts +51 -0
  91. package/dist/frameworks/types.d.ts.map +1 -0
  92. package/dist/frameworks/types.js +21 -0
  93. package/dist/frameworks/types.js.map +1 -0
  94. package/dist/git/tracker.d.ts +56 -0
  95. package/dist/git/tracker.d.ts.map +1 -0
  96. package/dist/git/tracker.js +189 -0
  97. package/dist/git/tracker.js.map +1 -0
  98. package/dist/git/utils.d.ts +60 -0
  99. package/dist/git/utils.d.ts.map +1 -0
  100. package/dist/git/utils.js +152 -0
  101. package/dist/git/utils.js.map +1 -0
  102. package/dist/index.d.ts +77 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +95 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/indexer/ast/chunker.d.ts +28 -0
  107. package/dist/indexer/ast/chunker.d.ts.map +1 -0
  108. package/dist/indexer/ast/chunker.js +268 -0
  109. package/dist/indexer/ast/chunker.js.map +1 -0
  110. package/dist/indexer/ast/complexity/cognitive.d.ts +16 -0
  111. package/dist/indexer/ast/complexity/cognitive.d.ts.map +1 -0
  112. package/dist/indexer/ast/complexity/cognitive.js +106 -0
  113. package/dist/indexer/ast/complexity/cognitive.js.map +1 -0
  114. package/dist/indexer/ast/complexity/cyclomatic.d.ts +12 -0
  115. package/dist/indexer/ast/complexity/cyclomatic.d.ts.map +1 -0
  116. package/dist/indexer/ast/complexity/cyclomatic.js +61 -0
  117. package/dist/indexer/ast/complexity/cyclomatic.js.map +1 -0
  118. package/dist/indexer/ast/complexity/halstead.d.ts +55 -0
  119. package/dist/indexer/ast/complexity/halstead.d.ts.map +1 -0
  120. package/dist/indexer/ast/complexity/halstead.js +290 -0
  121. package/dist/indexer/ast/complexity/halstead.js.map +1 -0
  122. package/dist/indexer/ast/complexity/index.d.ts +13 -0
  123. package/dist/indexer/ast/complexity/index.d.ts.map +1 -0
  124. package/dist/indexer/ast/complexity/index.js +12 -0
  125. package/dist/indexer/ast/complexity/index.js.map +1 -0
  126. package/dist/indexer/ast/parser.d.ts +27 -0
  127. package/dist/indexer/ast/parser.d.ts.map +1 -0
  128. package/dist/indexer/ast/parser.js +103 -0
  129. package/dist/indexer/ast/parser.js.map +1 -0
  130. package/dist/indexer/ast/symbols.d.ts +17 -0
  131. package/dist/indexer/ast/symbols.d.ts.map +1 -0
  132. package/dist/indexer/ast/symbols.js +265 -0
  133. package/dist/indexer/ast/symbols.js.map +1 -0
  134. package/dist/indexer/ast/traversers/index.d.ts +19 -0
  135. package/dist/indexer/ast/traversers/index.d.ts.map +1 -0
  136. package/dist/indexer/ast/traversers/index.js +42 -0
  137. package/dist/indexer/ast/traversers/index.js.map +1 -0
  138. package/dist/indexer/ast/traversers/php.d.ts +21 -0
  139. package/dist/indexer/ast/traversers/php.d.ts.map +1 -0
  140. package/dist/indexer/ast/traversers/php.js +67 -0
  141. package/dist/indexer/ast/traversers/php.js.map +1 -0
  142. package/dist/indexer/ast/traversers/python.d.ts +28 -0
  143. package/dist/indexer/ast/traversers/python.d.ts.map +1 -0
  144. package/dist/indexer/ast/traversers/python.js +67 -0
  145. package/dist/indexer/ast/traversers/python.js.map +1 -0
  146. package/dist/indexer/ast/traversers/types.d.ts +98 -0
  147. package/dist/indexer/ast/traversers/types.d.ts.map +1 -0
  148. package/dist/indexer/ast/traversers/types.js +2 -0
  149. package/dist/indexer/ast/traversers/types.js.map +1 -0
  150. package/dist/indexer/ast/traversers/typescript.d.ts +29 -0
  151. package/dist/indexer/ast/traversers/typescript.d.ts.map +1 -0
  152. package/dist/indexer/ast/traversers/typescript.js +88 -0
  153. package/dist/indexer/ast/traversers/typescript.js.map +1 -0
  154. package/dist/indexer/ast/types.d.ts +59 -0
  155. package/dist/indexer/ast/types.d.ts.map +1 -0
  156. package/dist/indexer/ast/types.js +2 -0
  157. package/dist/indexer/ast/types.js.map +1 -0
  158. package/dist/indexer/change-detector.d.ts +17 -0
  159. package/dist/indexer/change-detector.d.ts.map +1 -0
  160. package/dist/indexer/change-detector.js +207 -0
  161. package/dist/indexer/change-detector.js.map +1 -0
  162. package/dist/indexer/chunk-batch-processor.d.ts +103 -0
  163. package/dist/indexer/chunk-batch-processor.d.ts.map +1 -0
  164. package/dist/indexer/chunk-batch-processor.js +179 -0
  165. package/dist/indexer/chunk-batch-processor.js.map +1 -0
  166. package/dist/indexer/chunker.d.ts +10 -0
  167. package/dist/indexer/chunker.d.ts.map +1 -0
  168. package/dist/indexer/chunker.js +96 -0
  169. package/dist/indexer/chunker.js.map +1 -0
  170. package/dist/indexer/dependency-analyzer.d.ts +60 -0
  171. package/dist/indexer/dependency-analyzer.d.ts.map +1 -0
  172. package/dist/indexer/dependency-analyzer.js +261 -0
  173. package/dist/indexer/dependency-analyzer.js.map +1 -0
  174. package/dist/indexer/incremental.d.ts +47 -0
  175. package/dist/indexer/incremental.d.ts.map +1 -0
  176. package/dist/indexer/incremental.js +284 -0
  177. package/dist/indexer/incremental.js.map +1 -0
  178. package/dist/indexer/index.d.ts +80 -0
  179. package/dist/indexer/index.d.ts.map +1 -0
  180. package/dist/indexer/index.js +364 -0
  181. package/dist/indexer/index.js.map +1 -0
  182. package/dist/indexer/json-template-chunker.d.ts +9 -0
  183. package/dist/indexer/json-template-chunker.d.ts.map +1 -0
  184. package/dist/indexer/json-template-chunker.js +83 -0
  185. package/dist/indexer/json-template-chunker.js.map +1 -0
  186. package/dist/indexer/liquid-chunker.d.ts +13 -0
  187. package/dist/indexer/liquid-chunker.d.ts.map +1 -0
  188. package/dist/indexer/liquid-chunker.js +272 -0
  189. package/dist/indexer/liquid-chunker.js.map +1 -0
  190. package/dist/indexer/manifest.d.ts +122 -0
  191. package/dist/indexer/manifest.d.ts.map +1 -0
  192. package/dist/indexer/manifest.js +262 -0
  193. package/dist/indexer/manifest.js.map +1 -0
  194. package/dist/indexer/progress-tracker.d.ts +35 -0
  195. package/dist/indexer/progress-tracker.d.ts.map +1 -0
  196. package/dist/indexer/progress-tracker.js +33 -0
  197. package/dist/indexer/progress-tracker.js.map +1 -0
  198. package/dist/indexer/scanner.d.ts +16 -0
  199. package/dist/indexer/scanner.d.ts.map +1 -0
  200. package/dist/indexer/scanner.js +159 -0
  201. package/dist/indexer/scanner.js.map +1 -0
  202. package/dist/indexer/symbol-extractor.d.ts +18 -0
  203. package/dist/indexer/symbol-extractor.d.ts.map +1 -0
  204. package/dist/indexer/symbol-extractor.js +351 -0
  205. package/dist/indexer/symbol-extractor.js.map +1 -0
  206. package/dist/indexer/types.d.ts +34 -0
  207. package/dist/indexer/types.d.ts.map +1 -0
  208. package/dist/indexer/types.js +2 -0
  209. package/dist/indexer/types.js.map +1 -0
  210. package/dist/insights/complexity-analyzer.d.ts +82 -0
  211. package/dist/insights/complexity-analyzer.d.ts.map +1 -0
  212. package/dist/insights/complexity-analyzer.js +356 -0
  213. package/dist/insights/complexity-analyzer.js.map +1 -0
  214. package/dist/insights/formatters/index.d.ts +11 -0
  215. package/dist/insights/formatters/index.d.ts.map +1 -0
  216. package/dist/insights/formatters/index.js +20 -0
  217. package/dist/insights/formatters/index.js.map +1 -0
  218. package/dist/insights/formatters/json.d.ts +7 -0
  219. package/dist/insights/formatters/json.d.ts.map +1 -0
  220. package/dist/insights/formatters/json.js +14 -0
  221. package/dist/insights/formatters/json.js.map +1 -0
  222. package/dist/insights/formatters/sarif.d.ts +6 -0
  223. package/dist/insights/formatters/sarif.d.ts.map +1 -0
  224. package/dist/insights/formatters/sarif.js +113 -0
  225. package/dist/insights/formatters/sarif.js.map +1 -0
  226. package/dist/insights/formatters/text.d.ts +6 -0
  227. package/dist/insights/formatters/text.d.ts.map +1 -0
  228. package/dist/insights/formatters/text.js +154 -0
  229. package/dist/insights/formatters/text.js.map +1 -0
  230. package/dist/insights/types.d.ts +73 -0
  231. package/dist/insights/types.d.ts.map +1 -0
  232. package/dist/insights/types.js +9 -0
  233. package/dist/insights/types.js.map +1 -0
  234. package/dist/types/index.d.ts +14 -0
  235. package/dist/types/index.d.ts.map +1 -0
  236. package/dist/types/index.js +8 -0
  237. package/dist/types/index.js.map +1 -0
  238. package/dist/utils/path-matching.d.ts +69 -0
  239. package/dist/utils/path-matching.d.ts.map +1 -0
  240. package/dist/utils/path-matching.js +123 -0
  241. package/dist/utils/path-matching.js.map +1 -0
  242. package/dist/utils/result.d.ts +65 -0
  243. package/dist/utils/result.d.ts.map +1 -0
  244. package/dist/utils/result.js +67 -0
  245. package/dist/utils/result.js.map +1 -0
  246. package/dist/utils/version.d.ts +22 -0
  247. package/dist/utils/version.d.ts.map +1 -0
  248. package/dist/utils/version.js +28 -0
  249. package/dist/utils/version.js.map +1 -0
  250. package/dist/vectordb/batch-insert.d.ts +14 -0
  251. package/dist/vectordb/batch-insert.d.ts.map +1 -0
  252. package/dist/vectordb/batch-insert.js +185 -0
  253. package/dist/vectordb/batch-insert.js.map +1 -0
  254. package/dist/vectordb/boosting/composer.d.ts +51 -0
  255. package/dist/vectordb/boosting/composer.d.ts.map +1 -0
  256. package/dist/vectordb/boosting/composer.js +65 -0
  257. package/dist/vectordb/boosting/composer.js.map +1 -0
  258. package/dist/vectordb/boosting/index.d.ts +22 -0
  259. package/dist/vectordb/boosting/index.d.ts.map +1 -0
  260. package/dist/vectordb/boosting/index.js +22 -0
  261. package/dist/vectordb/boosting/index.js.map +1 -0
  262. package/dist/vectordb/boosting/strategies.d.ts +40 -0
  263. package/dist/vectordb/boosting/strategies.d.ts.map +1 -0
  264. package/dist/vectordb/boosting/strategies.js +174 -0
  265. package/dist/vectordb/boosting/strategies.js.map +1 -0
  266. package/dist/vectordb/boosting/types.d.ts +20 -0
  267. package/dist/vectordb/boosting/types.d.ts.map +1 -0
  268. package/dist/vectordb/boosting/types.js +2 -0
  269. package/dist/vectordb/boosting/types.js.map +1 -0
  270. package/dist/vectordb/intent-classifier.d.ts +99 -0
  271. package/dist/vectordb/intent-classifier.d.ts.map +1 -0
  272. package/dist/vectordb/intent-classifier.js +193 -0
  273. package/dist/vectordb/intent-classifier.js.map +1 -0
  274. package/dist/vectordb/lancedb.d.ts +45 -0
  275. package/dist/vectordb/lancedb.d.ts.map +1 -0
  276. package/dist/vectordb/lancedb.js +203 -0
  277. package/dist/vectordb/lancedb.js.map +1 -0
  278. package/dist/vectordb/maintenance.d.ts +18 -0
  279. package/dist/vectordb/maintenance.d.ts.map +1 -0
  280. package/dist/vectordb/maintenance.js +87 -0
  281. package/dist/vectordb/maintenance.js.map +1 -0
  282. package/dist/vectordb/query.d.ts +34 -0
  283. package/dist/vectordb/query.d.ts.map +1 -0
  284. package/dist/vectordb/query.js +303 -0
  285. package/dist/vectordb/query.js.map +1 -0
  286. package/dist/vectordb/relevance.d.ts +15 -0
  287. package/dist/vectordb/relevance.d.ts.map +1 -0
  288. package/dist/vectordb/relevance.js +19 -0
  289. package/dist/vectordb/relevance.js.map +1 -0
  290. package/dist/vectordb/types.d.ts +29 -0
  291. package/dist/vectordb/types.d.ts.map +1 -0
  292. package/dist/vectordb/types.js +2 -0
  293. package/dist/vectordb/types.js.map +1 -0
  294. package/dist/vectordb/version.d.ts +16 -0
  295. package/dist/vectordb/version.d.ts.map +1 -0
  296. package/dist/vectordb/version.js +40 -0
  297. package/dist/vectordb/version.js.map +1 -0
  298. package/package.json +66 -0
@@ -0,0 +1,290 @@
1
+ /**
2
+ * Language-specific operator symbols.
3
+ * These are the actual text values we match against.
4
+ */
5
+ const OPERATOR_SYMBOLS = {
6
+ typescript: new Set([
7
+ // Arithmetic
8
+ '+', '-', '*', '/', '%', '**',
9
+ // Comparison
10
+ '==', '===', '!=', '!==', '<', '>', '<=', '>=',
11
+ // Logical
12
+ '&&', '||', '!', '??',
13
+ // Assignment
14
+ '=', '+=', '-=', '*=', '/=', '%=', '**=', '&&=', '||=', '??=',
15
+ // Bitwise
16
+ '&', '|', '^', '~', '<<', '>>', '>>>',
17
+ '&=', '|=', '^=', '<<=', '>>=', '>>>=',
18
+ // Other
19
+ '?', ':', '.', '?.', '++', '--', '...', '=>',
20
+ // Brackets/parens (counted as operators)
21
+ '(', ')', '[', ']', '{', '}',
22
+ ]),
23
+ python: new Set([
24
+ // Arithmetic
25
+ '+', '-', '*', '/', '%', '**', '//',
26
+ // Comparison
27
+ '==', '!=', '<', '>', '<=', '>=',
28
+ // Logical (handled via keywords below)
29
+ // Assignment
30
+ '=', '+=', '-=', '*=', '/=', '%=', '**=', '//=',
31
+ '&=', '|=', '^=', '<<=', '>>=',
32
+ // Bitwise
33
+ '&', '|', '^', '~', '<<', '>>',
34
+ // Other
35
+ '.', ':', '->', '@',
36
+ '(', ')', '[', ']', '{', '}',
37
+ ]),
38
+ php: new Set([
39
+ // Arithmetic
40
+ '+', '-', '*', '/', '%', '**',
41
+ // Comparison
42
+ '==', '===', '!=', '!==', '<>', '<', '>', '<=', '>=', '<=>',
43
+ // Logical
44
+ '&&', '||', '!', 'and', 'or', 'xor',
45
+ // Assignment
46
+ '=', '+=', '-=', '*=', '/=', '%=', '**=', '.=',
47
+ '&=', '|=', '^=', '<<=', '>>=', '??=',
48
+ // Bitwise
49
+ '&', '|', '^', '~', '<<', '>>',
50
+ // String
51
+ '.',
52
+ // Other
53
+ '?', ':', '::', '->', '=>', '??', '@',
54
+ '(', ')', '[', ']', '{', '}',
55
+ ]),
56
+ };
57
+ /**
58
+ * Language-specific operator keywords.
59
+ * These are keywords that act as operators.
60
+ */
61
+ const OPERATOR_KEYWORDS = {
62
+ typescript: new Set([
63
+ 'if', 'else', 'for', 'while', 'do', 'switch', 'case', 'default',
64
+ 'return', 'throw', 'try', 'catch', 'finally',
65
+ 'new', 'delete', 'typeof', 'instanceof', 'in', 'of',
66
+ 'await', 'yield', 'break', 'continue',
67
+ 'const', 'let', 'var', 'function', 'class', 'extends', 'implements',
68
+ 'import', 'export', 'from', 'as',
69
+ ]),
70
+ python: new Set([
71
+ 'if', 'elif', 'else', 'for', 'while', 'match', 'case',
72
+ 'return', 'raise', 'try', 'except', 'finally',
73
+ 'and', 'or', 'not', 'is', 'in',
74
+ 'await', 'yield', 'break', 'continue', 'pass',
75
+ 'def', 'class', 'lambda', 'async',
76
+ 'import', 'from', 'as', 'with',
77
+ 'global', 'nonlocal', 'del', 'assert',
78
+ ]),
79
+ php: new Set([
80
+ 'if', 'elseif', 'else', 'for', 'foreach', 'while', 'do', 'switch', 'case', 'default', 'match',
81
+ 'return', 'throw', 'try', 'catch', 'finally',
82
+ 'new', 'clone', 'instanceof',
83
+ 'yield', 'break', 'continue',
84
+ 'function', 'class', 'extends', 'implements', 'trait', 'interface',
85
+ 'use', 'namespace', 'as',
86
+ 'echo', 'print', 'include', 'require', 'include_once', 'require_once',
87
+ 'global', 'static', 'const', 'public', 'private', 'protected', 'readonly',
88
+ ]),
89
+ };
90
+ /**
91
+ * AST node types that represent operators (language-agnostic).
92
+ * These are the tree-sitter node types, not the text content.
93
+ */
94
+ const OPERATOR_NODE_TYPES = new Set([
95
+ // Expression operators
96
+ 'binary_expression',
97
+ 'unary_expression',
98
+ 'update_expression',
99
+ 'assignment_expression',
100
+ 'augmented_assignment_expression',
101
+ 'ternary_expression',
102
+ 'conditional_expression',
103
+ // Call/access operators
104
+ 'call_expression',
105
+ 'method_call',
106
+ 'member_expression',
107
+ 'subscript_expression',
108
+ 'attribute',
109
+ // Object/array literals ([] and {} are operators)
110
+ 'array',
111
+ 'object',
112
+ 'dictionary',
113
+ 'list',
114
+ ]);
115
+ /**
116
+ * AST node types that represent operands.
117
+ */
118
+ const OPERAND_NODE_TYPES = new Set([
119
+ // Identifiers
120
+ 'identifier',
121
+ 'property_identifier',
122
+ 'shorthand_property_identifier',
123
+ 'variable_name',
124
+ 'name',
125
+ // Literals
126
+ 'number',
127
+ 'integer',
128
+ 'float',
129
+ 'string',
130
+ 'string_fragment',
131
+ 'template_string',
132
+ 'true',
133
+ 'false',
134
+ 'null',
135
+ 'undefined',
136
+ 'none',
137
+ // Special
138
+ 'this',
139
+ 'self',
140
+ 'super',
141
+ ]);
142
+ /**
143
+ * Get the operator set for a language (with fallback to typescript)
144
+ */
145
+ function getOperatorSymbols(language) {
146
+ return OPERATOR_SYMBOLS[language] || OPERATOR_SYMBOLS.typescript;
147
+ }
148
+ /**
149
+ * Get the keyword set for a language (with fallback to typescript)
150
+ */
151
+ function getOperatorKeywords(language) {
152
+ return OPERATOR_KEYWORDS[language] || OPERATOR_KEYWORDS.typescript;
153
+ }
154
+ /**
155
+ * Check if a node represents an operator
156
+ */
157
+ function isOperator(node, language) {
158
+ const nodeType = node.type;
159
+ const nodeText = node.text;
160
+ // Check if it's an operator node type
161
+ if (OPERATOR_NODE_TYPES.has(nodeType)) {
162
+ return true;
163
+ }
164
+ // Check if it's an operator symbol or keyword
165
+ const symbols = getOperatorSymbols(language);
166
+ const keywords = getOperatorKeywords(language);
167
+ return symbols.has(nodeText) || keywords.has(nodeText);
168
+ }
169
+ /**
170
+ * Check if a node represents an operand
171
+ */
172
+ function isOperand(node) {
173
+ return OPERAND_NODE_TYPES.has(node.type);
174
+ }
175
+ /**
176
+ * Get the canonical key for an operator (for counting distinct operators)
177
+ */
178
+ function getOperatorKey(node) {
179
+ // For complex expressions, use the operator type
180
+ if (OPERATOR_NODE_TYPES.has(node.type)) {
181
+ // For binary/unary expressions, extract the actual operator
182
+ const operator = node.childForFieldName('operator');
183
+ if (operator) {
184
+ return operator.text;
185
+ }
186
+ return node.type;
187
+ }
188
+ return node.text;
189
+ }
190
+ /**
191
+ * Get the canonical key for an operand (for counting distinct operands)
192
+ */
193
+ function getOperandKey(node) {
194
+ return node.text;
195
+ }
196
+ /**
197
+ * Sum all values in a map
198
+ */
199
+ function sumValues(map) {
200
+ let sum = 0;
201
+ for (const count of map.values()) {
202
+ sum += count;
203
+ }
204
+ return sum;
205
+ }
206
+ /**
207
+ * Count operators and operands in an AST node
208
+ *
209
+ * @param node - AST node to analyze (typically a function/method)
210
+ * @param language - Programming language for language-specific handling
211
+ * @returns HalsteadCounts with raw operator/operand counts
212
+ */
213
+ export function countHalstead(node, language) {
214
+ const operators = new Map();
215
+ const operands = new Map();
216
+ function traverse(n) {
217
+ // Check if this is an operator
218
+ if (isOperator(n, language)) {
219
+ const key = getOperatorKey(n);
220
+ operators.set(key, (operators.get(key) || 0) + 1);
221
+ }
222
+ // Check if this is an operand
223
+ if (isOperand(n)) {
224
+ const key = getOperandKey(n);
225
+ operands.set(key, (operands.get(key) || 0) + 1);
226
+ }
227
+ // Recurse into children
228
+ for (const child of n.children) {
229
+ traverse(child);
230
+ }
231
+ }
232
+ traverse(node);
233
+ return {
234
+ n1: operators.size,
235
+ n2: operands.size,
236
+ N1: sumValues(operators),
237
+ N2: sumValues(operands),
238
+ operators,
239
+ operands,
240
+ };
241
+ }
242
+ /**
243
+ * Calculate derived Halstead metrics from raw counts
244
+ *
245
+ * Formulas based on Maurice Halstead's "Elements of Software Science" (1977):
246
+ * - Vocabulary (n) = n1 + n2
247
+ * - Length (N) = N1 + N2
248
+ * - Volume (V) = N × log₂(n) - size of implementation
249
+ * - Difficulty (D) = (n1/2) × (N2/n2) - error-proneness
250
+ * - Effort (E) = D × V - mental effort required
251
+ * - Time (T) = E / 18 - seconds to understand (Stroud number)
252
+ * - Bugs (B) = V / 3000 - estimated delivered bugs
253
+ *
254
+ * @param counts - Raw Halstead counts from countHalstead()
255
+ * @returns Calculated HalsteadMetrics
256
+ */
257
+ export function calculateHalsteadMetrics(counts) {
258
+ const { n1, n2, N1, N2 } = counts;
259
+ const vocabulary = n1 + n2;
260
+ const length = N1 + N2;
261
+ // Avoid log(0) and division by zero
262
+ const volume = vocabulary > 0 ? length * Math.log2(vocabulary) : 0;
263
+ const difficulty = n2 > 0 ? (n1 / 2) * (N2 / n2) : 0;
264
+ const effort = difficulty * volume;
265
+ const time = effort / 18; // Stroud number (18 mental discriminations per second)
266
+ const bugs = volume / 3000;
267
+ return {
268
+ vocabulary: Math.round(vocabulary),
269
+ length: Math.round(length),
270
+ volume: Math.round(volume * 100) / 100,
271
+ difficulty: Math.round(difficulty * 100) / 100,
272
+ effort: Math.round(effort),
273
+ time: Math.round(time),
274
+ bugs: Math.round(bugs * 1000) / 1000,
275
+ };
276
+ }
277
+ /**
278
+ * Calculate Halstead metrics for an AST node in one call
279
+ *
280
+ * Convenience function that combines countHalstead and calculateHalsteadMetrics.
281
+ *
282
+ * @param node - AST node to analyze
283
+ * @param language - Programming language
284
+ * @returns Calculated HalsteadMetrics
285
+ */
286
+ export function calculateHalstead(node, language) {
287
+ const counts = countHalstead(node, language);
288
+ return calculateHalsteadMetrics(counts);
289
+ }
290
+ //# sourceMappingURL=halstead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halstead.js","sourceRoot":"","sources":["../../../../src/indexer/ast/complexity/halstead.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Complexity metrics module
3
+ *
4
+ * This module provides various code complexity metrics:
5
+ * - Cyclomatic complexity: Counts decision points (branches) in code
6
+ * - Cognitive complexity: Measures mental effort to understand code (SonarSource spec)
7
+ * - Halstead metrics: Measures complexity based on operators/operands
8
+ */
9
+ export { calculateComplexity } from './cyclomatic.js';
10
+ export { calculateCognitiveComplexity } from './cognitive.js';
11
+ export { countHalstead, calculateHalsteadMetrics, calculateHalstead, } from './halstead.js';
12
+ export type { HalsteadCounts, HalsteadMetrics } from './halstead.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/indexer/ast/complexity/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Complexity metrics module
3
+ *
4
+ * This module provides various code complexity metrics:
5
+ * - Cyclomatic complexity: Counts decision points (branches) in code
6
+ * - Cognitive complexity: Measures mental effort to understand code (SonarSource spec)
7
+ * - Halstead metrics: Measures complexity based on operators/operands
8
+ */
9
+ export { calculateComplexity } from './cyclomatic.js';
10
+ export { calculateCognitiveComplexity } from './cognitive.js';
11
+ export { countHalstead, calculateHalsteadMetrics, calculateHalstead, } from './halstead.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/indexer/ast/complexity/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { ASTParseResult, SupportedLanguage } from './types.js';
2
+ /**
3
+ * Detect language from file extension
4
+ * Uses path.extname() to handle edge cases like multiple dots in filenames
5
+ */
6
+ export declare function detectLanguage(filePath: string): SupportedLanguage | null;
7
+ /**
8
+ * Check if a file is supported for AST parsing
9
+ */
10
+ export declare function isASTSupported(filePath: string): boolean;
11
+ /**
12
+ * Parse source code into an AST using Tree-sitter
13
+ *
14
+ * **Known Limitation:** Tree-sitter may throw "Invalid argument" errors on very large files
15
+ * (1000+ lines). This is a limitation of Tree-sitter's internal buffer handling. When this
16
+ * occurs, callers should fall back to line-based chunking (handled automatically by chunker.ts).
17
+ *
18
+ * @param content - Source code to parse
19
+ * @param language - Programming language
20
+ * @returns Parse result with tree or error
21
+ */
22
+ export declare function parseAST(content: string, language: SupportedLanguage): ASTParseResult;
23
+ /**
24
+ * Clear parser cache (useful for testing)
25
+ */
26
+ export declare function clearParserCache(): void;
27
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/indexer/ast/parser.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA0CpE;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAqBzE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,cAAc,CAoBrF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
@@ -0,0 +1,103 @@
1
+ import Parser from 'tree-sitter';
2
+ import TypeScript from 'tree-sitter-typescript';
3
+ import JavaScript from 'tree-sitter-javascript';
4
+ import PHPParser from 'tree-sitter-php';
5
+ import Python from 'tree-sitter-python';
6
+ import { extname } from 'path';
7
+ /**
8
+ * Cache for parser instances to avoid recreating them
9
+ */
10
+ const parserCache = new Map();
11
+ /**
12
+ * Language configuration mapping
13
+ */
14
+ const languageConfig = {
15
+ typescript: TypeScript.typescript,
16
+ javascript: JavaScript,
17
+ php: PHPParser.php, // Note: tree-sitter-php exports both 'php' (mixed HTML/PHP) and 'php_only'
18
+ python: Python,
19
+ };
20
+ /**
21
+ * Get or create a cached parser instance for a language
22
+ */
23
+ function getParser(language) {
24
+ if (!parserCache.has(language)) {
25
+ const parser = new Parser();
26
+ const grammar = languageConfig[language];
27
+ if (!grammar) {
28
+ throw new Error(`No grammar available for language: ${language}`);
29
+ }
30
+ parser.setLanguage(grammar);
31
+ parserCache.set(language, parser);
32
+ }
33
+ return parserCache.get(language);
34
+ }
35
+ /**
36
+ * Detect language from file extension
37
+ * Uses path.extname() to handle edge cases like multiple dots in filenames
38
+ */
39
+ export function detectLanguage(filePath) {
40
+ // extname returns extension with leading dot (e.g., '.ts')
41
+ // Remove the dot and convert to lowercase
42
+ const ext = extname(filePath).slice(1).toLowerCase();
43
+ switch (ext) {
44
+ case 'ts':
45
+ case 'tsx':
46
+ return 'typescript';
47
+ case 'js':
48
+ case 'jsx':
49
+ case 'mjs':
50
+ case 'cjs':
51
+ return 'javascript';
52
+ case 'php':
53
+ return 'php';
54
+ case 'py':
55
+ return 'python';
56
+ default:
57
+ return null;
58
+ }
59
+ }
60
+ /**
61
+ * Check if a file is supported for AST parsing
62
+ */
63
+ export function isASTSupported(filePath) {
64
+ return detectLanguage(filePath) !== null;
65
+ }
66
+ /**
67
+ * Parse source code into an AST using Tree-sitter
68
+ *
69
+ * **Known Limitation:** Tree-sitter may throw "Invalid argument" errors on very large files
70
+ * (1000+ lines). This is a limitation of Tree-sitter's internal buffer handling. When this
71
+ * occurs, callers should fall back to line-based chunking (handled automatically by chunker.ts).
72
+ *
73
+ * @param content - Source code to parse
74
+ * @param language - Programming language
75
+ * @returns Parse result with tree or error
76
+ */
77
+ export function parseAST(content, language) {
78
+ try {
79
+ const parser = getParser(language);
80
+ const tree = parser.parse(content);
81
+ // Check for parse errors (hasError is a property, not a method)
82
+ if (tree.rootNode.hasError) {
83
+ return {
84
+ tree,
85
+ error: 'Parse completed with errors',
86
+ };
87
+ }
88
+ return { tree };
89
+ }
90
+ catch (error) {
91
+ return {
92
+ tree: null,
93
+ error: error instanceof Error ? error.message : 'Unknown parse error',
94
+ };
95
+ }
96
+ }
97
+ /**
98
+ * Clear parser cache (useful for testing)
99
+ */
100
+ export function clearParserCache() {
101
+ parserCache.clear();
102
+ }
103
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/indexer/ast/parser.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG/B;;GAEG;AACH,MAAM,WAAW,GAAG,IAAI,GAAG,EAA6B,CAAC;AAQzD;;GAEG;AACH,MAAM,cAAc,GAAkD;IACpE,UAAU,EAAE,UAAU,CAAC,UAAU;IACjC,UAAU,EAAE,UAAU;IACtB,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,2EAA2E;IAC/F,MAAM,EAAE,MAAM;CACf,CAAC;AAEF;;GAEG;AACH,SAAS,SAAS,CAAC,QAA2B;IAC5C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QAEzC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5B,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,2DAA2D;IAC3D,0CAA0C;IAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAErD,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,IAAI,CAAC;QACV,KAAK,KAAK;YACR,OAAO,YAAY,CAAC;QACtB,KAAK,IAAI,CAAC;QACV,KAAK,KAAK,CAAC;QACX,KAAK,KAAK,CAAC;QACX,KAAK,KAAK;YACR,OAAO,YAAY,CAAC;QACtB,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,IAAI;YACP,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,cAAc,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;AAC3C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,QAA2B;IACnE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnC,gEAAgE;QAChE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC3B,OAAO;gBACL,IAAI;gBACJ,KAAK,EAAE,6BAA6B;aACrC,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB;SACtE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,WAAW,CAAC,KAAK,EAAE,CAAC;AACtB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type Parser from 'tree-sitter';
2
+ import type { SymbolInfo } from './types.js';
3
+ /**
4
+ * Extract symbol information from an AST node using specialized extractors
5
+ *
6
+ * @param node - AST node to extract info from
7
+ * @param content - Source code content
8
+ * @param parentClass - Parent class name if this is a method
9
+ * @param language - Programming language (for disambiguating shared node types)
10
+ * @returns Symbol information or null
11
+ */
12
+ export declare function extractSymbolInfo(node: Parser.SyntaxNode, content: string, parentClass?: string, language?: string): SymbolInfo | null;
13
+ /**
14
+ * Extract import statements from a file
15
+ */
16
+ export declare function extractImports(rootNode: Parser.SyntaxNode): string[];
17
+ //# sourceMappingURL=symbols.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../../src/indexer/ast/symbols.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA2M7C;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,CAAC,UAAU,EACvB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,GAChB,UAAU,GAAG,IAAI,CASnB;AAkED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,EAAE,CAoCpE"}