vectra 0.12.3 → 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 (375) hide show
  1. package/README.md +92 -100
  2. package/lib/BrowserWebFetcher.d.ts +75 -0
  3. package/lib/BrowserWebFetcher.d.ts.map +1 -0
  4. package/lib/BrowserWebFetcher.js +290 -0
  5. package/lib/BrowserWebFetcher.js.map +1 -0
  6. package/lib/FileFetcher.d.ts.map +1 -1
  7. package/lib/FileFetcher.js +25 -15
  8. package/lib/FileFetcher.js.map +1 -1
  9. package/lib/FileFetcher.spec.d.ts +2 -0
  10. package/lib/FileFetcher.spec.d.ts.map +1 -0
  11. package/lib/FileFetcher.spec.js +244 -0
  12. package/lib/FileFetcher.spec.js.map +1 -0
  13. package/lib/FolderWatcher.d.ts +91 -0
  14. package/lib/FolderWatcher.d.ts.map +1 -0
  15. package/lib/FolderWatcher.js +304 -0
  16. package/lib/FolderWatcher.js.map +1 -0
  17. package/lib/FolderWatcher.spec.d.ts +2 -0
  18. package/lib/FolderWatcher.spec.d.ts.map +1 -0
  19. package/lib/FolderWatcher.spec.js +308 -0
  20. package/lib/FolderWatcher.spec.js.map +1 -0
  21. package/lib/GPT3Tokenizer.spec.d.ts +2 -0
  22. package/lib/GPT3Tokenizer.spec.d.ts.map +1 -0
  23. package/lib/GPT3Tokenizer.spec.js +45 -0
  24. package/lib/GPT3Tokenizer.spec.js.map +1 -0
  25. package/lib/ItemSelector.d.ts.map +1 -1
  26. package/lib/ItemSelector.js +19 -8
  27. package/lib/ItemSelector.js.map +1 -1
  28. package/lib/ItemSelector.spec.d.ts +2 -0
  29. package/lib/ItemSelector.spec.d.ts.map +1 -0
  30. package/lib/ItemSelector.spec.js +204 -0
  31. package/lib/ItemSelector.spec.js.map +1 -0
  32. package/lib/LocalDocument.d.ts +1 -1
  33. package/lib/LocalDocument.d.ts.map +1 -1
  34. package/lib/LocalDocument.js +5 -45
  35. package/lib/LocalDocument.js.map +1 -1
  36. package/lib/LocalDocument.spec.d.ts +2 -0
  37. package/lib/LocalDocument.spec.d.ts.map +1 -0
  38. package/lib/LocalDocument.spec.js +214 -0
  39. package/lib/LocalDocument.spec.js.map +1 -0
  40. package/lib/LocalDocumentIndex.d.ts +20 -0
  41. package/lib/LocalDocumentIndex.d.ts.map +1 -1
  42. package/lib/LocalDocumentIndex.js +16 -52
  43. package/lib/LocalDocumentIndex.js.map +1 -1
  44. package/lib/LocalDocumentIndex.spec.d.ts +2 -0
  45. package/lib/LocalDocumentIndex.spec.d.ts.map +1 -0
  46. package/lib/LocalDocumentIndex.spec.js +494 -0
  47. package/lib/LocalDocumentIndex.spec.js.map +1 -0
  48. package/lib/LocalDocumentResult.d.ts +32 -11
  49. package/lib/LocalDocumentResult.d.ts.map +1 -1
  50. package/lib/LocalDocumentResult.js +305 -257
  51. package/lib/LocalDocumentResult.js.map +1 -1
  52. package/lib/LocalDocumentResult.spec.d.ts +2 -0
  53. package/lib/LocalDocumentResult.spec.d.ts.map +1 -0
  54. package/lib/LocalDocumentResult.spec.js +373 -0
  55. package/lib/LocalDocumentResult.spec.js.map +1 -0
  56. package/lib/LocalEmbeddings.d.ts +59 -0
  57. package/lib/LocalEmbeddings.d.ts.map +1 -0
  58. package/lib/LocalEmbeddings.js +101 -0
  59. package/lib/LocalEmbeddings.js.map +1 -0
  60. package/lib/LocalEmbeddings.spec.d.ts +2 -0
  61. package/lib/LocalEmbeddings.spec.d.ts.map +1 -0
  62. package/lib/LocalEmbeddings.spec.js +155 -0
  63. package/lib/LocalEmbeddings.spec.js.map +1 -0
  64. package/lib/LocalIndex.d.ts +27 -18
  65. package/lib/LocalIndex.d.ts.map +1 -1
  66. package/lib/LocalIndex.js +109 -105
  67. package/lib/LocalIndex.js.map +1 -1
  68. package/lib/LocalIndex.spec.js +434 -43
  69. package/lib/LocalIndex.spec.js.map +1 -1
  70. package/lib/OpenAIEmbeddings.d.ts +4 -6
  71. package/lib/OpenAIEmbeddings.d.ts.map +1 -1
  72. package/lib/OpenAIEmbeddings.js +16 -24
  73. package/lib/OpenAIEmbeddings.js.map +1 -1
  74. package/lib/OpenAIEmbeddings.spec.d.ts +2 -0
  75. package/lib/OpenAIEmbeddings.spec.d.ts.map +1 -0
  76. package/lib/OpenAIEmbeddings.spec.js +298 -0
  77. package/lib/OpenAIEmbeddings.spec.js.map +1 -0
  78. package/lib/TextSplitter.d.ts +2 -0
  79. package/lib/TextSplitter.d.ts.map +1 -1
  80. package/lib/TextSplitter.js +154 -111
  81. package/lib/TextSplitter.js.map +1 -1
  82. package/lib/TextSplitter.spec.js +289 -61
  83. package/lib/TextSplitter.spec.js.map +1 -1
  84. package/lib/TransformersEmbeddings.d.ts +121 -0
  85. package/lib/TransformersEmbeddings.d.ts.map +1 -0
  86. package/lib/TransformersEmbeddings.js +176 -0
  87. package/lib/TransformersEmbeddings.js.map +1 -0
  88. package/lib/TransformersEmbeddings.spec.d.ts +2 -0
  89. package/lib/TransformersEmbeddings.spec.d.ts.map +1 -0
  90. package/lib/TransformersEmbeddings.spec.js +198 -0
  91. package/lib/TransformersEmbeddings.spec.js.map +1 -0
  92. package/lib/TransformersTokenizer.d.ts +33 -0
  93. package/lib/TransformersTokenizer.d.ts.map +1 -0
  94. package/lib/TransformersTokenizer.js +44 -0
  95. package/lib/TransformersTokenizer.js.map +1 -0
  96. package/lib/TransformersTokenizer.spec.d.ts +2 -0
  97. package/lib/TransformersTokenizer.spec.d.ts.map +1 -0
  98. package/lib/TransformersTokenizer.spec.js +112 -0
  99. package/lib/TransformersTokenizer.spec.js.map +1 -0
  100. package/lib/WebFetcher.d.ts +1 -2
  101. package/lib/WebFetcher.d.ts.map +1 -1
  102. package/lib/WebFetcher.js +58 -54
  103. package/lib/WebFetcher.js.map +1 -1
  104. package/lib/WebFetcher.spec.d.ts +2 -0
  105. package/lib/WebFetcher.spec.d.ts.map +1 -0
  106. package/lib/WebFetcher.spec.js +263 -0
  107. package/lib/WebFetcher.spec.js.map +1 -0
  108. package/lib/browser.d.ts +30 -0
  109. package/lib/browser.d.ts.map +1 -0
  110. package/lib/browser.js +52 -0
  111. package/lib/browser.js.map +1 -0
  112. package/lib/codecs/IndexCodec.d.ts +37 -0
  113. package/lib/codecs/IndexCodec.d.ts.map +1 -0
  114. package/lib/codecs/IndexCodec.js +3 -0
  115. package/lib/codecs/IndexCodec.js.map +1 -0
  116. package/lib/codecs/JsonCodec.d.ts +19 -0
  117. package/lib/codecs/JsonCodec.d.ts.map +1 -0
  118. package/lib/codecs/JsonCodec.js +35 -0
  119. package/lib/codecs/JsonCodec.js.map +1 -0
  120. package/lib/codecs/JsonCodec.spec.d.ts +2 -0
  121. package/lib/codecs/JsonCodec.spec.d.ts.map +1 -0
  122. package/lib/codecs/JsonCodec.spec.js +66 -0
  123. package/lib/codecs/JsonCodec.spec.js.map +1 -0
  124. package/lib/codecs/LocalIndex.protobuf.spec.d.ts +2 -0
  125. package/lib/codecs/LocalIndex.protobuf.spec.d.ts.map +1 -0
  126. package/lib/codecs/LocalIndex.protobuf.spec.js +108 -0
  127. package/lib/codecs/LocalIndex.protobuf.spec.js.map +1 -0
  128. package/lib/codecs/ProtobufCodec.d.ts +20 -0
  129. package/lib/codecs/ProtobufCodec.d.ts.map +1 -0
  130. package/lib/codecs/ProtobufCodec.js +225 -0
  131. package/lib/codecs/ProtobufCodec.js.map +1 -0
  132. package/lib/codecs/ProtobufCodec.spec.d.ts +2 -0
  133. package/lib/codecs/ProtobufCodec.spec.d.ts.map +1 -0
  134. package/lib/codecs/ProtobufCodec.spec.js +155 -0
  135. package/lib/codecs/ProtobufCodec.spec.js.map +1 -0
  136. package/lib/codecs/index.d.ts +5 -0
  137. package/lib/codecs/index.d.ts.map +1 -0
  138. package/lib/codecs/index.js +21 -0
  139. package/lib/codecs/index.js.map +1 -0
  140. package/lib/codecs/migrateIndex.d.ts +24 -0
  141. package/lib/codecs/migrateIndex.d.ts.map +1 -0
  142. package/lib/codecs/migrateIndex.js +119 -0
  143. package/lib/codecs/migrateIndex.js.map +1 -0
  144. package/lib/codecs/migrateIndex.spec.d.ts +2 -0
  145. package/lib/codecs/migrateIndex.spec.d.ts.map +1 -0
  146. package/lib/codecs/migrateIndex.spec.js +151 -0
  147. package/lib/codecs/migrateIndex.spec.js.map +1 -0
  148. package/lib/codecs/schemas/index.proto +34 -0
  149. package/lib/index.d.ts +9 -1
  150. package/lib/index.d.ts.map +1 -1
  151. package/lib/index.js +9 -1
  152. package/lib/index.js.map +1 -1
  153. package/lib/internals/Colorize.d.ts.map +1 -1
  154. package/lib/internals/Colorize.js +20 -15
  155. package/lib/internals/Colorize.js.map +1 -1
  156. package/lib/server/IndexManager.d.ts +78 -0
  157. package/lib/server/IndexManager.d.ts.map +1 -0
  158. package/lib/server/IndexManager.js +259 -0
  159. package/lib/server/IndexManager.js.map +1 -0
  160. package/lib/server/VectraServer.d.ts +40 -0
  161. package/lib/server/VectraServer.d.ts.map +1 -0
  162. package/lib/server/VectraServer.js +151 -0
  163. package/lib/server/VectraServer.js.map +1 -0
  164. package/lib/server/VectraServer.spec.d.ts +2 -0
  165. package/lib/server/VectraServer.spec.d.ts.map +1 -0
  166. package/lib/server/VectraServer.spec.js +322 -0
  167. package/lib/server/VectraServer.spec.js.map +1 -0
  168. package/lib/server/handlers/documentHandlers.d.ts +15 -0
  169. package/lib/server/handlers/documentHandlers.d.ts.map +1 -0
  170. package/lib/server/handlers/documentHandlers.js +95 -0
  171. package/lib/server/handlers/documentHandlers.js.map +1 -0
  172. package/lib/server/handlers/helpers.d.ts +23 -0
  173. package/lib/server/handlers/helpers.d.ts.map +1 -0
  174. package/lib/server/handlers/helpers.js +138 -0
  175. package/lib/server/handlers/helpers.js.map +1 -0
  176. package/lib/server/handlers/index.d.ts +8 -0
  177. package/lib/server/handlers/index.d.ts.map +1 -0
  178. package/lib/server/handlers/index.js +22 -0
  179. package/lib/server/handlers/index.js.map +1 -0
  180. package/lib/server/handlers/indexHandlers.d.ts +14 -0
  181. package/lib/server/handlers/indexHandlers.d.ts.map +1 -0
  182. package/lib/server/handlers/indexHandlers.js +85 -0
  183. package/lib/server/handlers/indexHandlers.js.map +1 -0
  184. package/lib/server/handlers/itemHandlers.d.ts +34 -0
  185. package/lib/server/handlers/itemHandlers.d.ts.map +1 -0
  186. package/lib/server/handlers/itemHandlers.js +166 -0
  187. package/lib/server/handlers/itemHandlers.js.map +1 -0
  188. package/lib/server/handlers/lifecycleHandlers.d.ts +11 -0
  189. package/lib/server/handlers/lifecycleHandlers.d.ts.map +1 -0
  190. package/lib/server/handlers/lifecycleHandlers.js +31 -0
  191. package/lib/server/handlers/lifecycleHandlers.js.map +1 -0
  192. package/lib/server/handlers/queryHandlers.d.ts +27 -0
  193. package/lib/server/handlers/queryHandlers.d.ts.map +1 -0
  194. package/lib/server/handlers/queryHandlers.js +135 -0
  195. package/lib/server/handlers/queryHandlers.js.map +1 -0
  196. package/lib/server/handlers/statsHandlers.d.ts +17 -0
  197. package/lib/server/handlers/statsHandlers.d.ts.map +1 -0
  198. package/lib/server/handlers/statsHandlers.js +81 -0
  199. package/lib/server/handlers/statsHandlers.js.map +1 -0
  200. package/lib/server/index.d.ts +4 -0
  201. package/lib/server/index.d.ts.map +1 -0
  202. package/lib/server/index.js +23 -0
  203. package/lib/server/index.js.map +1 -0
  204. package/lib/storage/FileStorage.d.ts +92 -0
  205. package/lib/storage/FileStorage.d.ts.map +1 -0
  206. package/lib/storage/FileStorage.js +3 -0
  207. package/lib/storage/FileStorage.js.map +1 -0
  208. package/lib/storage/FileStorageUtilities.d.ts +36 -0
  209. package/lib/storage/FileStorageUtilities.d.ts.map +1 -0
  210. package/lib/storage/FileStorageUtilities.js +91 -0
  211. package/lib/storage/FileStorageUtilities.js.map +1 -0
  212. package/lib/storage/FileStorageUtilities.spec.d.ts +2 -0
  213. package/lib/storage/FileStorageUtilities.spec.d.ts.map +1 -0
  214. package/lib/storage/FileStorageUtilities.spec.js +98 -0
  215. package/lib/storage/FileStorageUtilities.spec.js.map +1 -0
  216. package/lib/storage/FileType.d.ts +29 -0
  217. package/lib/storage/FileType.d.ts.map +1 -0
  218. package/lib/storage/FileType.js +38 -0
  219. package/lib/storage/FileType.js.map +1 -0
  220. package/lib/storage/IndexedDBStorage.d.ts +47 -0
  221. package/lib/storage/IndexedDBStorage.d.ts.map +1 -0
  222. package/lib/storage/IndexedDBStorage.js +347 -0
  223. package/lib/storage/IndexedDBStorage.js.map +1 -0
  224. package/lib/storage/LocalFileStorage.browser.d.ts +19 -0
  225. package/lib/storage/LocalFileStorage.browser.d.ts.map +1 -0
  226. package/lib/storage/LocalFileStorage.browser.js +43 -0
  227. package/lib/storage/LocalFileStorage.browser.js.map +1 -0
  228. package/lib/storage/LocalFileStorage.d.ts +23 -0
  229. package/lib/storage/LocalFileStorage.d.ts.map +1 -0
  230. package/lib/storage/LocalFileStorage.js +152 -0
  231. package/lib/storage/LocalFileStorage.js.map +1 -0
  232. package/lib/storage/LocalFileStorage.spec.d.ts +2 -0
  233. package/lib/storage/LocalFileStorage.spec.d.ts.map +1 -0
  234. package/lib/storage/LocalFileStorage.spec.js +249 -0
  235. package/lib/storage/LocalFileStorage.spec.js.map +1 -0
  236. package/lib/storage/VirtualFileStorage.d.ts +18 -0
  237. package/lib/storage/VirtualFileStorage.d.ts.map +1 -0
  238. package/lib/storage/VirtualFileStorage.js +178 -0
  239. package/lib/storage/VirtualFileStorage.js.map +1 -0
  240. package/lib/storage/VirtualFileStorage.spec.d.ts +2 -0
  241. package/lib/storage/VirtualFileStorage.spec.d.ts.map +1 -0
  242. package/lib/storage/VirtualFileStorage.spec.js +302 -0
  243. package/lib/storage/VirtualFileStorage.spec.js.map +1 -0
  244. package/lib/storage/index.d.ts +6 -0
  245. package/lib/storage/index.d.ts.map +1 -0
  246. package/lib/storage/index.js +22 -0
  247. package/lib/storage/index.js.map +1 -0
  248. package/lib/templates/templates/csharp/README.md +48 -0
  249. package/lib/templates/templates/csharp/VectraClient.cs +234 -0
  250. package/lib/templates/templates/go/README.md +71 -0
  251. package/lib/templates/templates/go/vectra_client.go +322 -0
  252. package/lib/templates/templates/java/README.md +81 -0
  253. package/lib/templates/templates/java/VectraClient.java +232 -0
  254. package/lib/templates/templates/python/README.md +37 -0
  255. package/lib/templates/templates/python/vectra_client.py +279 -0
  256. package/lib/templates/templates/rust/Cargo.toml +14 -0
  257. package/lib/templates/templates/rust/README.md +39 -0
  258. package/lib/templates/templates/rust/build.rs +4 -0
  259. package/lib/templates/templates/rust/lib.rs +284 -0
  260. package/lib/templates/templates/typescript/README.md +96 -0
  261. package/lib/templates/templates/typescript/VectraClient.ts +374 -0
  262. package/lib/templates/typescript/VectraClient.d.ts +114 -0
  263. package/lib/templates/typescript/VectraClient.d.ts.map +1 -0
  264. package/lib/templates/typescript/VectraClient.js +328 -0
  265. package/lib/templates/typescript/VectraClient.js.map +1 -0
  266. package/lib/types.d.ts +7 -0
  267. package/lib/types.d.ts.map +1 -1
  268. package/lib/utils/index.d.ts +2 -0
  269. package/lib/utils/index.d.ts.map +1 -0
  270. package/lib/utils/index.js +18 -0
  271. package/lib/utils/index.js.map +1 -0
  272. package/lib/utils/pathUtils.d.ts +40 -0
  273. package/lib/utils/pathUtils.d.ts.map +1 -0
  274. package/lib/utils/pathUtils.js +98 -0
  275. package/lib/utils/pathUtils.js.map +1 -0
  276. package/lib/vectra-cli.d.ts.map +1 -1
  277. package/lib/vectra-cli.generate.spec.d.ts +2 -0
  278. package/lib/vectra-cli.generate.spec.d.ts.map +1 -0
  279. package/lib/vectra-cli.generate.spec.js +112 -0
  280. package/lib/vectra-cli.generate.spec.js.map +1 -0
  281. package/lib/vectra-cli.js +446 -9
  282. package/lib/vectra-cli.js.map +1 -1
  283. package/lib/vectra-cli.spec.d.ts +1 -0
  284. package/lib/vectra-cli.spec.d.ts.map +1 -0
  285. package/lib/vectra-cli.spec.js +2 -0
  286. package/lib/vectra-cli.spec.js.map +1 -0
  287. package/package.json +89 -16
  288. package/proto/vectra_service.proto +276 -0
  289. package/src/BrowserWebFetcher.ts +345 -0
  290. package/src/FileFetcher.spec.ts +234 -0
  291. package/src/FileFetcher.ts +37 -25
  292. package/src/FolderWatcher.spec.ts +288 -0
  293. package/src/FolderWatcher.ts +304 -0
  294. package/src/GPT3Tokenizer.spec.ts +50 -0
  295. package/src/ItemSelector.spec.ts +252 -0
  296. package/src/ItemSelector.ts +163 -150
  297. package/src/LocalDocument.spec.ts +211 -0
  298. package/src/LocalDocument.ts +88 -94
  299. package/src/LocalDocumentIndex.spec.ts +481 -0
  300. package/src/LocalDocumentIndex.ts +39 -40
  301. package/src/LocalDocumentResult.spec.ts +373 -0
  302. package/src/LocalDocumentResult.ts +489 -319
  303. package/src/LocalEmbeddings.spec.ts +138 -0
  304. package/src/LocalEmbeddings.ts +120 -0
  305. package/src/LocalIndex.spec.ts +808 -323
  306. package/src/LocalIndex.ts +479 -430
  307. package/src/OpenAIEmbeddings.spec.ts +354 -0
  308. package/src/OpenAIEmbeddings.ts +26 -27
  309. package/src/TextSplitter.spec.ts +320 -65
  310. package/src/TextSplitter.ts +172 -115
  311. package/src/TransformersEmbeddings.spec.ts +188 -0
  312. package/src/TransformersEmbeddings.ts +232 -0
  313. package/src/TransformersTokenizer.spec.ts +143 -0
  314. package/src/TransformersTokenizer.ts +45 -0
  315. package/src/WebFetcher.spec.ts +288 -0
  316. package/src/WebFetcher.ts +184 -186
  317. package/src/browser.ts +69 -0
  318. package/src/codecs/IndexCodec.ts +40 -0
  319. package/src/codecs/JsonCodec.spec.ts +70 -0
  320. package/src/codecs/JsonCodec.ts +37 -0
  321. package/src/codecs/LocalIndex.protobuf.spec.ts +115 -0
  322. package/src/codecs/ProtobufCodec.spec.ts +166 -0
  323. package/src/codecs/ProtobufCodec.ts +193 -0
  324. package/src/codecs/index.ts +4 -0
  325. package/src/codecs/migrateIndex.spec.ts +176 -0
  326. package/src/codecs/migrateIndex.ts +125 -0
  327. package/src/codecs/schemas/index.proto +34 -0
  328. package/src/index.ts +9 -1
  329. package/src/internals/Colorize.ts +19 -16
  330. package/src/server/IndexManager.ts +243 -0
  331. package/src/server/VectraServer.spec.ts +303 -0
  332. package/src/server/VectraServer.ts +156 -0
  333. package/src/server/handlers/documentHandlers.ts +59 -0
  334. package/src/server/handlers/helpers.ts +93 -0
  335. package/src/server/handlers/index.ts +7 -0
  336. package/src/server/handlers/indexHandlers.ts +44 -0
  337. package/src/server/handlers/itemHandlers.ts +140 -0
  338. package/src/server/handlers/lifecycleHandlers.ts +26 -0
  339. package/src/server/handlers/queryHandlers.ts +96 -0
  340. package/src/server/handlers/statsHandlers.ts +38 -0
  341. package/src/server/index.ts +3 -0
  342. package/src/storage/FileStorage.ts +105 -0
  343. package/src/storage/FileStorageUtilities.spec.ts +106 -0
  344. package/src/storage/FileStorageUtilities.ts +77 -0
  345. package/src/storage/FileType.ts +61 -0
  346. package/src/storage/IndexedDBStorage.ts +365 -0
  347. package/src/storage/LocalFileStorage.browser.ts +52 -0
  348. package/src/storage/LocalFileStorage.spec.ts +292 -0
  349. package/src/storage/LocalFileStorage.ts +98 -0
  350. package/src/storage/VirtualFileStorage.spec.ts +307 -0
  351. package/src/storage/VirtualFileStorage.ts +169 -0
  352. package/src/storage/index.ts +5 -0
  353. package/src/templates/csharp/README.md +48 -0
  354. package/src/templates/csharp/VectraClient.cs +234 -0
  355. package/src/templates/go/README.md +71 -0
  356. package/src/templates/go/vectra_client.go +322 -0
  357. package/src/templates/java/README.md +81 -0
  358. package/src/templates/java/VectraClient.java +232 -0
  359. package/src/templates/python/README.md +37 -0
  360. package/src/templates/python/vectra_client.py +279 -0
  361. package/src/templates/rust/Cargo.toml +14 -0
  362. package/src/templates/rust/README.md +39 -0
  363. package/src/templates/rust/build.rs +4 -0
  364. package/src/templates/rust/lib.rs +284 -0
  365. package/src/templates/typescript/README.md +96 -0
  366. package/src/templates/typescript/VectraClient.ts +374 -0
  367. package/src/types.ts +131 -123
  368. package/src/utils/index.ts +1 -0
  369. package/src/utils/pathUtils.ts +106 -0
  370. package/src/vectra-cli.generate.spec.ts +72 -0
  371. package/src/vectra-cli.spec.ts +0 -0
  372. package/src/vectra-cli.ts +687 -246
  373. package/README.draft.md +0 -499
  374. package/README.draft.outline.md +0 -160
  375. package/README.research.md +0 -2159
package/README.md CHANGED
@@ -1,100 +1,92 @@
1
- # Vectra
2
-
3
- Vectra is a local vector database for Node.js with features similar to [Pinecone](https://www.pinecone.io/) or [Qdrant](https://qdrant.tech/) but built using local files. Each Vectra index is a folder on disk. There's an `index.json` file in the folder that contains all the vectors for the index along with any indexed metadata. When you create an index you can specify which metadata properties to index and only those fields will be stored in the `index.json` file. All of the other metadata for an item will be stored on disk in a separate file keyed by a GUID.
4
-
5
- When queryng Vectra you'll be able to use the same subset of [Mongo DB query operators](https://www.mongodb.com/docs/manual/reference/operator/query/) that Pinecone supports and the results will be returned sorted by simularity. Every item in the index will first be filtered by metadata and then ranked for simularity. Even though every item is evaluated its all in memory so it should by nearly instantanious. Likely 1ms - 2ms for even a rather large index. Smaller indexes should be <1ms.
6
-
7
- Keep in mind that your entire Vectra index is loaded into memory so it's not well suited for scenarios like long term chat bot memory. Use a real vector DB for that. Vectra is intended to be used in scenarios where you have a small corpus of mostly static data that you'd like to include in your prompt. Infinite few shot examples would be a great use case for Vectra or even just a single document you want to ask questions over.
8
-
9
- Pinecone style namespaces aren't directly supported but you could easily mimic them by creating a separate Vectra index (and folder) for each namespace.
10
-
11
- ## Other Language Bindings
12
-
13
- This repo contains the TypeScript/JavaScript binding for Vectra but other language bindings are being created. Since Vectra is file based, any language binding can be used to read or write a Vectra index. That means you can build a Vectra index using JS and then read it using Python.
14
-
15
- - [vectra-py](https://github.com/BMS-geodev/vectra-py) - Python version of Vectra.
16
-
17
- ## Installation
18
-
19
- ```
20
- $ npm install vectra
21
- ```
22
-
23
- ## Usage
24
-
25
- First create an instance of `LocalIndex` with the path to the folder where you want you're items stored:
26
-
27
- ```typescript
28
- import { LocalIndex } from 'vectra';
29
-
30
- const index = new LocalIndex(path.join(__dirname, '..', 'index'));
31
- ```
32
-
33
- Next, from inside an async function, create your index:
34
-
35
- ```typescript
36
- if (!(await index.isIndexCreated())) {
37
- await index.createIndex();
38
- }
39
- ```
40
-
41
- Add some items to your index:
42
-
43
- ```typescript
44
- import { OpenAI } from 'openai';
45
-
46
- const openai = new OpenAI({
47
- apiKey: `<YOUR_KEY>`,
48
- });
49
-
50
- async function getVector(text: string) {
51
- const response = await openai.embeddings.create({
52
- 'model': 'text-embedding-ada-002',
53
- 'input': text,
54
- });
55
- return response.data[0].embedding;
56
- }
57
-
58
- async function addItem(text: string) {
59
- await index.insertItem({
60
- vector: await getVector(text),
61
- metadata: { text },
62
- });
63
- }
64
-
65
- // Add items
66
- await addItem('apple');
67
- await addItem('oranges');
68
- await addItem('red');
69
- await addItem('blue');
70
- ```
71
-
72
- Then query for items:
73
-
74
- ```typescript
75
- async function query(text: string) {
76
- const vector = await getVector(text);
77
- const results = await index.queryItems(vector, 3);
78
- if (results.length > 0) {
79
- for (const result of results) {
80
- console.log(`[${result.score}] ${result.item.metadata.text}`);
81
- }
82
- } else {
83
- console.log(`No results found.`);
84
- }
85
- }
86
-
87
- await query('green');
88
- /*
89
- [0.9036569942401076] blue
90
- [0.8758153664568566] red
91
- [0.8323828606103998] apple
92
- */
93
-
94
- await query('banana');
95
- /*
96
- [0.9033128691220631] apple
97
- [0.8493374123092652] oranges
98
- [0.8415324469533297] blue
99
- */
100
- ```
1
+ # Vectra: a local vector database
2
+
3
+ [![npm version](https://img.shields.io/npm/v/vectra.svg)](https://www.npmjs.com/package/vectra)
4
+ [![Build](https://github.com/Stevenic/vectra/actions/workflows/ci.yml/badge.svg)](https://github.com/Stevenic/vectra/actions/workflows/ci.yml)
5
+ [![Coverage Status](https://coveralls.io/repos/github/Stevenic/vectra/badge.svg?branch=main)](https://coveralls.io/github/Stevenic/vectra?branch=main)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+ [![Agent Ready](https://img.shields.io/badge/Agent-Ready-blue.svg)](#agent-ready)
8
+
9
+ Vectra is a local, file-backed, in-memory vector database with an optional gRPC server for cross-language access. Each index is a folder on disk — queries use MongoDB-style metadata filtering and cosine similarity ranking, with sub-millisecond latency for small indexes.
10
+
11
+ ## What's New in Vectra 0.14
12
+
13
+ - **Browser & Electron support** `vectra/browser` entry point with `IndexedDBStorage` and `TransformersEmbeddings`
14
+ - **Local embeddings** — `LocalEmbeddings` and `TransformersEmbeddings` run HuggingFace models with no API key
15
+ - **Protocol Buffers** — opt-in binary format, 40-50% smaller files
16
+ - **gRPC server** — `vectra serve` exposes 19 RPCs for cross-language access
17
+ - **FolderWatcher** — auto-sync directories into a document index
18
+ - **Language bindings** — `vectra generate` scaffolds clients for 6 languages
19
+
20
+ See the [Changelog](https://stevenic.github.io/vectra/changelog) for breaking changes and migration details.
21
+
22
+ ## Install
23
+
24
+ ```sh
25
+ npm install vectra
26
+ ```
27
+
28
+ ## Quick Example
29
+
30
+ ```ts
31
+ import { LocalDocumentIndex, OpenAIEmbeddings } from 'vectra';
32
+
33
+ const docs = new LocalDocumentIndex({
34
+ folderPath: './my-index',
35
+ embeddings: new OpenAIEmbeddings({
36
+ apiKey: process.env.OPENAI_API_KEY!,
37
+ model: 'text-embedding-3-small',
38
+ maxTokens: 8000,
39
+ }),
40
+ });
41
+
42
+ if (!(await docs.isIndexCreated())) {
43
+ await docs.createIndex({ version: 1 });
44
+ }
45
+
46
+ await docs.upsertDocument('doc://readme', 'Vectra is a local vector database...', 'md');
47
+
48
+ const results = await docs.queryDocuments('What is Vectra?', { maxDocuments: 5 });
49
+ if (results.length > 0) {
50
+ const sections = await results[0].renderSections(2000, 1, true);
51
+ console.log(sections[0].text);
52
+ }
53
+ ```
54
+
55
+ ## Documentation
56
+
57
+ Full docs at **[stevenic.github.io/vectra](https://stevenic.github.io/vectra/)**:
58
+
59
+ | Guide | Description |
60
+ |-------|-------------|
61
+ | [Getting Started](https://stevenic.github.io/vectra/getting-started) | Install, requirements, quick start with both index types |
62
+ | [Core Concepts](https://stevenic.github.io/vectra/core-concepts) | Index types, metadata filtering, on-disk layout |
63
+ | [Embeddings Guide](https://stevenic.github.io/vectra/embeddings) | Choose and configure an embeddings provider |
64
+ | [Document Indexing](https://stevenic.github.io/vectra/documents) | Chunking, retrieval, hybrid search, FolderWatcher |
65
+ | [CLI Reference](https://stevenic.github.io/vectra/cli) | All CLI commands, flags, and provider config |
66
+ | [API Reference](https://stevenic.github.io/vectra/api-reference) | TypeScript API overview |
67
+ | [Best Practices](https://stevenic.github.io/vectra/best-practices) | Performance tuning, troubleshooting |
68
+ | [Storage](https://stevenic.github.io/vectra/storage) | Pluggable backends, browser/IndexedDB, serialization formats |
69
+ | [gRPC Server](https://stevenic.github.io/vectra/grpc) | Cross-language access and language bindings |
70
+ | [Changelog](https://stevenic.github.io/vectra/changelog) | Breaking changes and migration guides |
71
+ | [Tutorials](https://stevenic.github.io/vectra/tutorials/) | RAG pipeline, browser app, gRPC, custom storage, folder sync |
72
+ | [Samples](./samples/) | Runnable examples: quickstart, RAG, browser, SQLite storage, gRPC, folder watcher |
73
+
74
+ ## Agent Ready
75
+
76
+ Vectra ships an [`llms.txt`](https://github.com/Stevenic/vectra/blob/main/llms.txt) file that gives coding agents everything they need to integrate Vectra into your project. Point your agent at it and let it do the work:
77
+
78
+ ```
79
+ Read the llms.txt file at https://raw.githubusercontent.com/Stevenic/vectra/main/llms.txt
80
+ and then add Vectra support to this project. Use LocalDocumentIndex for document
81
+ storage and retrieval.
82
+ ```
83
+
84
+ The `llms.txt` file covers all exports, index types, CLI commands, gRPC bindings, and on-disk format — enough for any coding agent to scaffold a working integration without browsing docs.
85
+
86
+ ## License
87
+
88
+ MIT License. See [LICENSE](LICENSE).
89
+
90
+ ## Contributing
91
+
92
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. Please review our [Code of Conduct](CODE_OF_CONDUCT.md).
@@ -0,0 +1,75 @@
1
+ import { TextFetcher } from './types';
2
+ /**
3
+ * Configuration options for BrowserWebFetcher.
4
+ */
5
+ export interface BrowserWebFetcherConfig {
6
+ /**
7
+ * Optional. Whether to convert HTML to a simplified text/markdown format.
8
+ * @remarks
9
+ * Defaults to `true`.
10
+ */
11
+ htmlToMarkdown?: boolean;
12
+ /**
13
+ * Optional. Additional headers to include in requests.
14
+ */
15
+ headers?: Record<string, string>;
16
+ /**
17
+ * Optional. Request mode for fetch.
18
+ * @remarks
19
+ * Defaults to 'cors'.
20
+ */
21
+ mode?: RequestMode;
22
+ /**
23
+ * Optional. Credentials mode for fetch.
24
+ * @remarks
25
+ * Defaults to 'same-origin'.
26
+ */
27
+ credentials?: RequestCredentials;
28
+ }
29
+ /**
30
+ * Browser-compatible web fetcher using the native Fetch API.
31
+ * @remarks
32
+ * This fetcher works in browsers and Electron renderer processes.
33
+ * Uses DOMParser instead of cheerio for HTML parsing.
34
+ */
35
+ export declare class BrowserWebFetcher implements TextFetcher {
36
+ private readonly _config;
37
+ private static readonly ALLOWED_CONTENT_TYPES;
38
+ /**
39
+ * Creates a new `BrowserWebFetcher` instance.
40
+ * @param config Optional configuration options.
41
+ */
42
+ constructor(config?: BrowserWebFetcherConfig);
43
+ /**
44
+ * Fetches content from a URL and passes it to the document handler.
45
+ * @param uri URL to fetch.
46
+ * @param onDocument Callback to handle the fetched document.
47
+ * @returns Promise that resolves to the return value of onDocument.
48
+ */
49
+ fetch(uri: string, onDocument: (uri: string, text: string, docType?: string) => Promise<boolean>): Promise<boolean>;
50
+ /**
51
+ * Converts HTML to a simplified markdown-like format using DOMParser.
52
+ */
53
+ private htmlToMarkdown;
54
+ /**
55
+ * Recursively processes DOM nodes to extract text content.
56
+ */
57
+ private processNode;
58
+ /**
59
+ * Processes child nodes of an element.
60
+ */
61
+ private processChildren;
62
+ /**
63
+ * Gets clean text content from an element.
64
+ */
65
+ private getTextContent;
66
+ /**
67
+ * Processes a table element to markdown format.
68
+ */
69
+ private processTable;
70
+ /**
71
+ * Maps MIME type to document type.
72
+ */
73
+ private getDocTypeFromMime;
74
+ }
75
+ //# sourceMappingURL=BrowserWebFetcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserWebFetcher.d.ts","sourceRoot":"","sources":["../src/BrowserWebFetcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED;;;;;GAKG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAElD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAQ3C;IAEF;;;OAGG;gBACS,MAAM,CAAC,EAAE,uBAAuB;IAS5C;;;;;OAKG;IACG,KAAK,CACP,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC9E,OAAO,CAAC,OAAO,CAAC;IAiCnB;;OAEG;IACH,OAAO,CAAC,cAAc;IA2CtB;;OAEG;IACH,OAAO,CAAC,WAAW;IA2HnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,YAAY;IAwBpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAmB7B"}
@@ -0,0 +1,290 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BrowserWebFetcher = void 0;
13
+ /**
14
+ * Browser-compatible web fetcher using the native Fetch API.
15
+ * @remarks
16
+ * This fetcher works in browsers and Electron renderer processes.
17
+ * Uses DOMParser instead of cheerio for HTML parsing.
18
+ */
19
+ class BrowserWebFetcher {
20
+ /**
21
+ * Creates a new `BrowserWebFetcher` instance.
22
+ * @param config Optional configuration options.
23
+ */
24
+ constructor(config) {
25
+ this._config = Object.assign({ htmlToMarkdown: true, mode: 'cors', credentials: 'same-origin' }, config);
26
+ }
27
+ /**
28
+ * Fetches content from a URL and passes it to the document handler.
29
+ * @param uri URL to fetch.
30
+ * @param onDocument Callback to handle the fetched document.
31
+ * @returns Promise that resolves to the return value of onDocument.
32
+ */
33
+ fetch(uri, onDocument) {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ const response = yield fetch(uri, {
36
+ method: 'GET',
37
+ headers: this._config.headers,
38
+ mode: this._config.mode,
39
+ credentials: this._config.credentials
40
+ });
41
+ if (!response.ok) {
42
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
43
+ }
44
+ const contentType = response.headers.get('content-type') || 'text/plain';
45
+ const mimeType = contentType.split(';')[0].trim().toLowerCase();
46
+ // Validate content type
47
+ if (!BrowserWebFetcher.ALLOWED_CONTENT_TYPES.some(allowed => mimeType.includes(allowed))) {
48
+ throw new Error(`Unsupported content type: ${contentType}`);
49
+ }
50
+ const text = yield response.text();
51
+ // Handle HTML content
52
+ if (mimeType.includes('text/html') && this._config.htmlToMarkdown) {
53
+ const markdown = this.htmlToMarkdown(text, uri);
54
+ return onDocument(uri, markdown, 'md');
55
+ }
56
+ // Determine doc type from content type
57
+ const docType = this.getDocTypeFromMime(mimeType);
58
+ return onDocument(uri, text, docType);
59
+ });
60
+ }
61
+ /**
62
+ * Converts HTML to a simplified markdown-like format using DOMParser.
63
+ */
64
+ htmlToMarkdown(html, baseUrl) {
65
+ const parser = new DOMParser();
66
+ const doc = parser.parseFromString(html, 'text/html');
67
+ // Remove unwanted elements
68
+ const removeSelectors = ['script', 'style', 'noscript', 'iframe', 'svg', 'canvas'];
69
+ removeSelectors.forEach(selector => {
70
+ doc.querySelectorAll(selector).forEach(el => el.remove());
71
+ });
72
+ // Convert relative URLs to absolute
73
+ doc.querySelectorAll('a[href]').forEach(el => {
74
+ const href = el.getAttribute('href');
75
+ if (href && !href.startsWith('http') && !href.startsWith('//') && !href.startsWith('#')) {
76
+ try {
77
+ el.setAttribute('href', new URL(href, baseUrl).toString());
78
+ }
79
+ catch (_a) {
80
+ // Leave as-is if URL parsing fails
81
+ }
82
+ }
83
+ });
84
+ // Process the body
85
+ const body = doc.body;
86
+ if (!body) {
87
+ return html;
88
+ }
89
+ const lines = [];
90
+ this.processNode(body, lines);
91
+ // Clean up the result
92
+ let result = lines.join('\n');
93
+ // Remove excessive newlines
94
+ result = result.replace(/\n{3,}/g, '\n\n');
95
+ // Trim leading/trailing whitespace
96
+ result = result.trim();
97
+ return result;
98
+ }
99
+ /**
100
+ * Recursively processes DOM nodes to extract text content.
101
+ */
102
+ processNode(node, lines) {
103
+ var _a;
104
+ if (node.nodeType === Node.TEXT_NODE) {
105
+ const text = (_a = node.textContent) === null || _a === void 0 ? void 0 : _a.trim();
106
+ if (text) {
107
+ lines.push(text);
108
+ }
109
+ return;
110
+ }
111
+ if (node.nodeType !== Node.ELEMENT_NODE) {
112
+ return;
113
+ }
114
+ const el = node;
115
+ const tagName = el.tagName.toLowerCase();
116
+ // Handle specific elements
117
+ switch (tagName) {
118
+ case 'h1':
119
+ lines.push('');
120
+ lines.push(`# ${this.getTextContent(el)}`);
121
+ lines.push('');
122
+ return;
123
+ case 'h2':
124
+ lines.push('');
125
+ lines.push(`## ${this.getTextContent(el)}`);
126
+ lines.push('');
127
+ return;
128
+ case 'h3':
129
+ lines.push('');
130
+ lines.push(`### ${this.getTextContent(el)}`);
131
+ lines.push('');
132
+ return;
133
+ case 'h4':
134
+ lines.push('');
135
+ lines.push(`#### ${this.getTextContent(el)}`);
136
+ lines.push('');
137
+ return;
138
+ case 'h5':
139
+ lines.push('');
140
+ lines.push(`##### ${this.getTextContent(el)}`);
141
+ lines.push('');
142
+ return;
143
+ case 'h6':
144
+ lines.push('');
145
+ lines.push(`###### ${this.getTextContent(el)}`);
146
+ lines.push('');
147
+ return;
148
+ case 'p':
149
+ lines.push('');
150
+ this.processChildren(el, lines);
151
+ lines.push('');
152
+ return;
153
+ case 'br':
154
+ lines.push('');
155
+ return;
156
+ case 'hr':
157
+ lines.push('');
158
+ lines.push('---');
159
+ lines.push('');
160
+ return;
161
+ case 'a':
162
+ const href = el.getAttribute('href');
163
+ const text = this.getTextContent(el);
164
+ if (href && text) {
165
+ lines.push(`[${text}](${href})`);
166
+ }
167
+ else if (text) {
168
+ lines.push(text);
169
+ }
170
+ return;
171
+ case 'strong':
172
+ case 'b':
173
+ lines.push(`**${this.getTextContent(el)}**`);
174
+ return;
175
+ case 'em':
176
+ case 'i':
177
+ lines.push(`*${this.getTextContent(el)}*`);
178
+ return;
179
+ case 'code':
180
+ lines.push(`\`${this.getTextContent(el)}\``);
181
+ return;
182
+ case 'pre':
183
+ lines.push('');
184
+ lines.push('```');
185
+ lines.push(this.getTextContent(el));
186
+ lines.push('```');
187
+ lines.push('');
188
+ return;
189
+ case 'blockquote':
190
+ lines.push('');
191
+ const quoteText = this.getTextContent(el);
192
+ quoteText.split('\n').forEach(line => {
193
+ lines.push(`> ${line}`);
194
+ });
195
+ lines.push('');
196
+ return;
197
+ case 'ul':
198
+ case 'ol':
199
+ lines.push('');
200
+ el.querySelectorAll(':scope > li').forEach((li, index) => {
201
+ const prefix = tagName === 'ol' ? `${index + 1}.` : '-';
202
+ lines.push(`${prefix} ${this.getTextContent(li)}`);
203
+ });
204
+ lines.push('');
205
+ return;
206
+ case 'table':
207
+ lines.push('');
208
+ this.processTable(el, lines);
209
+ lines.push('');
210
+ return;
211
+ case 'img':
212
+ const alt = el.getAttribute('alt') || 'image';
213
+ const src = el.getAttribute('src');
214
+ if (src) {
215
+ lines.push(`![${alt}](${src})`);
216
+ }
217
+ return;
218
+ default:
219
+ // For other elements, process children
220
+ this.processChildren(el, lines);
221
+ }
222
+ }
223
+ /**
224
+ * Processes child nodes of an element.
225
+ */
226
+ processChildren(el, lines) {
227
+ el.childNodes.forEach(child => {
228
+ this.processNode(child, lines);
229
+ });
230
+ }
231
+ /**
232
+ * Gets clean text content from an element.
233
+ */
234
+ getTextContent(el) {
235
+ return (el.textContent || '').replace(/\s+/g, ' ').trim();
236
+ }
237
+ /**
238
+ * Processes a table element to markdown format.
239
+ */
240
+ processTable(table, lines) {
241
+ const rows = table.querySelectorAll('tr');
242
+ let isFirstRow = true;
243
+ rows.forEach(row => {
244
+ const cells = row.querySelectorAll('th, td');
245
+ const cellContents = [];
246
+ cells.forEach(cell => {
247
+ cellContents.push(this.getTextContent(cell));
248
+ });
249
+ if (cellContents.length > 0) {
250
+ lines.push(`| ${cellContents.join(' | ')} |`);
251
+ // Add separator after header row
252
+ if (isFirstRow) {
253
+ lines.push(`| ${cellContents.map(() => '---').join(' | ')} |`);
254
+ isFirstRow = false;
255
+ }
256
+ }
257
+ });
258
+ }
259
+ /**
260
+ * Maps MIME type to document type.
261
+ */
262
+ getDocTypeFromMime(mimeType) {
263
+ const mimeMap = {
264
+ 'text/html': 'html',
265
+ 'text/plain': undefined,
266
+ 'text/markdown': 'md',
267
+ 'text/xml': 'xml',
268
+ 'application/json': 'json',
269
+ 'application/xml': 'xml',
270
+ 'application/javascript': 'js'
271
+ };
272
+ for (const [mime, docType] of Object.entries(mimeMap)) {
273
+ if (mimeType.includes(mime)) {
274
+ return docType;
275
+ }
276
+ }
277
+ return undefined;
278
+ }
279
+ }
280
+ exports.BrowserWebFetcher = BrowserWebFetcher;
281
+ BrowserWebFetcher.ALLOWED_CONTENT_TYPES = [
282
+ 'text/html',
283
+ 'application/json',
284
+ 'application/xml',
285
+ 'application/javascript',
286
+ 'text/plain',
287
+ 'text/markdown',
288
+ 'text/xml'
289
+ ];
290
+ //# sourceMappingURL=BrowserWebFetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserWebFetcher.js","sourceRoot":"","sources":["../src/BrowserWebFetcher.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FileFetcher.d.ts","sourceRoot":"","sources":["../src/FileFetcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAItC,qBAAa,WAAY,YAAW,WAAW;IAC9B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAyB/I"}
1
+ {"version":3,"file":"FileFetcher.d.ts","sourceRoot":"","sources":["../src/FileFetcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAItC,qBAAa,WAAY,YAAW,WAAW;IAChC,KAAK,CAChB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,GACxF,OAAO,CAAC,OAAO,CAAC;CAkCpB"}
@@ -41,36 +41,46 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
41
41
  step((generator = generator.apply(thisArg, _arguments || [])).next());
42
42
  });
43
43
  };
44
+ var __importDefault = (this && this.__importDefault) || function (mod) {
45
+ return (mod && mod.__esModule) ? mod : { "default": mod };
46
+ };
44
47
  Object.defineProperty(exports, "__esModule", { value: true });
45
48
  exports.FileFetcher = void 0;
46
- const fs = __importStar(require("fs/promises"));
47
- const path = __importStar(require("path"));
49
+ const node_fs_1 = __importDefault(require("node:fs"));
50
+ const path = __importStar(require("node:path"));
48
51
  class FileFetcher {
49
52
  fetch(uri, onDocument) {
50
53
  return __awaiter(this, void 0, void 0, function* () {
51
54
  // Does path exist and is it a directory?
52
- let isDirectory;
55
+ let stat;
53
56
  try {
54
- const stat = yield fs.stat(uri);
55
- isDirectory = stat.isDirectory();
57
+ stat = yield node_fs_1.default.promises.stat(uri);
56
58
  }
57
59
  catch (_a) {
60
+ // Non-existent path: treat as no-op success
58
61
  return true;
59
62
  }
60
- // If directory, read all files and recurse
61
- if (isDirectory) {
62
- const files = yield fs.readdir(uri);
63
- for (const file of files) {
63
+ if (stat.isDirectory()) {
64
+ // Read directory and recurse. If any child returns false, aggregate to false.
65
+ const entries = yield node_fs_1.default.promises.readdir(uri);
66
+ let allOk = true;
67
+ for (const file of entries) {
64
68
  const filePath = path.join(uri, file);
65
- yield this.fetch(filePath, onDocument);
69
+ const ok = yield this.fetch(filePath, onDocument);
70
+ if (!ok) {
71
+ allOk = false;
72
+ }
66
73
  }
67
- return true;
74
+ return allOk;
68
75
  }
69
76
  else {
70
- // Read file and call onDocument
71
- const text = yield fs.readFile(uri, 'utf8');
72
- const parts = uri.split('.');
73
- return yield onDocument(uri, text, parts.length > 0 ? parts[parts.length - 1].toLowerCase() : undefined);
77
+ // Read file and invoke onDocument
78
+ const text = yield node_fs_1.default.promises.readFile(uri, 'utf8');
79
+ const ext = path.extname(uri);
80
+ const docType = ext && ext.length > 1
81
+ ? ext.slice(1).toLowerCase()
82
+ : path.basename(uri).toLowerCase();
83
+ return yield onDocument(uri, text, docType);
74
84
  }
75
85
  });
76
86
  }