codevault 1.8.4 → 1.8.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 (351) hide show
  1. package/README.md +3 -2
  2. package/dist/chunking/token-counter.d.ts.map +1 -1
  3. package/dist/chunking/token-counter.js +16 -10
  4. package/dist/chunking/token-counter.js.map +1 -1
  5. package/dist/cli/commands/index-cmd.d.ts.map +1 -1
  6. package/dist/cli/commands/index-cmd.js +108 -97
  7. package/dist/cli/commands/index-cmd.js.map +1 -1
  8. package/dist/cli/commands/interactive-config.d.ts.map +1 -1
  9. package/dist/cli/commands/interactive-config.js +40 -3
  10. package/dist/cli/commands/interactive-config.js.map +1 -1
  11. package/dist/cli/commands/search-cmd.d.ts.map +1 -1
  12. package/dist/cli/commands/search-cmd.js +11 -7
  13. package/dist/cli/commands/search-cmd.js.map +1 -1
  14. package/dist/cli/commands/search-with-code-cmd.d.ts.map +1 -1
  15. package/dist/cli/commands/search-with-code-cmd.js +3 -1
  16. package/dist/cli/commands/search-with-code-cmd.js.map +1 -1
  17. package/dist/cli/utils.d.ts +56 -0
  18. package/dist/cli/utils.d.ts.map +1 -0
  19. package/dist/cli/utils.js +98 -0
  20. package/dist/cli/utils.js.map +1 -0
  21. package/dist/config/constants.d.ts +4 -0
  22. package/dist/config/constants.d.ts.map +1 -1
  23. package/dist/config/constants.js +2 -0
  24. package/dist/config/constants.js.map +1 -1
  25. package/dist/context/packs.d.ts.map +1 -1
  26. package/dist/context/packs.js +3 -1
  27. package/dist/context/packs.js.map +1 -1
  28. package/dist/core/IndexerEngine.d.ts +2 -0
  29. package/dist/core/IndexerEngine.d.ts.map +1 -1
  30. package/dist/core/IndexerEngine.js +34 -26
  31. package/dist/core/IndexerEngine.js.map +1 -1
  32. package/dist/core/SearchService.d.ts +1 -0
  33. package/dist/core/SearchService.d.ts.map +1 -1
  34. package/dist/core/SearchService.js +18 -12
  35. package/dist/core/SearchService.js.map +1 -1
  36. package/dist/core/batch-indexer.d.ts.map +1 -1
  37. package/dist/core/batch-indexer.js +5 -13
  38. package/dist/core/batch-indexer.js.map +1 -1
  39. package/dist/core/indexing/IndexFinalizationStage.d.ts.map +1 -1
  40. package/dist/core/indexing/IndexFinalizationStage.js +21 -2
  41. package/dist/core/indexing/IndexFinalizationStage.js.map +1 -1
  42. package/dist/core/indexing/IndexState.d.ts +3 -8
  43. package/dist/core/indexing/IndexState.d.ts.map +1 -1
  44. package/dist/core/indexing/IndexState.js.map +1 -1
  45. package/dist/core/indexing/PersistManager.d.ts +1 -1
  46. package/dist/core/indexing/PersistManager.d.ts.map +1 -1
  47. package/dist/core/indexing/PersistManager.js +17 -17
  48. package/dist/core/indexing/PersistManager.js.map +1 -1
  49. package/dist/core/search/HybridFusion.d.ts +0 -1
  50. package/dist/core/search/HybridFusion.d.ts.map +1 -1
  51. package/dist/core/search/HybridFusion.js +2 -14
  52. package/dist/core/search/HybridFusion.js.map +1 -1
  53. package/dist/core/search/ResultMapper.d.ts +0 -1
  54. package/dist/core/search/ResultMapper.d.ts.map +1 -1
  55. package/dist/core/search/ResultMapper.js +2 -13
  56. package/dist/core/search/ResultMapper.js.map +1 -1
  57. package/dist/core/search/SearchContextManager.d.ts +3 -0
  58. package/dist/core/search/SearchContextManager.d.ts.map +1 -1
  59. package/dist/core/search/SearchContextManager.js +15 -2
  60. package/dist/core/search/SearchContextManager.js.map +1 -1
  61. package/dist/core/search.d.ts.map +1 -1
  62. package/dist/core/search.js +9 -4
  63. package/dist/core/search.js.map +1 -1
  64. package/dist/languages/rules.d.ts.map +1 -1
  65. package/dist/languages/rules.js +14 -5
  66. package/dist/languages/rules.js.map +1 -1
  67. package/dist/mcp/schemas.d.ts +2 -2
  68. package/dist/mcp-server.d.ts +1 -0
  69. package/dist/mcp-server.d.ts.map +1 -1
  70. package/dist/mcp-server.js +32 -21
  71. package/dist/mcp-server.js.map +1 -1
  72. package/dist/providers/base.d.ts +3 -2
  73. package/dist/providers/base.d.ts.map +1 -1
  74. package/dist/providers/base.js +3 -1
  75. package/dist/providers/base.js.map +1 -1
  76. package/dist/providers/chat-llm.d.ts +2 -2
  77. package/dist/providers/chat-llm.d.ts.map +1 -1
  78. package/dist/providers/chat-llm.js +4 -1
  79. package/dist/providers/chat-llm.js.map +1 -1
  80. package/dist/providers/openai.d.ts.map +1 -1
  81. package/dist/providers/openai.js +4 -1
  82. package/dist/providers/openai.js.map +1 -1
  83. package/dist/ranking/api-reranker.d.ts.map +1 -1
  84. package/dist/ranking/api-reranker.js +27 -8
  85. package/dist/ranking/api-reranker.js.map +1 -1
  86. package/dist/ranking/symbol-boost.d.ts.map +1 -1
  87. package/dist/ranking/symbol-boost.js +4 -11
  88. package/dist/ranking/symbol-boost.js.map +1 -1
  89. package/dist/search/bm25.d.ts +10 -0
  90. package/dist/search/bm25.d.ts.map +1 -1
  91. package/dist/search/bm25.js +16 -0
  92. package/dist/search/bm25.js.map +1 -1
  93. package/dist/storage/encrypted-chunks.d.ts +3 -0
  94. package/dist/storage/encrypted-chunks.d.ts.map +1 -1
  95. package/dist/storage/encrypted-chunks.js +108 -16
  96. package/dist/storage/encrypted-chunks.js.map +1 -1
  97. package/dist/synthesis/conversational-synthesizer.d.ts +2 -1
  98. package/dist/synthesis/conversational-synthesizer.d.ts.map +1 -1
  99. package/dist/synthesis/conversational-synthesizer.js +6 -1
  100. package/dist/synthesis/conversational-synthesizer.js.map +1 -1
  101. package/dist/synthesis/prompt-builder.d.ts.map +1 -1
  102. package/dist/synthesis/prompt-builder.js +40 -13
  103. package/dist/synthesis/prompt-builder.js.map +1 -1
  104. package/dist/synthesis/synthesizer.d.ts.map +1 -1
  105. package/dist/synthesis/synthesizer.js +14 -2
  106. package/dist/synthesis/synthesizer.js.map +1 -1
  107. package/dist/tests/api-reranker.test.d.ts +2 -0
  108. package/dist/tests/api-reranker.test.d.ts.map +1 -0
  109. package/dist/tests/api-reranker.test.js +575 -0
  110. package/dist/tests/api-reranker.test.js.map +1 -0
  111. package/dist/tests/bm25.test.d.ts +2 -0
  112. package/dist/tests/bm25.test.d.ts.map +1 -0
  113. package/dist/tests/bm25.test.js +340 -0
  114. package/dist/tests/bm25.test.js.map +1 -0
  115. package/dist/tests/chunking/file-grouper.test.d.ts +2 -0
  116. package/dist/tests/chunking/file-grouper.test.d.ts.map +1 -0
  117. package/dist/tests/chunking/file-grouper.test.js +495 -0
  118. package/dist/tests/chunking/file-grouper.test.js.map +1 -0
  119. package/dist/tests/chunking/semantic-chunker.test.d.ts +2 -0
  120. package/dist/tests/chunking/semantic-chunker.test.d.ts.map +1 -0
  121. package/dist/tests/chunking/semantic-chunker.test.js +509 -0
  122. package/dist/tests/chunking/semantic-chunker.test.js.map +1 -0
  123. package/dist/tests/chunking/token-counter.test.d.ts +2 -0
  124. package/dist/tests/chunking/token-counter.test.d.ts.map +1 -0
  125. package/dist/tests/chunking/token-counter.test.js +441 -0
  126. package/dist/tests/chunking/token-counter.test.js.map +1 -0
  127. package/dist/tests/cli/ask-cmd.test.d.ts +2 -0
  128. package/dist/tests/cli/ask-cmd.test.d.ts.map +1 -0
  129. package/dist/tests/cli/ask-cmd.test.js +152 -0
  130. package/dist/tests/cli/ask-cmd.test.js.map +1 -0
  131. package/dist/tests/cli/chat-cmd.test.d.ts +2 -0
  132. package/dist/tests/cli/chat-cmd.test.d.ts.map +1 -0
  133. package/dist/tests/cli/chat-cmd.test.js +118 -0
  134. package/dist/tests/cli/chat-cmd.test.js.map +1 -0
  135. package/dist/tests/cli/config-cmd.test.d.ts +2 -0
  136. package/dist/tests/cli/config-cmd.test.d.ts.map +1 -0
  137. package/dist/tests/cli/config-cmd.test.js +226 -0
  138. package/dist/tests/cli/config-cmd.test.js.map +1 -0
  139. package/dist/tests/cli/context.test.d.ts +2 -0
  140. package/dist/tests/cli/context.test.d.ts.map +1 -0
  141. package/dist/tests/cli/context.test.js +158 -0
  142. package/dist/tests/cli/context.test.js.map +1 -0
  143. package/dist/tests/cli/index-cmd.test.d.ts +2 -0
  144. package/dist/tests/cli/index-cmd.test.d.ts.map +1 -0
  145. package/dist/tests/cli/index-cmd.test.js +89 -0
  146. package/dist/tests/cli/index-cmd.test.js.map +1 -0
  147. package/dist/tests/cli/index.test.d.ts +2 -0
  148. package/dist/tests/cli/index.test.d.ts.map +1 -0
  149. package/dist/tests/cli/index.test.js +167 -0
  150. package/dist/tests/cli/index.test.js.map +1 -0
  151. package/dist/tests/cli/info-cmd.test.d.ts +2 -0
  152. package/dist/tests/cli/info-cmd.test.d.ts.map +1 -0
  153. package/dist/tests/cli/info-cmd.test.js +47 -0
  154. package/dist/tests/cli/info-cmd.test.js.map +1 -0
  155. package/dist/tests/cli/interactive-config.test.d.ts +2 -0
  156. package/dist/tests/cli/interactive-config.test.d.ts.map +1 -0
  157. package/dist/tests/cli/interactive-config.test.js +30 -0
  158. package/dist/tests/cli/interactive-config.test.js.map +1 -0
  159. package/dist/tests/cli/mcp-cmd.test.d.ts +2 -0
  160. package/dist/tests/cli/mcp-cmd.test.d.ts.map +1 -0
  161. package/dist/tests/cli/mcp-cmd.test.js +47 -0
  162. package/dist/tests/cli/mcp-cmd.test.js.map +1 -0
  163. package/dist/tests/cli/search-cmd.test.d.ts +2 -0
  164. package/dist/tests/cli/search-cmd.test.d.ts.map +1 -0
  165. package/dist/tests/cli/search-cmd.test.js +120 -0
  166. package/dist/tests/cli/search-cmd.test.js.map +1 -0
  167. package/dist/tests/cli/search-with-code-cmd.test.d.ts +2 -0
  168. package/dist/tests/cli/search-with-code-cmd.test.d.ts.map +1 -0
  169. package/dist/tests/cli/search-with-code-cmd.test.js +140 -0
  170. package/dist/tests/cli/search-with-code-cmd.test.js.map +1 -0
  171. package/dist/tests/cli/update-cmd.test.d.ts +2 -0
  172. package/dist/tests/cli/update-cmd.test.d.ts.map +1 -0
  173. package/dist/tests/cli/update-cmd.test.js +75 -0
  174. package/dist/tests/cli/update-cmd.test.js.map +1 -0
  175. package/dist/tests/cli/utils.test.d.ts +2 -0
  176. package/dist/tests/cli/utils.test.d.ts.map +1 -0
  177. package/dist/tests/cli/utils.test.js +119 -0
  178. package/dist/tests/cli/utils.test.js.map +1 -0
  179. package/dist/tests/cli/watch-cmd.test.d.ts +2 -0
  180. package/dist/tests/cli/watch-cmd.test.d.ts.map +1 -0
  181. package/dist/tests/cli/watch-cmd.test.js +84 -0
  182. package/dist/tests/cli/watch-cmd.test.js.map +1 -0
  183. package/dist/tests/cli-ui.test.d.ts +2 -0
  184. package/dist/tests/cli-ui.test.d.ts.map +1 -0
  185. package/dist/tests/cli-ui.test.js +608 -0
  186. package/dist/tests/cli-ui.test.js.map +1 -0
  187. package/dist/tests/codemap-io.test.d.ts +2 -0
  188. package/dist/tests/codemap-io.test.d.ts.map +1 -0
  189. package/dist/tests/codemap-io.test.js +992 -0
  190. package/dist/tests/codemap-io.test.js.map +1 -0
  191. package/dist/tests/config/apply-env.test.d.ts +2 -0
  192. package/dist/tests/config/apply-env.test.d.ts.map +1 -0
  193. package/dist/tests/config/apply-env.test.js +717 -0
  194. package/dist/tests/config/apply-env.test.js.map +1 -0
  195. package/dist/tests/config/constants.test.d.ts +2 -0
  196. package/dist/tests/config/constants.test.d.ts.map +1 -0
  197. package/dist/tests/config/constants.test.js +406 -0
  198. package/dist/tests/config/constants.test.js.map +1 -0
  199. package/dist/tests/config/loader.test.d.ts +2 -0
  200. package/dist/tests/config/loader.test.d.ts.map +1 -0
  201. package/dist/tests/config/loader.test.js +716 -0
  202. package/dist/tests/config/loader.test.js.map +1 -0
  203. package/dist/tests/config/resolver.test.d.ts +2 -0
  204. package/dist/tests/config/resolver.test.d.ts.map +1 -0
  205. package/dist/tests/config/resolver.test.js +402 -0
  206. package/dist/tests/config/resolver.test.js.map +1 -0
  207. package/dist/tests/config/types.test.d.ts +2 -0
  208. package/dist/tests/config/types.test.d.ts.map +1 -0
  209. package/dist/tests/config/types.test.js +460 -0
  210. package/dist/tests/config/types.test.js.map +1 -0
  211. package/dist/tests/context-packs.test.d.ts +2 -0
  212. package/dist/tests/context-packs.test.d.ts.map +1 -0
  213. package/dist/tests/context-packs.test.js +826 -0
  214. package/dist/tests/context-packs.test.js.map +1 -0
  215. package/dist/tests/conversational-synthesizer.test.d.ts +2 -0
  216. package/dist/tests/conversational-synthesizer.test.d.ts.map +1 -0
  217. package/dist/tests/conversational-synthesizer.test.js +595 -0
  218. package/dist/tests/conversational-synthesizer.test.js.map +1 -0
  219. package/dist/tests/database.test.d.ts +2 -0
  220. package/dist/tests/database.test.d.ts.map +1 -0
  221. package/dist/tests/database.test.js +965 -0
  222. package/dist/tests/database.test.js.map +1 -0
  223. package/dist/tests/encrypted-chunks.test.d.ts +2 -0
  224. package/dist/tests/encrypted-chunks.test.d.ts.map +1 -0
  225. package/dist/tests/encrypted-chunks.test.js +1470 -0
  226. package/dist/tests/encrypted-chunks.test.js.map +1 -0
  227. package/dist/tests/hybrid.test.d.ts +2 -0
  228. package/dist/tests/hybrid.test.d.ts.map +1 -0
  229. package/dist/tests/hybrid.test.js +456 -0
  230. package/dist/tests/hybrid.test.js.map +1 -0
  231. package/dist/tests/indexer/ChangeQueue.test.d.ts +12 -0
  232. package/dist/tests/indexer/ChangeQueue.test.d.ts.map +1 -0
  233. package/dist/tests/indexer/ChangeQueue.test.js +441 -0
  234. package/dist/tests/indexer/ChangeQueue.test.js.map +1 -0
  235. package/dist/tests/indexer/ProviderManager.test.d.ts +12 -0
  236. package/dist/tests/indexer/ProviderManager.test.d.ts.map +1 -0
  237. package/dist/tests/indexer/ProviderManager.test.js +290 -0
  238. package/dist/tests/indexer/ProviderManager.test.js.map +1 -0
  239. package/dist/tests/indexer/WatchService.test.d.ts +14 -0
  240. package/dist/tests/indexer/WatchService.test.d.ts.map +1 -0
  241. package/dist/tests/indexer/WatchService.test.js +667 -0
  242. package/dist/tests/indexer/WatchService.test.js.map +1 -0
  243. package/dist/tests/indexer/merkle.test.d.ts +11 -0
  244. package/dist/tests/indexer/merkle.test.d.ts.map +1 -0
  245. package/dist/tests/indexer/merkle.test.js +497 -0
  246. package/dist/tests/indexer/merkle.test.js.map +1 -0
  247. package/dist/tests/indexer/update.test.d.ts +10 -0
  248. package/dist/tests/indexer/update.test.d.ts.map +1 -0
  249. package/dist/tests/indexer/update.test.js +317 -0
  250. package/dist/tests/indexer/update.test.js.map +1 -0
  251. package/dist/tests/indexer/watch.test.d.ts +8 -0
  252. package/dist/tests/indexer/watch.test.d.ts.map +1 -0
  253. package/dist/tests/indexer/watch.test.js +95 -0
  254. package/dist/tests/indexer/watch.test.js.map +1 -0
  255. package/dist/tests/integration/index-search.integration.test.js +1 -0
  256. package/dist/tests/integration/index-search.integration.test.js.map +1 -1
  257. package/dist/tests/languages.test.d.ts +2 -0
  258. package/dist/tests/languages.test.d.ts.map +1 -0
  259. package/dist/tests/languages.test.js +575 -0
  260. package/dist/tests/languages.test.js.map +1 -0
  261. package/dist/tests/logger-redaction.test.d.ts +2 -0
  262. package/dist/tests/logger-redaction.test.d.ts.map +1 -0
  263. package/dist/tests/logger-redaction.test.js +48 -0
  264. package/dist/tests/logger-redaction.test.js.map +1 -0
  265. package/dist/tests/logger.test.d.ts +2 -0
  266. package/dist/tests/logger.test.d.ts.map +1 -0
  267. package/dist/tests/logger.test.js +468 -0
  268. package/dist/tests/logger.test.js.map +1 -0
  269. package/dist/tests/markdown-formatter.test.d.ts +2 -0
  270. package/dist/tests/markdown-formatter.test.d.ts.map +1 -0
  271. package/dist/tests/markdown-formatter.test.js +453 -0
  272. package/dist/tests/markdown-formatter.test.js.map +1 -0
  273. package/dist/tests/mcp/tools/use-context-pack.test.d.ts +7 -0
  274. package/dist/tests/mcp/tools/use-context-pack.test.d.ts.map +1 -0
  275. package/dist/tests/mcp/tools/use-context-pack.test.js +505 -0
  276. package/dist/tests/mcp/tools/use-context-pack.test.js.map +1 -0
  277. package/dist/tests/mutex.test.d.ts +2 -0
  278. package/dist/tests/mutex.test.d.ts.map +1 -0
  279. package/dist/tests/mutex.test.js +489 -0
  280. package/dist/tests/mutex.test.js.map +1 -0
  281. package/dist/tests/path-helpers.test.d.ts +2 -0
  282. package/dist/tests/path-helpers.test.d.ts.map +1 -0
  283. package/dist/tests/path-helpers.test.js +332 -0
  284. package/dist/tests/path-helpers.test.js.map +1 -0
  285. package/dist/tests/prompt-builder.test.d.ts +2 -0
  286. package/dist/tests/prompt-builder.test.d.ts.map +1 -0
  287. package/dist/tests/prompt-builder.test.js +417 -0
  288. package/dist/tests/prompt-builder.test.js.map +1 -0
  289. package/dist/tests/providers/base.test.d.ts +2 -0
  290. package/dist/tests/providers/base.test.d.ts.map +1 -0
  291. package/dist/tests/providers/base.test.js +299 -0
  292. package/dist/tests/providers/base.test.js.map +1 -0
  293. package/dist/tests/providers/chat-llm.test.d.ts +2 -0
  294. package/dist/tests/providers/chat-llm.test.d.ts.map +1 -0
  295. package/dist/tests/providers/chat-llm.test.js +435 -0
  296. package/dist/tests/providers/chat-llm.test.js.map +1 -0
  297. package/dist/tests/providers/index.test.d.ts +2 -0
  298. package/dist/tests/providers/index.test.d.ts.map +1 -0
  299. package/dist/tests/providers/index.test.js +204 -0
  300. package/dist/tests/providers/index.test.js.map +1 -0
  301. package/dist/tests/providers/mock.test.d.ts +2 -0
  302. package/dist/tests/providers/mock.test.d.ts.map +1 -0
  303. package/dist/tests/providers/mock.test.js +225 -0
  304. package/dist/tests/providers/mock.test.js.map +1 -0
  305. package/dist/tests/providers/openai.test.d.ts +2 -0
  306. package/dist/tests/providers/openai.test.d.ts.map +1 -0
  307. package/dist/tests/providers/openai.test.js +408 -0
  308. package/dist/tests/providers/openai.test.js.map +1 -0
  309. package/dist/tests/providers/token-counter.test.d.ts +2 -0
  310. package/dist/tests/providers/token-counter.test.d.ts.map +1 -0
  311. package/dist/tests/providers/token-counter.test.js +247 -0
  312. package/dist/tests/providers/token-counter.test.js.map +1 -0
  313. package/dist/tests/rate-limiter.test.js +392 -1
  314. package/dist/tests/rate-limiter.test.js.map +1 -1
  315. package/dist/tests/scope.test.d.ts +2 -0
  316. package/dist/tests/scope.test.d.ts.map +1 -0
  317. package/dist/tests/scope.test.js +529 -0
  318. package/dist/tests/scope.test.js.map +1 -0
  319. package/dist/tests/simple-lru.test.js +377 -0
  320. package/dist/tests/simple-lru.test.js.map +1 -1
  321. package/dist/tests/symbol-boost.test.js +730 -10
  322. package/dist/tests/symbol-boost.test.js.map +1 -1
  323. package/dist/tests/symbols-extract.test.d.ts +2 -0
  324. package/dist/tests/symbols-extract.test.d.ts.map +1 -0
  325. package/dist/tests/symbols-extract.test.js +536 -0
  326. package/dist/tests/symbols-extract.test.js.map +1 -0
  327. package/dist/tests/symbols-graph.test.d.ts +2 -0
  328. package/dist/tests/symbols-graph.test.d.ts.map +1 -0
  329. package/dist/tests/symbols-graph.test.js +656 -0
  330. package/dist/tests/symbols-graph.test.js.map +1 -0
  331. package/dist/tests/synthesizer.test.d.ts +2 -0
  332. package/dist/tests/synthesizer.test.d.ts.map +1 -0
  333. package/dist/tests/synthesizer.test.js +381 -0
  334. package/dist/tests/synthesizer.test.js.map +1 -0
  335. package/dist/types/context-pack.d.ts +3 -3
  336. package/dist/utils/logger.d.ts +5 -1
  337. package/dist/utils/logger.d.ts.map +1 -1
  338. package/dist/utils/logger.js +149 -4
  339. package/dist/utils/logger.js.map +1 -1
  340. package/dist/utils/mutex.d.ts +7 -2
  341. package/dist/utils/mutex.d.ts.map +1 -1
  342. package/dist/utils/mutex.js +31 -7
  343. package/dist/utils/mutex.js.map +1 -1
  344. package/dist/utils/path-helpers.d.ts.map +1 -1
  345. package/dist/utils/path-helpers.js +5 -2
  346. package/dist/utils/path-helpers.js.map +1 -1
  347. package/dist/utils/simple-lru.d.ts +6 -0
  348. package/dist/utils/simple-lru.d.ts.map +1 -1
  349. package/dist/utils/simple-lru.js +26 -0
  350. package/dist/utils/simple-lru.js.map +1 -1
  351. package/package.json +1 -1
@@ -0,0 +1,575 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { LANG_RULES, getSupportedLanguageExtensions } from '../languages/rules.js';
4
+ import { RESOLVED_LANGUAGES } from '../languages/tree-sitter-loader.js';
5
+ // ============================================================================
6
+ // Test: RESOLVED_LANGUAGES - Tree-sitter parser loading
7
+ // ============================================================================
8
+ test('RESOLVED_LANGUAGES contains all expected language parsers', () => {
9
+ const expectedLanguages = [
10
+ 'bash', 'c', 'csharp', 'cpp', 'css', 'elixir', 'go', 'haskell',
11
+ 'html', 'java', 'javascript', 'json', 'kotlin', 'lua', 'markdown',
12
+ 'ocaml', 'php', 'python', 'ruby', 'rust', 'scala', 'swift', 'tsx', 'typescript'
13
+ ];
14
+ for (const lang of expectedLanguages) {
15
+ assert.ok(lang in RESOLVED_LANGUAGES, `RESOLVED_LANGUAGES should contain '${lang}'`);
16
+ }
17
+ });
18
+ test('RESOLVED_LANGUAGES parsers are non-null objects', () => {
19
+ for (const [lang, parser] of Object.entries(RESOLVED_LANGUAGES)) {
20
+ assert.ok(parser !== null && parser !== undefined, `Parser for '${lang}' should not be null or undefined`);
21
+ assert.equal(typeof parser, 'object', `Parser for '${lang}' should be an object`);
22
+ }
23
+ });
24
+ test('RESOLVED_LANGUAGES count matches expected number of languages', () => {
25
+ const languageCount = Object.keys(RESOLVED_LANGUAGES).length;
26
+ assert.equal(languageCount, 24, `RESOLVED_LANGUAGES should contain 24 languages, got ${languageCount}`);
27
+ });
28
+ // ============================================================================
29
+ // Test: LANG_RULES - Language rules structure
30
+ // ============================================================================
31
+ test('LANG_RULES contains rules for all expected file extensions', () => {
32
+ const expectedExtensions = [
33
+ '.php', '.py', '.js', '.jsx', '.ts', '.tsx', '.go', '.java', '.cs',
34
+ '.rs', '.rb', '.cpp', '.hpp', '.cc', '.c', '.h', '.scala', '.swift',
35
+ '.sh', '.bash', '.kt', '.lua', '.html', '.htm', '.css', '.json',
36
+ '.ml', '.mli', '.hs', '.ex', '.exs', '.md', '.markdown'
37
+ ];
38
+ for (const ext of expectedExtensions) {
39
+ assert.ok(ext in LANG_RULES, `LANG_RULES should contain rule for extension '${ext}'`);
40
+ }
41
+ });
42
+ test('Each LANG_RULES entry has required properties', () => {
43
+ for (const [ext, rule] of Object.entries(LANG_RULES)) {
44
+ assert.ok(typeof rule.lang === 'string' && rule.lang.length > 0, `Rule for '${ext}' should have non-empty 'lang' string`);
45
+ assert.ok(Array.isArray(rule.nodeTypes), `Rule for '${ext}' should have 'nodeTypes' array`);
46
+ assert.ok(rule.nodeTypes.length > 0, `Rule for '${ext}' should have at least one nodeType`);
47
+ assert.ok('commentPattern' in rule, `Rule for '${ext}' should have 'commentPattern' property`);
48
+ assert.ok(rule.commentPattern === null || rule.commentPattern instanceof RegExp, `Rule for '${ext}' commentPattern should be null or RegExp`);
49
+ assert.ok('ts' in rule, `Rule for '${ext}' should have 'ts' property for tree-sitter parser`);
50
+ }
51
+ });
52
+ test('Each LANG_RULES entry has valid subdivisionTypes', () => {
53
+ for (const [ext, rule] of Object.entries(LANG_RULES)) {
54
+ if (rule.subdivisionTypes) {
55
+ assert.ok(typeof rule.subdivisionTypes === 'object', `Rule for '${ext}' subdivisionTypes should be an object`);
56
+ for (const [nodeType, subTypes] of Object.entries(rule.subdivisionTypes)) {
57
+ assert.ok(Array.isArray(subTypes), `subdivisionTypes['${nodeType}'] for '${ext}' should be an array`);
58
+ }
59
+ }
60
+ }
61
+ });
62
+ test('Each LANG_RULES entry has valid variableTypes', () => {
63
+ for (const [ext, rule] of Object.entries(LANG_RULES)) {
64
+ if (rule.variableTypes) {
65
+ assert.ok(Array.isArray(rule.variableTypes), `Rule for '${ext}' variableTypes should be an array`);
66
+ }
67
+ }
68
+ });
69
+ // ============================================================================
70
+ // Test: Language detection via file extension mapping
71
+ // ============================================================================
72
+ test('File extension maps to correct language name', () => {
73
+ const extensionToLang = {
74
+ '.php': 'php',
75
+ '.py': 'python',
76
+ '.js': 'javascript',
77
+ '.jsx': 'tsx',
78
+ '.ts': 'typescript',
79
+ '.tsx': 'tsx',
80
+ '.go': 'go',
81
+ '.java': 'java',
82
+ '.cs': 'csharp',
83
+ '.rs': 'rust',
84
+ '.rb': 'ruby',
85
+ '.cpp': 'cpp',
86
+ '.hpp': 'cpp',
87
+ '.cc': 'cpp',
88
+ '.c': 'c',
89
+ '.h': 'c',
90
+ '.scala': 'scala',
91
+ '.swift': 'swift',
92
+ '.sh': 'bash',
93
+ '.bash': 'bash',
94
+ '.kt': 'kotlin',
95
+ '.lua': 'lua',
96
+ '.html': 'html',
97
+ '.htm': 'html',
98
+ '.css': 'css',
99
+ '.json': 'json',
100
+ '.ml': 'ocaml',
101
+ '.mli': 'ocaml',
102
+ '.hs': 'haskell',
103
+ '.ex': 'elixir',
104
+ '.exs': 'elixir',
105
+ '.md': 'markdown',
106
+ '.markdown': 'markdown'
107
+ };
108
+ for (const [ext, expectedLang] of Object.entries(extensionToLang)) {
109
+ const rule = LANG_RULES[ext];
110
+ assert.ok(rule, `Rule for extension '${ext}' should exist`);
111
+ assert.equal(rule.lang, expectedLang, `Extension '${ext}' should map to language '${expectedLang}', got '${rule.lang}'`);
112
+ }
113
+ });
114
+ test('Aliases map to same tree-sitter parser', () => {
115
+ // C++ extensions should use same parser
116
+ assert.strictEqual(LANG_RULES['.cpp'].ts, LANG_RULES['.hpp'].ts, '.cpp and .hpp should use same parser');
117
+ assert.strictEqual(LANG_RULES['.cpp'].ts, LANG_RULES['.cc'].ts, '.cpp and .cc should use same parser');
118
+ // C extensions should use same parser
119
+ assert.strictEqual(LANG_RULES['.c'].ts, LANG_RULES['.h'].ts, '.c and .h should use same parser');
120
+ // Bash extensions should use same parser
121
+ assert.strictEqual(LANG_RULES['.sh'].ts, LANG_RULES['.bash'].ts, '.sh and .bash should use same parser');
122
+ // HTML extensions should use same parser
123
+ assert.strictEqual(LANG_RULES['.html'].ts, LANG_RULES['.htm'].ts, '.html and .htm should use same parser');
124
+ // Markdown extensions should use same parser
125
+ assert.strictEqual(LANG_RULES['.md'].ts, LANG_RULES['.markdown'].ts, '.md and .markdown should use same parser');
126
+ // Elixir extensions should use same parser
127
+ assert.strictEqual(LANG_RULES['.ex'].ts, LANG_RULES['.exs'].ts, '.ex and .exs should use same parser');
128
+ // OCaml extensions should use same parser
129
+ assert.strictEqual(LANG_RULES['.ml'].ts, LANG_RULES['.mli'].ts, '.ml and .mli should use same parser');
130
+ });
131
+ // ============================================================================
132
+ // Test: Parsing rule correctness for specific languages
133
+ // ============================================================================
134
+ test('JavaScript rule has correct node types for functions and classes', () => {
135
+ const jsRule = LANG_RULES['.js'];
136
+ assert.ok(jsRule.nodeTypes.includes('function_declaration'));
137
+ assert.ok(jsRule.nodeTypes.includes('method_definition'));
138
+ assert.ok(jsRule.nodeTypes.includes('class_declaration'));
139
+ assert.ok(jsRule.nodeTypes.includes('export_statement'));
140
+ });
141
+ test('TypeScript rule has correct node types', () => {
142
+ const tsRule = LANG_RULES['.ts'];
143
+ assert.ok(tsRule.nodeTypes.includes('function_declaration'));
144
+ assert.ok(tsRule.nodeTypes.includes('method_definition'));
145
+ assert.ok(tsRule.nodeTypes.includes('class_declaration'));
146
+ assert.ok(tsRule.nodeTypes.includes('export_statement'));
147
+ assert.ok(tsRule.nodeTypes.includes('lexical_declaration'));
148
+ });
149
+ test('Python rule has correct node types', () => {
150
+ const pyRule = LANG_RULES['.py'];
151
+ assert.ok(pyRule.nodeTypes.includes('function_definition'));
152
+ assert.ok(pyRule.nodeTypes.includes('class_definition'));
153
+ });
154
+ test('Go rule has correct node types', () => {
155
+ const goRule = LANG_RULES['.go'];
156
+ assert.ok(goRule.nodeTypes.includes('function_declaration'));
157
+ assert.ok(goRule.nodeTypes.includes('method_declaration'));
158
+ assert.ok(goRule.nodeTypes.includes('type_declaration'));
159
+ });
160
+ test('Rust rule has correct node types for items', () => {
161
+ const rsRule = LANG_RULES['.rs'];
162
+ assert.ok(rsRule.nodeTypes.includes('function_item'));
163
+ assert.ok(rsRule.nodeTypes.includes('impl_item'));
164
+ assert.ok(rsRule.nodeTypes.includes('struct_item'));
165
+ assert.ok(rsRule.nodeTypes.includes('enum_item'));
166
+ assert.ok(rsRule.nodeTypes.includes('trait_item'));
167
+ assert.ok(rsRule.nodeTypes.includes('mod_item'));
168
+ });
169
+ test('Java rule has correct node types', () => {
170
+ const javaRule = LANG_RULES['.java'];
171
+ assert.ok(javaRule.nodeTypes.includes('method_declaration'));
172
+ assert.ok(javaRule.nodeTypes.includes('class_declaration'));
173
+ assert.ok(javaRule.nodeTypes.includes('interface_declaration'));
174
+ });
175
+ test('C# rule has correct node types', () => {
176
+ const csRule = LANG_RULES['.cs'];
177
+ assert.ok(csRule.nodeTypes.includes('method_declaration'));
178
+ assert.ok(csRule.nodeTypes.includes('class_declaration'));
179
+ assert.ok(csRule.nodeTypes.includes('struct_declaration'));
180
+ assert.ok(csRule.nodeTypes.includes('interface_declaration'));
181
+ });
182
+ test('Ruby rule has correct node types', () => {
183
+ const rbRule = LANG_RULES['.rb'];
184
+ assert.ok(rbRule.nodeTypes.includes('method'));
185
+ assert.ok(rbRule.nodeTypes.includes('class'));
186
+ assert.ok(rbRule.nodeTypes.includes('module'));
187
+ assert.ok(rbRule.nodeTypes.includes('singleton_method'));
188
+ });
189
+ // ============================================================================
190
+ // Test: Comment patterns for different languages
191
+ // ============================================================================
192
+ test('JSDoc-style comment patterns match correctly', () => {
193
+ const jsdocPattern = LANG_RULES['.js'].commentPattern;
194
+ assert.ok(jsdocPattern !== null);
195
+ const jsdocComment = '/** This is a JSDoc comment */';
196
+ const matches = jsdocComment.match(jsdocPattern);
197
+ assert.ok(matches !== null, 'Should match JSDoc comments');
198
+ assert.equal(matches[0], jsdocComment);
199
+ });
200
+ test('Python docstring pattern matches correctly', () => {
201
+ const pyPattern = LANG_RULES['.py'].commentPattern;
202
+ assert.ok(pyPattern !== null);
203
+ const tripleDoubleQuote = '"""This is a docstring"""';
204
+ const tripleSingleQuote = "'''This is also a docstring'''";
205
+ assert.ok(tripleDoubleQuote.match(pyPattern) !== null);
206
+ assert.ok(tripleSingleQuote.match(pyPattern) !== null);
207
+ });
208
+ test('Ruby comment pattern matches correctly', () => {
209
+ const rbPattern = LANG_RULES['.rb'].commentPattern;
210
+ assert.ok(rbPattern !== null);
211
+ const rubyComment = '# This is a Ruby comment';
212
+ const matches = rubyComment.match(rbPattern);
213
+ assert.ok(matches !== null, 'Should match Ruby line comments');
214
+ });
215
+ test('Haskell comment pattern matches correctly', () => {
216
+ const hsPattern = LANG_RULES['.hs'].commentPattern;
217
+ assert.ok(hsPattern !== null);
218
+ const haskellComment = '-- This is a Haskell comment';
219
+ const matches = haskellComment.match(hsPattern);
220
+ assert.ok(matches !== null, 'Should match Haskell line comments');
221
+ });
222
+ test('Lua comment pattern matches correctly', () => {
223
+ const luaPattern = LANG_RULES['.lua'].commentPattern;
224
+ assert.ok(luaPattern !== null);
225
+ const luaComment = '-- This is a Lua comment';
226
+ const matches = luaComment.match(luaPattern);
227
+ assert.ok(matches !== null, 'Should match Lua line comments');
228
+ });
229
+ test('OCaml comment pattern matches correctly', () => {
230
+ const mlPattern = LANG_RULES['.ml'].commentPattern;
231
+ assert.ok(mlPattern !== null);
232
+ const ocamlComment = '(* This is an OCaml comment *)';
233
+ const matches = ocamlComment.match(mlPattern);
234
+ assert.ok(matches !== null, 'Should match OCaml block comments');
235
+ });
236
+ test('HTML comment pattern matches correctly', () => {
237
+ const htmlPattern = LANG_RULES['.html'].commentPattern;
238
+ assert.ok(htmlPattern !== null);
239
+ const htmlComment = '<!-- This is an HTML comment -->';
240
+ const matches = htmlComment.match(htmlPattern);
241
+ assert.ok(matches !== null, 'Should match HTML comments');
242
+ });
243
+ test('JSON has null comment pattern (no comments)', () => {
244
+ const jsonRule = LANG_RULES['.json'];
245
+ assert.strictEqual(jsonRule.commentPattern, null, 'JSON should have null comment pattern');
246
+ });
247
+ // ============================================================================
248
+ // Test: Subdivision types for semantic chunking
249
+ // ============================================================================
250
+ test('JavaScript class subdivides into methods and fields', () => {
251
+ const jsRule = LANG_RULES['.js'];
252
+ assert.ok(jsRule.subdivisionTypes);
253
+ const classSubdivisions = jsRule.subdivisionTypes['class_declaration'];
254
+ assert.ok(Array.isArray(classSubdivisions));
255
+ assert.ok(classSubdivisions.includes('method_definition'));
256
+ assert.ok(classSubdivisions.includes('field_definition'));
257
+ });
258
+ test('Python class subdivides into functions', () => {
259
+ const pyRule = LANG_RULES['.py'];
260
+ assert.ok(pyRule.subdivisionTypes);
261
+ const classSubdivisions = pyRule.subdivisionTypes['class_definition'];
262
+ assert.ok(Array.isArray(classSubdivisions));
263
+ assert.ok(classSubdivisions.includes('function_definition'));
264
+ });
265
+ test('Go type declaration subdivides into methods', () => {
266
+ const goRule = LANG_RULES['.go'];
267
+ assert.ok(goRule.subdivisionTypes);
268
+ const typeSubdivisions = goRule.subdivisionTypes['type_declaration'];
269
+ assert.ok(Array.isArray(typeSubdivisions));
270
+ assert.ok(typeSubdivisions.includes('method_declaration'));
271
+ });
272
+ test('Rust impl item subdivides into functions', () => {
273
+ const rsRule = LANG_RULES['.rs'];
274
+ assert.ok(rsRule.subdivisionTypes);
275
+ const implSubdivisions = rsRule.subdivisionTypes['impl_item'];
276
+ assert.ok(Array.isArray(implSubdivisions));
277
+ assert.ok(implSubdivisions.includes('function_item'));
278
+ });
279
+ test('Java class subdivides into methods, constructors, and fields', () => {
280
+ const javaRule = LANG_RULES['.java'];
281
+ assert.ok(javaRule.subdivisionTypes);
282
+ const classSubdivisions = javaRule.subdivisionTypes['class_declaration'];
283
+ assert.ok(Array.isArray(classSubdivisions));
284
+ assert.ok(classSubdivisions.includes('method_declaration'));
285
+ assert.ok(classSubdivisions.includes('constructor_declaration'));
286
+ assert.ok(classSubdivisions.includes('field_declaration'));
287
+ });
288
+ test('C# class subdivides into methods, properties, and fields', () => {
289
+ const csRule = LANG_RULES['.cs'];
290
+ assert.ok(csRule.subdivisionTypes);
291
+ const classSubdivisions = csRule.subdivisionTypes['class_declaration'];
292
+ assert.ok(Array.isArray(classSubdivisions));
293
+ assert.ok(classSubdivisions.includes('method_declaration'));
294
+ assert.ok(classSubdivisions.includes('property_declaration'));
295
+ assert.ok(classSubdivisions.includes('field_declaration'));
296
+ });
297
+ test('Ruby class subdivides into methods', () => {
298
+ const rbRule = LANG_RULES['.rb'];
299
+ assert.ok(rbRule.subdivisionTypes);
300
+ const classSubdivisions = rbRule.subdivisionTypes['class'];
301
+ assert.ok(Array.isArray(classSubdivisions));
302
+ assert.ok(classSubdivisions.includes('method'));
303
+ assert.ok(classSubdivisions.includes('singleton_method'));
304
+ });
305
+ test('Markdown section subdivides into headings, paragraphs, and code blocks', () => {
306
+ const mdRule = LANG_RULES['.md'];
307
+ assert.ok(mdRule.subdivisionTypes);
308
+ const sectionSubdivisions = mdRule.subdivisionTypes['section'];
309
+ assert.ok(Array.isArray(sectionSubdivisions));
310
+ assert.ok(sectionSubdivisions.includes('atx_heading'));
311
+ assert.ok(sectionSubdivisions.includes('paragraph'));
312
+ assert.ok(sectionSubdivisions.includes('fenced_code_block'));
313
+ });
314
+ // ============================================================================
315
+ // Test: Variable types for each language
316
+ // ============================================================================
317
+ test('JavaScript variable types are correct', () => {
318
+ const jsRule = LANG_RULES['.js'];
319
+ assert.ok(Array.isArray(jsRule.variableTypes));
320
+ assert.ok(jsRule.variableTypes?.includes('const_declaration'));
321
+ assert.ok(jsRule.variableTypes?.includes('let_declaration'));
322
+ assert.ok(jsRule.variableTypes?.includes('variable_declaration'));
323
+ });
324
+ test('Python variable types are correct', () => {
325
+ const pyRule = LANG_RULES['.py'];
326
+ assert.ok(Array.isArray(pyRule.variableTypes));
327
+ assert.ok(pyRule.variableTypes?.includes('assignment'));
328
+ assert.ok(pyRule.variableTypes?.includes('expression_statement'));
329
+ });
330
+ test('Rust variable types are correct', () => {
331
+ const rsRule = LANG_RULES['.rs'];
332
+ assert.ok(Array.isArray(rsRule.variableTypes));
333
+ assert.ok(rsRule.variableTypes?.includes('let_declaration'));
334
+ assert.ok(rsRule.variableTypes?.includes('const_item'));
335
+ assert.ok(rsRule.variableTypes?.includes('static_item'));
336
+ });
337
+ test('Go variable types are correct', () => {
338
+ const goRule = LANG_RULES['.go'];
339
+ assert.ok(Array.isArray(goRule.variableTypes));
340
+ assert.ok(goRule.variableTypes?.includes('const_declaration'));
341
+ assert.ok(goRule.variableTypes?.includes('var_declaration'));
342
+ assert.ok(goRule.variableTypes?.includes('short_var_declaration'));
343
+ });
344
+ test('HTML and CSS have empty variable types', () => {
345
+ const htmlRule = LANG_RULES['.html'];
346
+ const cssRule = LANG_RULES['.css'];
347
+ assert.ok(Array.isArray(htmlRule.variableTypes));
348
+ assert.equal(htmlRule.variableTypes?.length, 0);
349
+ assert.ok(Array.isArray(cssRule.variableTypes));
350
+ assert.equal(cssRule.variableTypes?.length, 0);
351
+ });
352
+ // ============================================================================
353
+ // Test: getSupportedLanguageExtensions function
354
+ // ============================================================================
355
+ test('getSupportedLanguageExtensions returns all extension keys', () => {
356
+ const extensions = getSupportedLanguageExtensions();
357
+ const ruleKeys = Object.keys(LANG_RULES);
358
+ assert.deepEqual(extensions.sort(), ruleKeys.sort(), 'getSupportedLanguageExtensions should return all LANG_RULES keys');
359
+ });
360
+ test('getSupportedLanguageExtensions returns array of strings', () => {
361
+ const extensions = getSupportedLanguageExtensions();
362
+ assert.ok(Array.isArray(extensions));
363
+ for (const ext of extensions) {
364
+ assert.equal(typeof ext, 'string');
365
+ assert.ok(ext.startsWith('.'), `Extension '${ext}' should start with '.'`);
366
+ }
367
+ });
368
+ test('getSupportedLanguageExtensions includes common file extensions', () => {
369
+ const extensions = getSupportedLanguageExtensions();
370
+ const commonExtensions = ['.js', '.ts', '.py', '.go', '.java', '.rs', '.rb', '.cpp', '.c'];
371
+ for (const ext of commonExtensions) {
372
+ assert.ok(extensions.includes(ext), `Should include common extension '${ext}'`);
373
+ }
374
+ });
375
+ // ============================================================================
376
+ // Test: Fallback behavior for unsupported languages
377
+ // ============================================================================
378
+ test('Unsupported file extensions return undefined from LANG_RULES', () => {
379
+ const unsupportedExtensions = ['.xyz', '.unknown', '.foo', '.bar', '.abc'];
380
+ for (const ext of unsupportedExtensions) {
381
+ assert.strictEqual(LANG_RULES[ext], undefined, `LANG_RULES['${ext}'] should be undefined for unsupported extension`);
382
+ }
383
+ });
384
+ test('LANG_RULES can be safely accessed with bracket notation', () => {
385
+ // This tests that accessing non-existent keys does not throw
386
+ const result = LANG_RULES['.nonexistent'];
387
+ assert.strictEqual(result, undefined);
388
+ // Safe pattern for checking language support
389
+ const ext = '.ts';
390
+ if (ext in LANG_RULES) {
391
+ const rule = LANG_RULES[ext];
392
+ assert.ok(rule.lang === 'typescript');
393
+ }
394
+ });
395
+ // ============================================================================
396
+ // Test: Tree-sitter parser references are consistent
397
+ // ============================================================================
398
+ test('LANG_RULES.ts references RESOLVED_LANGUAGES correctly', () => {
399
+ // Verify that each rule references its corresponding resolved language
400
+ const mappings = {
401
+ '.php': 'php',
402
+ '.py': 'python',
403
+ '.js': 'javascript',
404
+ '.jsx': 'tsx',
405
+ '.ts': 'typescript',
406
+ '.tsx': 'tsx',
407
+ '.go': 'go',
408
+ '.java': 'java',
409
+ '.cs': 'csharp',
410
+ '.rs': 'rust',
411
+ '.rb': 'ruby',
412
+ '.cpp': 'cpp',
413
+ '.c': 'c',
414
+ '.scala': 'scala',
415
+ '.swift': 'swift',
416
+ '.sh': 'bash',
417
+ '.kt': 'kotlin',
418
+ '.lua': 'lua',
419
+ '.html': 'html',
420
+ '.css': 'css',
421
+ '.json': 'json',
422
+ '.ml': 'ocaml',
423
+ '.hs': 'haskell',
424
+ '.ex': 'elixir',
425
+ '.md': 'markdown'
426
+ };
427
+ for (const [ext, langKey] of Object.entries(mappings)) {
428
+ const rule = LANG_RULES[ext];
429
+ assert.ok(rule, `Rule for '${ext}' should exist`);
430
+ assert.strictEqual(rule.ts, RESOLVED_LANGUAGES[langKey], `Rule for '${ext}' should reference RESOLVED_LANGUAGES.${langKey}`);
431
+ }
432
+ });
433
+ // ============================================================================
434
+ // Test: LanguageRule interface compliance
435
+ // ============================================================================
436
+ test('All LANG_RULES entries comply with LanguageRule interface', () => {
437
+ for (const [ext, rule] of Object.entries(LANG_RULES)) {
438
+ // Required properties
439
+ assert.ok(typeof rule.lang === 'string', `${ext}: 'lang' must be a string`);
440
+ assert.ok(Array.isArray(rule.nodeTypes), `${ext}: 'nodeTypes' must be an array`);
441
+ assert.ok(rule.commentPattern === null || rule.commentPattern instanceof RegExp, `${ext}: 'commentPattern' must be null or RegExp`);
442
+ assert.ok('ts' in rule, `${ext}: 'ts' property must exist`);
443
+ // Optional properties when present
444
+ if ('subdivisionTypes' in rule && rule.subdivisionTypes !== undefined) {
445
+ assert.ok(typeof rule.subdivisionTypes === 'object', `${ext}: 'subdivisionTypes' must be an object when present`);
446
+ }
447
+ if ('variableTypes' in rule && rule.variableTypes !== undefined) {
448
+ assert.ok(Array.isArray(rule.variableTypes), `${ext}: 'variableTypes' must be an array when present`);
449
+ }
450
+ }
451
+ });
452
+ // ============================================================================
453
+ // Test: Edge cases and boundary conditions
454
+ // ============================================================================
455
+ test('Extension with dot prefix lookup matches correctly', () => {
456
+ // Verify that the extension format is consistent (always with leading dot)
457
+ const validExtension = '.ts';
458
+ const invalidFormat = 'ts'; // without dot
459
+ assert.ok(LANG_RULES[validExtension] !== undefined);
460
+ assert.strictEqual(LANG_RULES[invalidFormat], undefined);
461
+ });
462
+ test('Empty string extension returns undefined', () => {
463
+ assert.strictEqual(LANG_RULES[''], undefined);
464
+ });
465
+ test('Single dot extension returns undefined', () => {
466
+ assert.strictEqual(LANG_RULES['.'], undefined);
467
+ });
468
+ test('Case sensitivity of extensions', () => {
469
+ // Extensions should be lowercase
470
+ assert.ok(LANG_RULES['.ts'] !== undefined);
471
+ assert.strictEqual(LANG_RULES['.TS'], undefined);
472
+ assert.strictEqual(LANG_RULES['.Ts'], undefined);
473
+ });
474
+ // ============================================================================
475
+ // Test: Multiline comment patterns
476
+ // ============================================================================
477
+ test('C-style multiline comment pattern matches correctly', () => {
478
+ const cPattern = LANG_RULES['.c'].commentPattern;
479
+ assert.ok(cPattern !== null);
480
+ const multilineComment = '/* This is a\nmultiline\ncomment */';
481
+ const matches = multilineComment.match(cPattern);
482
+ assert.ok(matches !== null, 'Should match C multiline comments');
483
+ });
484
+ test('Python multiline docstring pattern matches correctly', () => {
485
+ const pyPattern = LANG_RULES['.py'].commentPattern;
486
+ assert.ok(pyPattern !== null);
487
+ const multilineDocstring = '"""This is a\nmultiline\ndocstring"""';
488
+ const matches = multilineDocstring.match(pyPattern);
489
+ assert.ok(matches !== null, 'Should match Python multiline docstrings');
490
+ });
491
+ test('HTML multiline comment pattern matches correctly', () => {
492
+ const htmlPattern = LANG_RULES['.html'].commentPattern;
493
+ assert.ok(htmlPattern !== null);
494
+ const multilineComment = '<!-- This is a\nmultiline\ncomment -->';
495
+ const matches = multilineComment.match(htmlPattern);
496
+ assert.ok(matches !== null, 'Should match HTML multiline comments');
497
+ });
498
+ // ============================================================================
499
+ // Test: Rust documentation comment pattern
500
+ // ============================================================================
501
+ test('Rust documentation comment patterns match correctly', () => {
502
+ const rsPattern = LANG_RULES['.rs'].commentPattern;
503
+ assert.ok(rsPattern !== null);
504
+ // Rust doc comments (///)
505
+ const docComment = '/// This is documentation';
506
+ const matches = docComment.match(rsPattern);
507
+ assert.ok(matches !== null, 'Should match Rust doc comments');
508
+ // Block doc comments (/**)
509
+ const blockDocComment = '/** This is block documentation */';
510
+ const blockMatches = blockDocComment.match(rsPattern);
511
+ assert.ok(blockMatches !== null, 'Should match Rust block doc comments');
512
+ });
513
+ // ============================================================================
514
+ // Test: Go comment pattern (both styles)
515
+ // ============================================================================
516
+ test('Go comment patterns match both line and block styles', () => {
517
+ const goPattern = LANG_RULES['.go'].commentPattern;
518
+ assert.ok(goPattern !== null);
519
+ const lineComment = '// This is a line comment';
520
+ const blockComment = '/* This is a block comment */';
521
+ const lineMatches = lineComment.match(goPattern);
522
+ const blockMatches = blockComment.match(goPattern);
523
+ assert.ok(lineMatches !== null, 'Should match Go line comments');
524
+ assert.ok(blockMatches !== null, 'Should match Go block comments');
525
+ });
526
+ // ============================================================================
527
+ // Test: Language count verification
528
+ // ============================================================================
529
+ test('LANG_RULES contains 33 file extensions', () => {
530
+ const extensionCount = Object.keys(LANG_RULES).length;
531
+ assert.equal(extensionCount, 33, `LANG_RULES should contain 33 file extensions, got ${extensionCount}`);
532
+ });
533
+ test('Languages are distributed correctly across extensions', () => {
534
+ // Count how many extensions map to each language
535
+ const langCounts = {};
536
+ for (const rule of Object.values(LANG_RULES)) {
537
+ langCounts[rule.lang] = (langCounts[rule.lang] || 0) + 1;
538
+ }
539
+ // C++ has 3 extensions (.cpp, .hpp, .cc)
540
+ assert.equal(langCounts['cpp'], 3, 'cpp should have 3 extensions');
541
+ // C has 2 extensions (.c, .h)
542
+ assert.equal(langCounts['c'], 2, 'c should have 2 extensions');
543
+ // Bash has 2 extensions (.sh, .bash)
544
+ assert.equal(langCounts['bash'], 2, 'bash should have 2 extensions');
545
+ // HTML has 2 extensions (.html, .htm)
546
+ assert.equal(langCounts['html'], 2, 'html should have 2 extensions');
547
+ // Markdown has 2 extensions (.md, .markdown)
548
+ assert.equal(langCounts['markdown'], 2, 'markdown should have 2 extensions');
549
+ // TSX has 2 extensions (.tsx, .jsx)
550
+ assert.equal(langCounts['tsx'], 2, 'tsx should have 2 extensions');
551
+ // Elixir has 2 extensions (.ex, .exs)
552
+ assert.equal(langCounts['elixir'], 2, 'elixir should have 2 extensions');
553
+ // OCaml has 2 extensions (.ml, .mli)
554
+ assert.equal(langCounts['ocaml'], 2, 'ocaml should have 2 extensions');
555
+ });
556
+ // ============================================================================
557
+ // Test: JSX uses TSX parser (intentional design choice)
558
+ // ============================================================================
559
+ test('JSX intentionally uses TSX parser for TypeScript compatibility', () => {
560
+ const jsxRule = LANG_RULES['.jsx'];
561
+ const tsxRule = LANG_RULES['.tsx'];
562
+ assert.strictEqual(jsxRule.ts, tsxRule.ts, 'JSX and TSX should use the same parser');
563
+ assert.equal(jsxRule.lang, 'tsx');
564
+ });
565
+ // ============================================================================
566
+ // Test: Empty subdivisionTypes arrays (valid case)
567
+ // ============================================================================
568
+ test('Markdown fenced_code_block has empty subdivisions array', () => {
569
+ const mdRule = LANG_RULES['.md'];
570
+ assert.ok(mdRule.subdivisionTypes);
571
+ const codeBlockSubdivisions = mdRule.subdivisionTypes['fenced_code_block'];
572
+ assert.ok(Array.isArray(codeBlockSubdivisions));
573
+ assert.equal(codeBlockSubdivisions.length, 0);
574
+ });
575
+ //# sourceMappingURL=languages.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"languages.test.js","sourceRoot":"","sources":["../../src/tests/languages.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logger-redaction.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-redaction.test.d.ts","sourceRoot":"","sources":["../../src/tests/logger-redaction.test.ts"],"names":[],"mappings":""}