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,365 @@
1
+ import { Buffer } from 'buffer';
2
+ import { FileDetails, FileStorage, ListFilesFilter } from "./FileStorage";
3
+ import { FileStorageUtilities } from "./FileStorageUtilities";
4
+ import { pathUtils } from "../utils/pathUtils";
5
+
6
+ /**
7
+ * Browser-compatible FileStorage implementation using IndexedDB.
8
+ * @remarks
9
+ * This storage backend works in browsers and Electron renderer processes.
10
+ * Data persists across page reloads and browser sessions.
11
+ */
12
+ export class IndexedDBStorage implements FileStorage {
13
+ private readonly _dbName: string;
14
+ private _db: IDBDatabase | undefined;
15
+
16
+ /**
17
+ * Creates a new `IndexedDBStorage` instance.
18
+ * @param dbName Name of the IndexedDB database. Defaults to 'vectra-db'.
19
+ */
20
+ constructor(dbName: string = 'vectra-db') {
21
+ this._dbName = dbName;
22
+ }
23
+
24
+ /**
25
+ * Opens or creates the IndexedDB database.
26
+ */
27
+ private async getDB(): Promise<IDBDatabase> {
28
+ if (this._db) {
29
+ return this._db;
30
+ }
31
+
32
+ return new Promise((resolve, reject) => {
33
+ const request = indexedDB.open(this._dbName, 1);
34
+
35
+ request.onerror = () => reject(new Error(`Failed to open IndexedDB: ${request.error?.message}`));
36
+
37
+ request.onsuccess = () => {
38
+ this._db = request.result;
39
+ resolve(this._db);
40
+ };
41
+
42
+ request.onupgradeneeded = (event) => {
43
+ const db = (event.target as IDBOpenDBRequest).result;
44
+
45
+ // Store for files: { path, content, createdAt, updatedAt }
46
+ if (!db.objectStoreNames.contains('files')) {
47
+ const fileStore = db.createObjectStore('files', { keyPath: 'path' });
48
+ fileStore.createIndex('parentPath', 'parentPath', { unique: false });
49
+ }
50
+
51
+ // Store for folders: { path, createdAt }
52
+ if (!db.objectStoreNames.contains('folders')) {
53
+ const folderStore = db.createObjectStore('folders', { keyPath: 'path' });
54
+ folderStore.createIndex('parentPath', 'parentPath', { unique: false });
55
+ }
56
+ };
57
+ });
58
+ }
59
+
60
+ /**
61
+ * Normalizes a path for consistent storage.
62
+ */
63
+ private normalizePath(filePath: string): string {
64
+ // Normalize and ensure forward slashes
65
+ let normalized = pathUtils.normalize(filePath);
66
+ // Remove trailing slash unless it's the root
67
+ if (normalized.length > 1 && normalized.endsWith('/')) {
68
+ normalized = normalized.slice(0, -1);
69
+ }
70
+ return normalized;
71
+ }
72
+
73
+ /**
74
+ * Gets the parent path of a given path.
75
+ */
76
+ private getParentPath(filePath: string): string {
77
+ const normalized = this.normalizePath(filePath);
78
+ const parent = pathUtils.dirname(normalized);
79
+ return parent === normalized ? '' : parent;
80
+ }
81
+
82
+ async createFile(filePath: string, content: Buffer | string): Promise<void> {
83
+ const db = await this.getDB();
84
+ const normalizedPath = this.normalizePath(filePath);
85
+
86
+ // Convert content to ArrayBuffer for storage
87
+ let arrayBuffer: ArrayBuffer;
88
+ if (typeof content === 'string') {
89
+ arrayBuffer = new TextEncoder().encode(content).buffer;
90
+ } else {
91
+ arrayBuffer = content.buffer.slice(content.byteOffset, content.byteOffset + content.byteLength) as ArrayBuffer;
92
+ }
93
+
94
+ return new Promise((resolve, reject) => {
95
+ const tx = db.transaction('files', 'readwrite');
96
+ const store = tx.objectStore('files');
97
+
98
+ const record = {
99
+ path: normalizedPath,
100
+ parentPath: this.getParentPath(normalizedPath),
101
+ content: arrayBuffer,
102
+ createdAt: Date.now(),
103
+ updatedAt: Date.now()
104
+ };
105
+
106
+ const request = store.add(record);
107
+ request.onsuccess = () => resolve();
108
+ request.onerror = () => reject(new Error(`File already exists: ${filePath}`));
109
+ });
110
+ }
111
+
112
+ async createFolder(folderPath: string): Promise<void> {
113
+ const db = await this.getDB();
114
+ const normalizedPath = this.normalizePath(folderPath);
115
+
116
+ // Create all parent folders recursively
117
+ const parts = normalizedPath.split('/').filter(Boolean);
118
+ let currentPath = '';
119
+
120
+ const tx = db.transaction('folders', 'readwrite');
121
+ const store = tx.objectStore('folders');
122
+
123
+ for (const part of parts) {
124
+ const parentPath = currentPath;
125
+ currentPath = currentPath ? `${currentPath}/${part}` : part;
126
+
127
+ // Use put to create or update (idempotent)
128
+ store.put({
129
+ path: currentPath,
130
+ parentPath: parentPath,
131
+ createdAt: Date.now()
132
+ });
133
+ }
134
+
135
+ return new Promise((resolve, reject) => {
136
+ tx.oncomplete = () => resolve();
137
+ tx.onerror = () => reject(new Error(`Failed to create folder: ${folderPath}`));
138
+ });
139
+ }
140
+
141
+ async deleteFile(filePath: string): Promise<void> {
142
+ const db = await this.getDB();
143
+ const normalizedPath = this.normalizePath(filePath);
144
+
145
+ return new Promise((resolve, reject) => {
146
+ const tx = db.transaction('files', 'readwrite');
147
+ const store = tx.objectStore('files');
148
+ const request = store.delete(normalizedPath);
149
+ request.onsuccess = () => resolve();
150
+ request.onerror = () => reject(new Error(`Failed to delete file: ${filePath}`));
151
+ });
152
+ }
153
+
154
+ async deleteFolder(folderPath: string): Promise<void> {
155
+ const db = await this.getDB();
156
+ const normalizedPath = this.normalizePath(folderPath);
157
+ const prefix = normalizedPath + '/';
158
+
159
+ return new Promise((resolve, reject) => {
160
+ const tx = db.transaction(['files', 'folders'], 'readwrite');
161
+ const fileStore = tx.objectStore('files');
162
+ const folderStore = tx.objectStore('folders');
163
+
164
+ // Delete all files with matching prefix
165
+ const filesCursor = fileStore.openCursor();
166
+ filesCursor.onsuccess = (event) => {
167
+ const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result;
168
+ if (cursor) {
169
+ if (cursor.value.path === normalizedPath || cursor.value.path.startsWith(prefix)) {
170
+ cursor.delete();
171
+ }
172
+ cursor.continue();
173
+ }
174
+ };
175
+
176
+ // Delete all folders with matching prefix
177
+ const foldersCursor = folderStore.openCursor();
178
+ foldersCursor.onsuccess = (event) => {
179
+ const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result;
180
+ if (cursor) {
181
+ if (cursor.value.path === normalizedPath || cursor.value.path.startsWith(prefix)) {
182
+ cursor.delete();
183
+ }
184
+ cursor.continue();
185
+ }
186
+ };
187
+
188
+ tx.oncomplete = () => resolve();
189
+ tx.onerror = () => reject(new Error(`Failed to delete folder: ${folderPath}`));
190
+ });
191
+ }
192
+
193
+ async getDetails(fileOrFolderPath: string): Promise<FileDetails> {
194
+ const db = await this.getDB();
195
+ const normalizedPath = this.normalizePath(fileOrFolderPath);
196
+
197
+ // Try to find as file first
198
+ const file = await new Promise<any>((resolve) => {
199
+ const tx = db.transaction('files', 'readonly');
200
+ const store = tx.objectStore('files');
201
+ const request = store.get(normalizedPath);
202
+ request.onsuccess = () => resolve(request.result);
203
+ request.onerror = () => resolve(undefined);
204
+ });
205
+
206
+ if (file) {
207
+ return {
208
+ name: pathUtils.basename(normalizedPath),
209
+ path: normalizedPath,
210
+ isFolder: false,
211
+ fileType: FileStorageUtilities.getFileType(normalizedPath)
212
+ };
213
+ }
214
+
215
+ // Try to find as folder
216
+ const folder = await new Promise<any>((resolve) => {
217
+ const tx = db.transaction('folders', 'readonly');
218
+ const store = tx.objectStore('folders');
219
+ const request = store.get(normalizedPath);
220
+ request.onsuccess = () => resolve(request.result);
221
+ request.onerror = () => resolve(undefined);
222
+ });
223
+
224
+ if (folder) {
225
+ return {
226
+ name: pathUtils.basename(normalizedPath),
227
+ path: normalizedPath,
228
+ isFolder: true
229
+ };
230
+ }
231
+
232
+ throw new Error(`Path not found: ${fileOrFolderPath}`);
233
+ }
234
+
235
+ async listFiles(folderPath: string, filter?: ListFilesFilter): Promise<FileDetails[]> {
236
+ const db = await this.getDB();
237
+ const normalizedPath = this.normalizePath(folderPath);
238
+ const results: FileDetails[] = [];
239
+
240
+ // Get files in folder
241
+ if (filter !== 'folders') {
242
+ const files = await new Promise<any[]>((resolve) => {
243
+ const tx = db.transaction('files', 'readonly');
244
+ const store = tx.objectStore('files');
245
+ const index = store.index('parentPath');
246
+ const request = index.getAll(normalizedPath);
247
+ request.onsuccess = () => resolve(request.result || []);
248
+ request.onerror = () => resolve([]);
249
+ });
250
+
251
+ for (const file of files) {
252
+ results.push({
253
+ name: pathUtils.basename(file.path),
254
+ path: file.path,
255
+ isFolder: false,
256
+ fileType: FileStorageUtilities.getFileType(file.path)
257
+ });
258
+ }
259
+ }
260
+
261
+ // Get subfolders
262
+ if (filter !== 'files') {
263
+ const folders = await new Promise<any[]>((resolve) => {
264
+ const tx = db.transaction('folders', 'readonly');
265
+ const store = tx.objectStore('folders');
266
+ const index = store.index('parentPath');
267
+ const request = index.getAll(normalizedPath);
268
+ request.onsuccess = () => resolve(request.result || []);
269
+ request.onerror = () => resolve([]);
270
+ });
271
+
272
+ for (const folder of folders) {
273
+ results.push({
274
+ name: pathUtils.basename(folder.path),
275
+ path: folder.path,
276
+ isFolder: true
277
+ });
278
+ }
279
+ }
280
+
281
+ return results;
282
+ }
283
+
284
+ async pathExists(fileOrFolderPath: string): Promise<boolean> {
285
+ try {
286
+ await this.getDetails(fileOrFolderPath);
287
+ return true;
288
+ } catch {
289
+ return false;
290
+ }
291
+ }
292
+
293
+ async readFile(filePath: string): Promise<Buffer> {
294
+ const db = await this.getDB();
295
+ const normalizedPath = this.normalizePath(filePath);
296
+
297
+ const file = await new Promise<any>((resolve, reject) => {
298
+ const tx = db.transaction('files', 'readonly');
299
+ const store = tx.objectStore('files');
300
+ const request = store.get(normalizedPath);
301
+ request.onsuccess = () => resolve(request.result);
302
+ request.onerror = () => reject(new Error(`Failed to read file: ${filePath}`));
303
+ });
304
+
305
+ if (!file) {
306
+ throw new Error(`File not found: ${filePath}`);
307
+ }
308
+
309
+ // Convert ArrayBuffer back to Buffer
310
+ return Buffer.from(file.content);
311
+ }
312
+
313
+ async upsertFile(filePath: string, content: Buffer | string): Promise<void> {
314
+ const db = await this.getDB();
315
+ const normalizedPath = this.normalizePath(filePath);
316
+
317
+ // Convert content to ArrayBuffer for storage
318
+ let arrayBuffer: ArrayBuffer;
319
+ if (typeof content === 'string') {
320
+ arrayBuffer = new TextEncoder().encode(content).buffer;
321
+ } else {
322
+ arrayBuffer = content.buffer.slice(content.byteOffset, content.byteOffset + content.byteLength) as ArrayBuffer;
323
+ }
324
+
325
+ return new Promise((resolve, reject) => {
326
+ const tx = db.transaction('files', 'readwrite');
327
+ const store = tx.objectStore('files');
328
+
329
+ const record = {
330
+ path: normalizedPath,
331
+ parentPath: this.getParentPath(normalizedPath),
332
+ content: arrayBuffer,
333
+ createdAt: Date.now(),
334
+ updatedAt: Date.now()
335
+ };
336
+
337
+ const request = store.put(record);
338
+ request.onsuccess = () => resolve();
339
+ request.onerror = () => reject(new Error(`Failed to write file: ${filePath}`));
340
+ });
341
+ }
342
+
343
+ /**
344
+ * Closes the database connection.
345
+ */
346
+ close(): void {
347
+ if (this._db) {
348
+ this._db.close();
349
+ this._db = undefined;
350
+ }
351
+ }
352
+
353
+ /**
354
+ * Deletes the entire database.
355
+ */
356
+ async destroy(): Promise<void> {
357
+ this.close();
358
+
359
+ return new Promise((resolve, reject) => {
360
+ const request = indexedDB.deleteDatabase(this._dbName);
361
+ request.onsuccess = () => resolve();
362
+ request.onerror = () => reject(new Error(`Failed to delete database: ${this._dbName}`));
363
+ });
364
+ }
365
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Browser stub for LocalFileStorage.
3
+ * This module throws an error if LocalFileStorage is used in a browser environment.
4
+ * Use IndexedDBStorage or VirtualFileStorage instead.
5
+ */
6
+
7
+ import { FileStorage, FileDetails, ListFilesFilter } from "./FileStorage";
8
+
9
+ export class LocalFileStorage implements FileStorage {
10
+ constructor() {
11
+ throw new Error(
12
+ 'LocalFileStorage is not supported in browser environments. ' +
13
+ 'Use IndexedDBStorage or VirtualFileStorage instead.'
14
+ );
15
+ }
16
+
17
+ createFile(): Promise<void> {
18
+ throw new Error('LocalFileStorage is not supported in browser environments.');
19
+ }
20
+
21
+ createFolder(): Promise<void> {
22
+ throw new Error('LocalFileStorage is not supported in browser environments.');
23
+ }
24
+
25
+ deleteFile(): Promise<void> {
26
+ throw new Error('LocalFileStorage is not supported in browser environments.');
27
+ }
28
+
29
+ deleteFolder(): Promise<void> {
30
+ throw new Error('LocalFileStorage is not supported in browser environments.');
31
+ }
32
+
33
+ getDetails(): Promise<FileDetails> {
34
+ throw new Error('LocalFileStorage is not supported in browser environments.');
35
+ }
36
+
37
+ listFiles(): Promise<FileDetails[]> {
38
+ throw new Error('LocalFileStorage is not supported in browser environments.');
39
+ }
40
+
41
+ pathExists(): Promise<boolean> {
42
+ throw new Error('LocalFileStorage is not supported in browser environments.');
43
+ }
44
+
45
+ readFile(): Promise<Buffer> {
46
+ throw new Error('LocalFileStorage is not supported in browser environments.');
47
+ }
48
+
49
+ upsertFile(): Promise<void> {
50
+ throw new Error('LocalFileStorage is not supported in browser environments.');
51
+ }
52
+ }