vectra 0.12.2 → 0.14.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 (392) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +92 -100
  3. package/bin/vectra.js +3 -0
  4. package/lib/BrowserWebFetcher.d.ts +75 -0
  5. package/lib/BrowserWebFetcher.d.ts.map +1 -0
  6. package/lib/BrowserWebFetcher.js +290 -0
  7. package/lib/BrowserWebFetcher.js.map +1 -0
  8. package/lib/FileFetcher.d.ts +5 -0
  9. package/lib/FileFetcher.d.ts.map +1 -0
  10. package/lib/FileFetcher.js +89 -0
  11. package/lib/FileFetcher.js.map +1 -0
  12. package/lib/FileFetcher.spec.d.ts +2 -0
  13. package/lib/FileFetcher.spec.d.ts.map +1 -0
  14. package/lib/FileFetcher.spec.js +244 -0
  15. package/lib/FileFetcher.spec.js.map +1 -0
  16. package/lib/FolderWatcher.d.ts +91 -0
  17. package/lib/FolderWatcher.d.ts.map +1 -0
  18. package/lib/FolderWatcher.js +304 -0
  19. package/lib/FolderWatcher.js.map +1 -0
  20. package/lib/FolderWatcher.spec.d.ts +2 -0
  21. package/lib/FolderWatcher.spec.d.ts.map +1 -0
  22. package/lib/FolderWatcher.spec.js +308 -0
  23. package/lib/FolderWatcher.spec.js.map +1 -0
  24. package/lib/GPT3Tokenizer.d.ts +9 -0
  25. package/lib/GPT3Tokenizer.spec.d.ts +2 -0
  26. package/lib/GPT3Tokenizer.spec.d.ts.map +1 -0
  27. package/lib/GPT3Tokenizer.spec.js +45 -0
  28. package/lib/GPT3Tokenizer.spec.js.map +1 -0
  29. package/lib/ItemSelector.d.ts +41 -0
  30. package/lib/ItemSelector.d.ts.map +1 -0
  31. package/lib/ItemSelector.js +179 -0
  32. package/lib/ItemSelector.js.map +1 -0
  33. package/lib/ItemSelector.spec.d.ts +2 -0
  34. package/lib/ItemSelector.spec.d.ts.map +1 -0
  35. package/lib/ItemSelector.spec.js +204 -0
  36. package/lib/ItemSelector.spec.js.map +1 -0
  37. package/lib/LocalDocument.d.ts +54 -0
  38. package/lib/LocalDocument.d.ts.map +1 -1
  39. package/lib/LocalDocument.js +116 -0
  40. package/lib/LocalDocument.js.map +1 -0
  41. package/lib/LocalDocument.spec.d.ts +2 -0
  42. package/lib/LocalDocument.spec.d.ts.map +1 -0
  43. package/lib/LocalDocument.spec.js +214 -0
  44. package/lib/LocalDocument.spec.js.map +1 -0
  45. package/lib/LocalDocumentIndex.d.ts +152 -0
  46. package/lib/LocalDocumentIndex.d.ts.map +1 -1
  47. package/lib/LocalDocumentIndex.js +420 -0
  48. package/lib/LocalDocumentIndex.js.map +1 -0
  49. package/lib/LocalDocumentIndex.spec.d.ts +2 -0
  50. package/lib/LocalDocumentIndex.spec.d.ts.map +1 -0
  51. package/lib/LocalDocumentIndex.spec.js +494 -0
  52. package/lib/LocalDocumentIndex.spec.js.map +1 -0
  53. package/lib/LocalDocumentResult.d.ts +66 -0
  54. package/lib/LocalDocumentResult.d.ts.map +1 -1
  55. package/lib/LocalDocumentResult.js +376 -0
  56. package/lib/LocalDocumentResult.js.map +1 -0
  57. package/lib/LocalDocumentResult.spec.d.ts +2 -0
  58. package/lib/LocalDocumentResult.spec.d.ts.map +1 -0
  59. package/lib/LocalDocumentResult.spec.js +373 -0
  60. package/lib/LocalDocumentResult.spec.js.map +1 -0
  61. package/lib/LocalEmbeddings.d.ts +59 -0
  62. package/lib/LocalEmbeddings.d.ts.map +1 -0
  63. package/lib/LocalEmbeddings.js +101 -0
  64. package/lib/LocalEmbeddings.js.map +1 -0
  65. package/lib/LocalEmbeddings.spec.d.ts +2 -0
  66. package/lib/LocalEmbeddings.spec.d.ts.map +1 -0
  67. package/lib/LocalEmbeddings.spec.js +155 -0
  68. package/lib/LocalEmbeddings.spec.js.map +1 -0
  69. package/lib/LocalIndex.d.ts +159 -0
  70. package/lib/LocalIndex.d.ts.map +1 -1
  71. package/lib/LocalIndex.js +519 -0
  72. package/lib/LocalIndex.js.map +1 -0
  73. package/lib/LocalIndex.spec.d.ts +2 -0
  74. package/lib/LocalIndex.spec.js +611 -9
  75. package/lib/LocalIndex.spec.js.map +1 -1
  76. package/lib/OpenAIEmbeddings.d.ts +124 -0
  77. package/lib/OpenAIEmbeddings.d.ts.map +1 -0
  78. package/lib/OpenAIEmbeddings.js +166 -0
  79. package/lib/OpenAIEmbeddings.js.map +1 -0
  80. package/lib/OpenAIEmbeddings.spec.d.ts +2 -0
  81. package/lib/OpenAIEmbeddings.spec.d.ts.map +1 -0
  82. package/lib/OpenAIEmbeddings.spec.js +298 -0
  83. package/lib/OpenAIEmbeddings.spec.js.map +1 -0
  84. package/lib/TextSplitter.d.ts +21 -0
  85. package/lib/TextSplitter.d.ts.map +1 -1
  86. package/lib/TextSplitter.js +500 -0
  87. package/lib/TextSplitter.js.map +1 -0
  88. package/lib/TextSplitter.spec.d.ts +2 -0
  89. package/lib/TextSplitter.spec.d.ts.map +1 -0
  90. package/lib/TextSplitter.spec.js +337 -0
  91. package/lib/TextSplitter.spec.js.map +1 -0
  92. package/lib/TransformersEmbeddings.d.ts +121 -0
  93. package/lib/TransformersEmbeddings.d.ts.map +1 -0
  94. package/lib/TransformersEmbeddings.js +176 -0
  95. package/lib/TransformersEmbeddings.js.map +1 -0
  96. package/lib/TransformersEmbeddings.spec.d.ts +2 -0
  97. package/lib/TransformersEmbeddings.spec.d.ts.map +1 -0
  98. package/lib/TransformersEmbeddings.spec.js +198 -0
  99. package/lib/TransformersEmbeddings.spec.js.map +1 -0
  100. package/lib/TransformersTokenizer.d.ts +33 -0
  101. package/lib/TransformersTokenizer.d.ts.map +1 -0
  102. package/lib/TransformersTokenizer.js +44 -0
  103. package/lib/TransformersTokenizer.js.map +1 -0
  104. package/lib/TransformersTokenizer.spec.d.ts +2 -0
  105. package/lib/TransformersTokenizer.spec.d.ts.map +1 -0
  106. package/lib/TransformersTokenizer.spec.js +112 -0
  107. package/lib/TransformersTokenizer.spec.js.map +1 -0
  108. package/lib/WebFetcher.d.ts +14 -0
  109. package/lib/WebFetcher.d.ts.map +1 -0
  110. package/lib/WebFetcher.js +238 -0
  111. package/lib/WebFetcher.js.map +1 -0
  112. package/lib/WebFetcher.spec.d.ts +2 -0
  113. package/lib/WebFetcher.spec.d.ts.map +1 -0
  114. package/lib/WebFetcher.spec.js +263 -0
  115. package/lib/WebFetcher.spec.js.map +1 -0
  116. package/lib/browser.d.ts +30 -0
  117. package/lib/browser.d.ts.map +1 -0
  118. package/lib/browser.js +52 -0
  119. package/lib/browser.js.map +1 -0
  120. package/lib/codecs/IndexCodec.d.ts +37 -0
  121. package/lib/codecs/IndexCodec.d.ts.map +1 -0
  122. package/lib/codecs/IndexCodec.js +3 -0
  123. package/lib/codecs/IndexCodec.js.map +1 -0
  124. package/lib/codecs/JsonCodec.d.ts +19 -0
  125. package/lib/codecs/JsonCodec.d.ts.map +1 -0
  126. package/lib/codecs/JsonCodec.js +35 -0
  127. package/lib/codecs/JsonCodec.js.map +1 -0
  128. package/lib/codecs/JsonCodec.spec.d.ts +2 -0
  129. package/lib/codecs/JsonCodec.spec.d.ts.map +1 -0
  130. package/lib/codecs/JsonCodec.spec.js +66 -0
  131. package/lib/codecs/JsonCodec.spec.js.map +1 -0
  132. package/lib/codecs/LocalIndex.protobuf.spec.d.ts +2 -0
  133. package/lib/codecs/LocalIndex.protobuf.spec.d.ts.map +1 -0
  134. package/lib/codecs/LocalIndex.protobuf.spec.js +108 -0
  135. package/lib/codecs/LocalIndex.protobuf.spec.js.map +1 -0
  136. package/lib/codecs/ProtobufCodec.d.ts +20 -0
  137. package/lib/codecs/ProtobufCodec.d.ts.map +1 -0
  138. package/lib/codecs/ProtobufCodec.js +225 -0
  139. package/lib/codecs/ProtobufCodec.js.map +1 -0
  140. package/lib/codecs/ProtobufCodec.spec.d.ts +2 -0
  141. package/lib/codecs/ProtobufCodec.spec.d.ts.map +1 -0
  142. package/lib/codecs/ProtobufCodec.spec.js +155 -0
  143. package/lib/codecs/ProtobufCodec.spec.js.map +1 -0
  144. package/lib/codecs/index.d.ts +5 -0
  145. package/lib/codecs/index.d.ts.map +1 -0
  146. package/lib/codecs/index.js +21 -0
  147. package/lib/codecs/index.js.map +1 -0
  148. package/lib/codecs/migrateIndex.d.ts +24 -0
  149. package/lib/codecs/migrateIndex.d.ts.map +1 -0
  150. package/lib/codecs/migrateIndex.js +119 -0
  151. package/lib/codecs/migrateIndex.js.map +1 -0
  152. package/lib/codecs/migrateIndex.spec.d.ts +2 -0
  153. package/lib/codecs/migrateIndex.spec.d.ts.map +1 -0
  154. package/lib/codecs/migrateIndex.spec.js +151 -0
  155. package/lib/codecs/migrateIndex.spec.js.map +1 -0
  156. package/lib/codecs/schemas/index.proto +34 -0
  157. package/lib/index.d.ts +20 -0
  158. package/lib/index.d.ts.map +1 -1
  159. package/lib/index.js +36 -0
  160. package/lib/index.js.map +1 -0
  161. package/lib/internals/Colorize.d.ts +14 -0
  162. package/lib/internals/Colorize.d.ts.map +1 -0
  163. package/lib/internals/Colorize.js +69 -0
  164. package/lib/internals/Colorize.js.map +1 -0
  165. package/lib/internals/index.d.ts +3 -0
  166. package/lib/internals/index.d.ts.map +1 -0
  167. package/lib/internals/index.js +19 -0
  168. package/lib/internals/index.js.map +1 -0
  169. package/lib/internals/types.d.ts +43 -0
  170. package/lib/internals/types.d.ts.map +1 -0
  171. package/lib/internals/types.js +3 -0
  172. package/lib/internals/types.js.map +1 -0
  173. package/lib/server/IndexManager.d.ts +78 -0
  174. package/lib/server/IndexManager.d.ts.map +1 -0
  175. package/lib/server/IndexManager.js +259 -0
  176. package/lib/server/IndexManager.js.map +1 -0
  177. package/lib/server/VectraServer.d.ts +40 -0
  178. package/lib/server/VectraServer.d.ts.map +1 -0
  179. package/lib/server/VectraServer.js +151 -0
  180. package/lib/server/VectraServer.js.map +1 -0
  181. package/lib/server/VectraServer.spec.d.ts +2 -0
  182. package/lib/server/VectraServer.spec.d.ts.map +1 -0
  183. package/lib/server/VectraServer.spec.js +322 -0
  184. package/lib/server/VectraServer.spec.js.map +1 -0
  185. package/lib/server/handlers/documentHandlers.d.ts +15 -0
  186. package/lib/server/handlers/documentHandlers.d.ts.map +1 -0
  187. package/lib/server/handlers/documentHandlers.js +95 -0
  188. package/lib/server/handlers/documentHandlers.js.map +1 -0
  189. package/lib/server/handlers/helpers.d.ts +23 -0
  190. package/lib/server/handlers/helpers.d.ts.map +1 -0
  191. package/lib/server/handlers/helpers.js +138 -0
  192. package/lib/server/handlers/helpers.js.map +1 -0
  193. package/lib/server/handlers/index.d.ts +8 -0
  194. package/lib/server/handlers/index.d.ts.map +1 -0
  195. package/lib/server/handlers/index.js +22 -0
  196. package/lib/server/handlers/index.js.map +1 -0
  197. package/lib/server/handlers/indexHandlers.d.ts +14 -0
  198. package/lib/server/handlers/indexHandlers.d.ts.map +1 -0
  199. package/lib/server/handlers/indexHandlers.js +85 -0
  200. package/lib/server/handlers/indexHandlers.js.map +1 -0
  201. package/lib/server/handlers/itemHandlers.d.ts +34 -0
  202. package/lib/server/handlers/itemHandlers.d.ts.map +1 -0
  203. package/lib/server/handlers/itemHandlers.js +166 -0
  204. package/lib/server/handlers/itemHandlers.js.map +1 -0
  205. package/lib/server/handlers/lifecycleHandlers.d.ts +11 -0
  206. package/lib/server/handlers/lifecycleHandlers.d.ts.map +1 -0
  207. package/lib/server/handlers/lifecycleHandlers.js +31 -0
  208. package/lib/server/handlers/lifecycleHandlers.js.map +1 -0
  209. package/lib/server/handlers/queryHandlers.d.ts +27 -0
  210. package/lib/server/handlers/queryHandlers.d.ts.map +1 -0
  211. package/lib/server/handlers/queryHandlers.js +135 -0
  212. package/lib/server/handlers/queryHandlers.js.map +1 -0
  213. package/lib/server/handlers/statsHandlers.d.ts +17 -0
  214. package/lib/server/handlers/statsHandlers.d.ts.map +1 -0
  215. package/lib/server/handlers/statsHandlers.js +81 -0
  216. package/lib/server/handlers/statsHandlers.js.map +1 -0
  217. package/lib/server/index.d.ts +4 -0
  218. package/lib/server/index.d.ts.map +1 -0
  219. package/lib/server/index.js +23 -0
  220. package/lib/server/index.js.map +1 -0
  221. package/lib/storage/FileStorage.d.ts +92 -0
  222. package/lib/storage/FileStorage.d.ts.map +1 -0
  223. package/lib/storage/FileStorage.js +3 -0
  224. package/lib/storage/FileStorage.js.map +1 -0
  225. package/lib/storage/FileStorageUtilities.d.ts +36 -0
  226. package/lib/storage/FileStorageUtilities.d.ts.map +1 -0
  227. package/lib/storage/FileStorageUtilities.js +91 -0
  228. package/lib/storage/FileStorageUtilities.js.map +1 -0
  229. package/lib/storage/FileStorageUtilities.spec.d.ts +2 -0
  230. package/lib/storage/FileStorageUtilities.spec.d.ts.map +1 -0
  231. package/lib/storage/FileStorageUtilities.spec.js +98 -0
  232. package/lib/storage/FileStorageUtilities.spec.js.map +1 -0
  233. package/lib/storage/FileType.d.ts +29 -0
  234. package/lib/storage/FileType.d.ts.map +1 -0
  235. package/lib/storage/FileType.js +38 -0
  236. package/lib/storage/FileType.js.map +1 -0
  237. package/lib/storage/IndexedDBStorage.d.ts +47 -0
  238. package/lib/storage/IndexedDBStorage.d.ts.map +1 -0
  239. package/lib/storage/IndexedDBStorage.js +347 -0
  240. package/lib/storage/IndexedDBStorage.js.map +1 -0
  241. package/lib/storage/LocalFileStorage.browser.d.ts +19 -0
  242. package/lib/storage/LocalFileStorage.browser.d.ts.map +1 -0
  243. package/lib/storage/LocalFileStorage.browser.js +43 -0
  244. package/lib/storage/LocalFileStorage.browser.js.map +1 -0
  245. package/lib/storage/LocalFileStorage.d.ts +23 -0
  246. package/lib/storage/LocalFileStorage.d.ts.map +1 -0
  247. package/lib/storage/LocalFileStorage.js +152 -0
  248. package/lib/storage/LocalFileStorage.js.map +1 -0
  249. package/lib/storage/LocalFileStorage.spec.d.ts +2 -0
  250. package/lib/storage/LocalFileStorage.spec.d.ts.map +1 -0
  251. package/lib/storage/LocalFileStorage.spec.js +249 -0
  252. package/lib/storage/LocalFileStorage.spec.js.map +1 -0
  253. package/lib/storage/VirtualFileStorage.d.ts +18 -0
  254. package/lib/storage/VirtualFileStorage.d.ts.map +1 -0
  255. package/lib/storage/VirtualFileStorage.js +178 -0
  256. package/lib/storage/VirtualFileStorage.js.map +1 -0
  257. package/lib/storage/VirtualFileStorage.spec.d.ts +2 -0
  258. package/lib/storage/VirtualFileStorage.spec.d.ts.map +1 -0
  259. package/lib/storage/VirtualFileStorage.spec.js +302 -0
  260. package/lib/storage/VirtualFileStorage.spec.js.map +1 -0
  261. package/lib/storage/index.d.ts +6 -0
  262. package/lib/storage/index.d.ts.map +1 -0
  263. package/lib/storage/index.js +22 -0
  264. package/lib/storage/index.js.map +1 -0
  265. package/lib/templates/templates/csharp/README.md +48 -0
  266. package/lib/templates/templates/csharp/VectraClient.cs +234 -0
  267. package/lib/templates/templates/go/README.md +71 -0
  268. package/lib/templates/templates/go/vectra_client.go +322 -0
  269. package/lib/templates/templates/java/README.md +81 -0
  270. package/lib/templates/templates/java/VectraClient.java +232 -0
  271. package/lib/templates/templates/python/README.md +37 -0
  272. package/lib/templates/templates/python/vectra_client.py +279 -0
  273. package/lib/templates/templates/rust/Cargo.toml +14 -0
  274. package/lib/templates/templates/rust/README.md +39 -0
  275. package/lib/templates/templates/rust/build.rs +4 -0
  276. package/lib/templates/templates/rust/lib.rs +284 -0
  277. package/lib/templates/templates/typescript/README.md +96 -0
  278. package/lib/templates/templates/typescript/VectraClient.ts +374 -0
  279. package/lib/templates/typescript/VectraClient.d.ts +114 -0
  280. package/lib/templates/typescript/VectraClient.d.ts.map +1 -0
  281. package/lib/templates/typescript/VectraClient.js +328 -0
  282. package/lib/templates/typescript/VectraClient.js.map +1 -0
  283. package/lib/types.d.ts +153 -0
  284. package/lib/types.d.ts.map +1 -0
  285. package/lib/types.js +3 -0
  286. package/lib/types.js.map +1 -0
  287. package/lib/utils/index.d.ts +2 -0
  288. package/lib/utils/index.d.ts.map +1 -0
  289. package/lib/utils/index.js +18 -0
  290. package/lib/utils/index.js.map +1 -0
  291. package/lib/utils/pathUtils.d.ts +40 -0
  292. package/lib/utils/pathUtils.d.ts.map +1 -0
  293. package/lib/utils/pathUtils.js +98 -0
  294. package/lib/utils/pathUtils.js.map +1 -0
  295. package/lib/vectra-cli.d.ts +2 -0
  296. package/lib/vectra-cli.d.ts.map +1 -1
  297. package/lib/vectra-cli.generate.spec.d.ts +2 -0
  298. package/lib/vectra-cli.generate.spec.d.ts.map +1 -0
  299. package/lib/vectra-cli.generate.spec.js +112 -0
  300. package/lib/vectra-cli.generate.spec.js.map +1 -0
  301. package/lib/vectra-cli.js +760 -0
  302. package/lib/vectra-cli.js.map +1 -0
  303. package/lib/vectra-cli.spec.d.ts +1 -0
  304. package/lib/vectra-cli.spec.d.ts.map +1 -0
  305. package/lib/vectra-cli.spec.js +2 -0
  306. package/lib/vectra-cli.spec.js.map +1 -0
  307. package/package.json +91 -16
  308. package/proto/vectra_service.proto +276 -0
  309. package/src/BrowserWebFetcher.ts +345 -0
  310. package/src/FileFetcher.spec.ts +234 -0
  311. package/src/FileFetcher.ts +37 -25
  312. package/src/FolderWatcher.spec.ts +288 -0
  313. package/src/FolderWatcher.ts +304 -0
  314. package/src/GPT3Tokenizer.spec.ts +50 -0
  315. package/src/ItemSelector.spec.ts +252 -0
  316. package/src/ItemSelector.ts +163 -150
  317. package/src/LocalDocument.spec.ts +211 -0
  318. package/src/LocalDocument.ts +88 -94
  319. package/src/LocalDocumentIndex.spec.ts +481 -0
  320. package/src/LocalDocumentIndex.ts +39 -40
  321. package/src/LocalDocumentResult.spec.ts +373 -0
  322. package/src/LocalDocumentResult.ts +489 -319
  323. package/src/LocalEmbeddings.spec.ts +138 -0
  324. package/src/LocalEmbeddings.ts +120 -0
  325. package/src/LocalIndex.spec.ts +808 -66
  326. package/src/LocalIndex.ts +479 -429
  327. package/src/OpenAIEmbeddings.spec.ts +354 -0
  328. package/src/OpenAIEmbeddings.ts +26 -27
  329. package/src/TextSplitter.spec.ts +342 -0
  330. package/src/TextSplitter.ts +517 -532
  331. package/src/TransformersEmbeddings.spec.ts +188 -0
  332. package/src/TransformersEmbeddings.ts +232 -0
  333. package/src/TransformersTokenizer.spec.ts +143 -0
  334. package/src/TransformersTokenizer.ts +45 -0
  335. package/src/WebFetcher.spec.ts +288 -0
  336. package/src/WebFetcher.ts +184 -186
  337. package/src/browser.ts +69 -0
  338. package/src/codecs/IndexCodec.ts +40 -0
  339. package/src/codecs/JsonCodec.spec.ts +70 -0
  340. package/src/codecs/JsonCodec.ts +37 -0
  341. package/src/codecs/LocalIndex.protobuf.spec.ts +115 -0
  342. package/src/codecs/ProtobufCodec.spec.ts +166 -0
  343. package/src/codecs/ProtobufCodec.ts +193 -0
  344. package/src/codecs/index.ts +4 -0
  345. package/src/codecs/migrateIndex.spec.ts +176 -0
  346. package/src/codecs/migrateIndex.ts +125 -0
  347. package/src/codecs/schemas/index.proto +34 -0
  348. package/src/index.ts +9 -1
  349. package/src/internals/Colorize.ts +19 -16
  350. package/src/server/IndexManager.ts +243 -0
  351. package/src/server/VectraServer.spec.ts +303 -0
  352. package/src/server/VectraServer.ts +156 -0
  353. package/src/server/handlers/documentHandlers.ts +59 -0
  354. package/src/server/handlers/helpers.ts +93 -0
  355. package/src/server/handlers/index.ts +7 -0
  356. package/src/server/handlers/indexHandlers.ts +44 -0
  357. package/src/server/handlers/itemHandlers.ts +140 -0
  358. package/src/server/handlers/lifecycleHandlers.ts +26 -0
  359. package/src/server/handlers/queryHandlers.ts +96 -0
  360. package/src/server/handlers/statsHandlers.ts +38 -0
  361. package/src/server/index.ts +3 -0
  362. package/src/storage/FileStorage.ts +105 -0
  363. package/src/storage/FileStorageUtilities.spec.ts +106 -0
  364. package/src/storage/FileStorageUtilities.ts +77 -0
  365. package/src/storage/FileType.ts +61 -0
  366. package/src/storage/IndexedDBStorage.ts +365 -0
  367. package/src/storage/LocalFileStorage.browser.ts +52 -0
  368. package/src/storage/LocalFileStorage.spec.ts +292 -0
  369. package/src/storage/LocalFileStorage.ts +98 -0
  370. package/src/storage/VirtualFileStorage.spec.ts +307 -0
  371. package/src/storage/VirtualFileStorage.ts +169 -0
  372. package/src/storage/index.ts +5 -0
  373. package/src/templates/csharp/README.md +48 -0
  374. package/src/templates/csharp/VectraClient.cs +234 -0
  375. package/src/templates/go/README.md +71 -0
  376. package/src/templates/go/vectra_client.go +322 -0
  377. package/src/templates/java/README.md +81 -0
  378. package/src/templates/java/VectraClient.java +232 -0
  379. package/src/templates/python/README.md +37 -0
  380. package/src/templates/python/vectra_client.py +279 -0
  381. package/src/templates/rust/Cargo.toml +14 -0
  382. package/src/templates/rust/README.md +39 -0
  383. package/src/templates/rust/build.rs +4 -0
  384. package/src/templates/rust/lib.rs +284 -0
  385. package/src/templates/typescript/README.md +96 -0
  386. package/src/templates/typescript/VectraClient.ts +374 -0
  387. package/src/types.ts +131 -123
  388. package/src/utils/index.ts +1 -0
  389. package/src/utils/pathUtils.ts +106 -0
  390. package/src/vectra-cli.generate.spec.ts +72 -0
  391. package/src/vectra-cli.spec.ts +0 -0
  392. package/src/vectra-cli.ts +687 -246
@@ -0,0 +1,211 @@
1
+ import { strict as assert } from "node:assert";
2
+ import path from "./utils/pathUtils";
3
+ import { describe, it, beforeEach } from "mocha";
4
+ import * as LocalDocumentModule from "../src/LocalDocument";
5
+
6
+ // Support both default and named export styles
7
+ type LocalDocumentCtor = new (index: any, id: string, uri: string) => any;
8
+ const LocalDocument: LocalDocumentCtor =
9
+ (LocalDocumentModule as any).LocalDocument ??
10
+ (LocalDocumentModule as any).default;
11
+
12
+ if (!LocalDocument) {
13
+ throw new Error(
14
+ 'Unable to import LocalDocument (neither named "LocalDocument" nor default export found).'
15
+ );
16
+ }
17
+
18
+ describe("LocalDocument", () => {
19
+ let calls: { method: string; args: any[] }[];
20
+ let indexStub: any;
21
+ let storageStub: any;
22
+ let tokenizerStub: any;
23
+ let doc: InstanceType<LocalDocumentCtor>;
24
+ const folderPath = "/folder";
25
+ const id = "doc1";
26
+ const uri = "file:///doc1";
27
+
28
+ beforeEach(() => {
29
+ calls = [];
30
+ storageStub = {
31
+ readFile: async (filePath: string) => {
32
+ calls.push({ method: "readFile", args: [filePath] });
33
+ if (filePath.endsWith(".txt")) {
34
+ return Buffer.from("hello world", "utf8");
35
+ }
36
+ if (filePath.endsWith(".json")) {
37
+ return Buffer.from(JSON.stringify({ key: "value" }), "utf8");
38
+ }
39
+ throw new Error("File not found");
40
+ },
41
+ pathExists: async (filePath: string) => {
42
+ calls.push({ method: "pathExists", args: [filePath] });
43
+ return filePath.endsWith(".json");
44
+ },
45
+ };
46
+ tokenizerStub = {
47
+ encode: (text: string) => {
48
+ calls.push({ method: "encode", args: [text] });
49
+ return Array.from(text);
50
+ },
51
+ };
52
+ indexStub = {
53
+ folderPath,
54
+ storage: storageStub,
55
+ tokenizer: tokenizerStub,
56
+ };
57
+ doc = new LocalDocument(indexStub, id, uri);
58
+ });
59
+
60
+ it("constructor and getters", () => {
61
+ assert.equal(doc.id, id);
62
+ assert.equal(doc.uri, uri);
63
+ assert.equal(doc.folderPath, folderPath);
64
+ });
65
+
66
+ describe("loadText", () => {
67
+ it("loads and caches text", async () => {
68
+ const text1 = await doc.loadText();
69
+ const text2 = await doc.loadText();
70
+ assert.equal(text1, "hello world");
71
+ assert.equal(text2, "hello world");
72
+
73
+ const readFileCalls = calls.filter((c) => c.method === "readFile");
74
+ assert.equal(readFileCalls.length, 1);
75
+ assert.equal(
76
+ readFileCalls[0].args[0],
77
+ path.join(folderPath, `${id}.txt`)
78
+ );
79
+ });
80
+
81
+ it("throws on read error with uri in message", async () => {
82
+ storageStub.readFile = async (filePath: string) => {
83
+ calls.push({ method: "readFile", args: [filePath] });
84
+ throw new Error("read error");
85
+ };
86
+ const doc2 = new LocalDocument(indexStub, id, uri);
87
+ await assert.rejects(
88
+ () => doc2.loadText(),
89
+ (err: any) =>
90
+ String(err.message).includes(
91
+ `Error reading text file for document "${uri}":`
92
+ )
93
+ );
94
+ });
95
+ });
96
+
97
+ describe("hasMetadata", () => {
98
+ it("returns true if metadata exists, using correct path", async () => {
99
+ const result = await doc.hasMetadata();
100
+ assert.equal(result, true);
101
+ const pe = calls.find((c) => c.method === "pathExists");
102
+ assert.ok(pe);
103
+ assert.equal(pe!.args[0], path.join(folderPath, `${id}.json`));
104
+ });
105
+
106
+ it("returns false if metadata does not exist", async () => {
107
+ storageStub.pathExists = async (filePath: string) => {
108
+ calls.push({ method: "pathExists", args: [filePath] });
109
+ return false;
110
+ };
111
+ const doc2 = new LocalDocument(indexStub, id, uri);
112
+ const result = await doc2.hasMetadata();
113
+ assert.equal(result, false);
114
+ });
115
+ });
116
+
117
+ describe("loadMetadata", () => {
118
+ it("loads and caches metadata, using correct path", async () => {
119
+ const meta1 = await doc.loadMetadata();
120
+ const meta2 = await doc.loadMetadata();
121
+ assert.deepEqual(meta1, { key: "value" });
122
+ assert.equal(meta1, meta2);
123
+
124
+ const jsonCalls = calls.filter(
125
+ (c) => c.method === "readFile" && c.args[0].endsWith(".json")
126
+ );
127
+ assert.equal(jsonCalls.length, 1);
128
+ assert.equal(jsonCalls[0].args[0], path.join(folderPath, `${id}.json`));
129
+ });
130
+
131
+ it("throws on read error with uri in message", async () => {
132
+ storageStub.readFile = async (filePath: string) => {
133
+ calls.push({ method: "readFile", args: [filePath] });
134
+ if (filePath.endsWith(".json")) throw new Error("read error");
135
+ return Buffer.from("ok", "utf8");
136
+ };
137
+ const doc2 = new LocalDocument(indexStub, id, uri);
138
+ await assert.rejects(
139
+ () => doc2.loadMetadata(),
140
+ (err: any) =>
141
+ String(err.message).includes(
142
+ `Error reading metadata for document "${uri}":`
143
+ )
144
+ );
145
+ });
146
+
147
+ it("throws on parse error with uri in message", async () => {
148
+ storageStub.readFile = async (filePath: string) => {
149
+ calls.push({ method: "readFile", args: [filePath] });
150
+ if (filePath.endsWith(".json")) return Buffer.from("{", "utf8");
151
+ return Buffer.from("ok", "utf8");
152
+ };
153
+ const doc2 = new LocalDocument(indexStub, id, uri);
154
+ await assert.rejects(
155
+ () => doc2.loadMetadata(),
156
+ (err: any) =>
157
+ String(err.message).includes(
158
+ `Error parsing metadata for document "${uri}":`
159
+ )
160
+ );
161
+ });
162
+ });
163
+
164
+ describe("getLength", () => {
165
+ it("uses tokenizer.encode for small text (≤ 40,000 chars)", async () => {
166
+ tokenizerStub.encode = (text: string) => {
167
+ calls.push({ method: "encode", args: [text] });
168
+ return new Array(5);
169
+ };
170
+ storageStub.readFile = async (filePath: string) => {
171
+ calls.push({ method: "readFile", args: [filePath] });
172
+ return Buffer.from("small text", "utf8");
173
+ };
174
+ const doc2 = new LocalDocument(indexStub, id, uri);
175
+ const length = await doc2.getLength();
176
+ assert.equal(length, 5);
177
+ assert.ok(calls.some((c) => c.method === "encode"));
178
+ });
179
+
180
+ it("estimates length for large text (> 40,000 chars) without encoding", async () => {
181
+ const largeText = "a".repeat(40001);
182
+ storageStub.readFile = async (filePath: string) => {
183
+ calls.push({ method: "readFile", args: [filePath] });
184
+ return Buffer.from(largeText, "utf8");
185
+ };
186
+ tokenizerStub.encode = () => {
187
+ throw new Error("encode should not be called for large text");
188
+ };
189
+ const doc2 = new LocalDocument(indexStub, id, uri);
190
+ const length = await doc2.getLength();
191
+ assert.equal(length, Math.ceil(40001 / 4));
192
+ });
193
+
194
+ it("reuses cached text across calls (no extra reads)", async () => {
195
+ tokenizerStub.encode = (text: string) => new Array(text.length);
196
+ storageStub.readFile = async (filePath: string) => {
197
+ calls.push({ method: "readFile", args: [filePath] });
198
+ return Buffer.from("small text", "utf8");
199
+ };
200
+ const doc2 = new LocalDocument(indexStub, id, uri);
201
+
202
+ const length1 = await doc2.getLength();
203
+ const length2 = await doc2.getLength();
204
+ assert.equal(length1, length2);
205
+
206
+ const readFileCalls = calls.filter((c) => c.method === "readFile");
207
+ assert.equal(readFileCalls.length, 1);
208
+ assert.equal(readFileCalls[0].args[0], path.join(folderPath, `${id}.txt`));
209
+ });
210
+ });
211
+ });
@@ -1,5 +1,4 @@
1
- import * as fs from 'fs/promises';
2
- import * as path from 'path';
1
+ import { pathUtils as path } from './utils/pathUtils';
3
2
  import { MetadataTypes } from './types';
4
3
  import { LocalDocumentIndex } from './LocalDocumentIndex';
5
4
 
@@ -7,109 +6,104 @@ import { LocalDocumentIndex } from './LocalDocumentIndex';
7
6
  * Represents an indexed document stored on disk.
8
7
  */
9
8
  export class LocalDocument {
10
- private readonly _index: LocalDocumentIndex;
11
- private readonly _id: string;
12
- private readonly _uri: string;
13
- private _metadata: Record<string,MetadataTypes>|undefined;
14
- private _text: string|undefined;
9
+ private readonly _index: LocalDocumentIndex;
10
+ private readonly _id: string;
11
+ private readonly _uri: string;
12
+ private _metadata: Record<string, MetadataTypes> | undefined;
13
+ private _text: string | undefined;
15
14
 
16
- /**
17
- * Creates a new `LocalDocument` instance.
18
- * @param index Parent index that contains the document.
19
- * @param id ID of the document.
20
- * @param uri URI of the document.
21
- */
22
- public constructor(index: LocalDocumentIndex, id: string, uri: string) {
23
- this._index = index;
24
- this._id = id;
25
- this._uri = uri;
26
- }
15
+ /**
16
+ * Creates a new `LocalDocument` instance.
17
+ * @param index Parent index that contains the document.
18
+ * @param id ID of the document.
19
+ * @param uri URI of the document.
20
+ */
21
+ public constructor(index: LocalDocumentIndex, id: string, uri: string) {
22
+ this._index = index;
23
+ this._id = id;
24
+ this._uri = uri;
25
+ }
27
26
 
28
- /**
29
- * Returns the folder path where the document is stored.
30
- */
31
- public get folderPath(): string {
32
- return this._index.folderPath;
33
- }
27
+ /**
28
+ * Returns the folder path where the document is stored.
29
+ */
30
+ public get folderPath(): string {
31
+ return this._index.folderPath;
32
+ }
34
33
 
35
- /**
36
- * Returns the ID of the document.
37
- */
38
- public get id(): string {
39
- return this._id;
40
- }
34
+ /**
35
+ * Returns the ID of the document.
36
+ */
37
+ public get id(): string {
38
+ return this._id;
39
+ }
41
40
 
42
- /**
43
- * Returns the URI of the document.
44
- */
45
- public get uri(): string {
46
- return this._uri;
47
- }
41
+ /**
42
+ * Returns the URI of the document.
43
+ */
44
+ public get uri(): string {
45
+ return this._uri;
46
+ }
48
47
 
49
- /**
50
- * Returns the length of the document in tokens.
51
- * @remarks
52
- * This value will be estimated for documents longer then 40k bytes.
53
- * @returns Length of the document in tokens.
54
- */
55
- public async getLength(): Promise<number> {
56
- const text = await this.loadText();
57
- if (text.length <= 40000) {
58
- return this._index.tokenizer.encode(text).length;
59
- } else {
60
- return Math.ceil(text.length / 4);
61
- }
48
+ /**
49
+ * Returns the length of the document in tokens.
50
+ * @remarks
51
+ * This value will be estimated for documents longer then 40k bytes.
52
+ * @returns Length of the document in tokens.
53
+ */
54
+ public async getLength(): Promise<number> {
55
+ const text = await this.loadText();
56
+ if (text.length <= 40000) {
57
+ return this._index.tokenizer.encode(text).length;
58
+ } else {
59
+ return Math.ceil(text.length / 4);
62
60
  }
61
+ }
63
62
 
64
- /**
65
- * Determines if the document has additional metadata storred on disk.
66
- * @returns True if the document has metadata; otherwise, false.
67
- */
68
- public async hasMetadata(): Promise<boolean> {
69
- try {
70
- await fs.access(path.join(this.folderPath, `${this.id}.json`));
71
- return true;
72
- } catch (err: unknown) {
73
- return false;
74
- }
75
- }
76
-
77
- /**
78
- * Loads the metadata for the document from disk.
79
- * @returns Metadata for the document.
80
- */
81
- public async loadMetadata(): Promise<Record<string,MetadataTypes>> {
82
- if (this._metadata == undefined) {
83
- let json: string;
84
- try {
85
- json = (await fs.readFile(path.join(this.folderPath, `${this.id}.json`))).toString();
86
- } catch (err: unknown) {
87
- throw new Error(`Error reading metadata for document "${this.uri}": ${(err as any).toString()}`);
88
- }
63
+ /**
64
+ * Determines if the document has additional metadata stored on disk.
65
+ * @returns True if the document has metadata; otherwise, false.
66
+ */
67
+ public async hasMetadata(): Promise<boolean> {
68
+ return this._index.storage.pathExists(path.join(this.folderPath, `${this.id}.json`));
69
+ }
89
70
 
90
- try {
91
- this._metadata = JSON.parse(json);
92
- } catch (err: unknown) {
93
- throw new Error(`Error parsing metadata for document "${this.uri}": ${(err as any).toString()}`);
94
- }
95
- }
71
+ /**
72
+ * Loads the metadata for the document from disk.
73
+ * @returns Metadata for the document.
74
+ */
75
+ public async loadMetadata(): Promise<Record<string, MetadataTypes>> {
76
+ if (this._metadata == undefined) {
77
+ let json: string;
78
+ try {
79
+ json = (await this._index.storage.readFile(path.join(this.folderPath, `${this.id}.json`))).toString('utf-8');
80
+ } catch (err: unknown) {
81
+ throw new Error(`Error reading metadata for document "${this.uri}": ${(err as any).toString()}`);
82
+ }
96
83
 
97
- return this._metadata!;
84
+ try {
85
+ this._metadata = JSON.parse(json);
86
+ } catch (err: unknown) {
87
+ throw new Error(`Error parsing metadata for document "${this.uri}": ${(err as any).toString()}`);
88
+ }
98
89
  }
99
90
 
100
- /**
101
- * Loads the text for the document from disk.
102
- * @returns Text for the document.
103
- */
104
- public async loadText(): Promise<string> {
105
- if (this._text == undefined) {
106
- try {
107
- this._text = (await fs.readFile(path.join(this.folderPath, `${this.id}.txt`))).toString();
108
- } catch (err: unknown) {
109
- throw new Error(`Error reading text file for document "${this.uri}": ${(err as any).toString()}`);
110
- }
111
- }
91
+ return this._metadata!;
92
+ }
112
93
 
113
- return this._text;
94
+ /**
95
+ * Loads the text for the document from disk.
96
+ * @returns Text for the document.
97
+ */
98
+ public async loadText(): Promise<string> {
99
+ if (this._text == undefined) {
100
+ try {
101
+ this._text = (await this._index.storage.readFile(path.join(this.folderPath, `${this.id}.txt`))).toString('utf-8');
102
+ } catch (err: unknown) {
103
+ throw new Error(`Error reading text file for document "${this.uri}": ${(err as any).toString()}`);
104
+ }
114
105
  }
106
+
107
+ return this._text;
108
+ }
115
109
  }