mindoodb 0.0.24 → 0.0.32

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 (340) hide show
  1. package/README-server.md +9 -1
  2. package/README.md +5 -3
  3. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts +1 -1
  4. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts.map +1 -1
  5. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js +24 -5
  6. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js.map +1 -1
  7. package/dist/appendonlystores/network/HttpTransport.d.ts +14 -2
  8. package/dist/appendonlystores/network/HttpTransport.d.ts.map +1 -1
  9. package/dist/appendonlystores/network/HttpTransport.js +124 -27
  10. package/dist/appendonlystores/network/HttpTransport.js.map +1 -1
  11. package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts +159 -4
  12. package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts.map +1 -1
  13. package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js +334 -25
  14. package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js.map +1 -1
  15. package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts +9 -0
  16. package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts.map +1 -1
  17. package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js +77 -5
  18. package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js.map +1 -1
  19. package/dist/browser/index.mjs +103 -0
  20. package/dist/core/BaseMindooDB.d.ts +662 -4
  21. package/dist/core/BaseMindooDB.d.ts.map +1 -1
  22. package/dist/core/BaseMindooDB.js +2769 -144
  23. package/dist/core/BaseMindooDB.js.map +1 -1
  24. package/dist/core/BaseMindooTenant.d.ts +192 -1
  25. package/dist/core/BaseMindooTenant.d.ts.map +1 -1
  26. package/dist/core/BaseMindooTenant.js +633 -88
  27. package/dist/core/BaseMindooTenant.js.map +1 -1
  28. package/dist/core/BaseMindooTenantDirectory.d.ts +770 -10
  29. package/dist/core/BaseMindooTenantDirectory.d.ts.map +1 -1
  30. package/dist/core/BaseMindooTenantDirectory.js +2715 -292
  31. package/dist/core/BaseMindooTenantDirectory.js.map +1 -1
  32. package/dist/core/BaseMindooTenantFactory.d.ts +2 -0
  33. package/dist/core/BaseMindooTenantFactory.d.ts.map +1 -1
  34. package/dist/core/BaseMindooTenantFactory.js +20 -0
  35. package/dist/core/BaseMindooTenantFactory.js.map +1 -1
  36. package/dist/core/accesscontrol/AccessDeniedError.d.ts +22 -0
  37. package/dist/core/accesscontrol/AccessDeniedError.d.ts.map +1 -0
  38. package/dist/core/accesscontrol/AccessDeniedError.js +28 -0
  39. package/dist/core/accesscontrol/AccessDeniedError.js.map +1 -0
  40. package/dist/core/accesscontrol/DirectoryStateNode.d.ts +220 -0
  41. package/dist/core/accesscontrol/DirectoryStateNode.d.ts.map +1 -0
  42. package/dist/core/accesscontrol/DirectoryStateNode.js +297 -0
  43. package/dist/core/accesscontrol/DirectoryStateNode.js.map +1 -0
  44. package/dist/core/accesscontrol/DirectoryTimeTravelIndex.d.ts +118 -0
  45. package/dist/core/accesscontrol/DirectoryTimeTravelIndex.d.ts.map +1 -0
  46. package/dist/core/accesscontrol/DirectoryTimeTravelIndex.js +173 -0
  47. package/dist/core/accesscontrol/DirectoryTimeTravelIndex.js.map +1 -0
  48. package/dist/core/accesscontrol/directoryProjection.d.ts +26 -0
  49. package/dist/core/accesscontrol/directoryProjection.d.ts.map +1 -0
  50. package/dist/core/accesscontrol/directoryProjection.js +174 -0
  51. package/dist/core/accesscontrol/directoryProjection.js.map +1 -0
  52. package/dist/core/accesscontrol/evaluate.d.ts +77 -0
  53. package/dist/core/accesscontrol/evaluate.d.ts.map +1 -0
  54. package/dist/core/accesscontrol/evaluate.js +206 -0
  55. package/dist/core/accesscontrol/evaluate.js.map +1 -0
  56. package/dist/core/accesscontrol/grantKeys.d.ts +113 -0
  57. package/dist/core/accesscontrol/grantKeys.d.ts.map +1 -0
  58. package/dist/core/accesscontrol/grantKeys.js +302 -0
  59. package/dist/core/accesscontrol/grantKeys.js.map +1 -0
  60. package/dist/core/accesscontrol/keyBagReconciler.d.ts +22 -0
  61. package/dist/core/accesscontrol/keyBagReconciler.d.ts.map +1 -0
  62. package/dist/core/accesscontrol/keyBagReconciler.js +3 -0
  63. package/dist/core/accesscontrol/keyBagReconciler.js.map +1 -0
  64. package/dist/core/accesscontrol/materializationGuard.d.ts +89 -0
  65. package/dist/core/accesscontrol/materializationGuard.d.ts.map +1 -0
  66. package/dist/core/accesscontrol/materializationGuard.js +69 -0
  67. package/dist/core/accesscontrol/materializationGuard.js.map +1 -0
  68. package/dist/core/accesscontrol/quarantine.d.ts +65 -0
  69. package/dist/core/accesscontrol/quarantine.d.ts.map +1 -0
  70. package/dist/core/accesscontrol/quarantine.js +79 -0
  71. package/dist/core/accesscontrol/quarantine.js.map +1 -0
  72. package/dist/core/accesscontrol/receiptValidation.d.ts +113 -0
  73. package/dist/core/accesscontrol/receiptValidation.d.ts.map +1 -0
  74. package/dist/core/accesscontrol/receiptValidation.js +142 -0
  75. package/dist/core/accesscontrol/receiptValidation.js.map +1 -0
  76. package/dist/core/accesscontrol/timestamp/Ed25519WitnessProvider.d.ts +31 -0
  77. package/dist/core/accesscontrol/timestamp/Ed25519WitnessProvider.d.ts.map +1 -0
  78. package/dist/core/accesscontrol/timestamp/Ed25519WitnessProvider.js +66 -0
  79. package/dist/core/accesscontrol/timestamp/Ed25519WitnessProvider.js.map +1 -0
  80. package/dist/core/accesscontrol/timestamp/TimestampProvider.d.ts +79 -0
  81. package/dist/core/accesscontrol/timestamp/TimestampProvider.d.ts.map +1 -0
  82. package/dist/core/accesscontrol/timestamp/TimestampProvider.js +22 -0
  83. package/dist/core/accesscontrol/timestamp/TimestampProvider.js.map +1 -0
  84. package/dist/core/accesscontrol/types.d.ts +825 -0
  85. package/dist/core/accesscontrol/types.d.ts.map +1 -0
  86. package/dist/core/accesscontrol/types.js +534 -0
  87. package/dist/core/accesscontrol/types.js.map +1 -0
  88. package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts +9 -0
  89. package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts.map +1 -1
  90. package/dist/core/appendonlystores/InMemoryContentAddressedStore.js +54 -0
  91. package/dist/core/appendonlystores/InMemoryContentAddressedStore.js.map +1 -1
  92. package/dist/core/appendonlystores/network/AuthenticationService.d.ts +38 -2
  93. package/dist/core/appendonlystores/network/AuthenticationService.d.ts.map +1 -1
  94. package/dist/core/appendonlystores/network/AuthenticationService.js +199 -26
  95. package/dist/core/appendonlystores/network/AuthenticationService.js.map +1 -1
  96. package/dist/core/appendonlystores/network/NetworkTransport.d.ts +17 -3
  97. package/dist/core/appendonlystores/network/NetworkTransport.d.ts.map +1 -1
  98. package/dist/core/appendonlystores/network/types.d.ts +58 -4
  99. package/dist/core/appendonlystores/network/types.d.ts.map +1 -1
  100. package/dist/core/appendonlystores/network/types.js +4 -0
  101. package/dist/core/appendonlystores/network/types.js.map +1 -1
  102. package/dist/core/appendonlystores/scanUtils.d.ts +27 -0
  103. package/dist/core/appendonlystores/scanUtils.d.ts.map +1 -0
  104. package/dist/core/appendonlystores/scanUtils.js +87 -0
  105. package/dist/core/appendonlystores/scanUtils.js.map +1 -0
  106. package/dist/core/appendonlystores/types.d.ts +23 -2
  107. package/dist/core/appendonlystores/types.d.ts.map +1 -1
  108. package/dist/core/cache/CacheManager.d.ts +13 -3
  109. package/dist/core/cache/CacheManager.d.ts.map +1 -1
  110. package/dist/core/cache/CacheManager.js +7 -4
  111. package/dist/core/cache/CacheManager.js.map +1 -1
  112. package/dist/core/crypto/EntrySignature.d.ts +137 -0
  113. package/dist/core/crypto/EntrySignature.d.ts.map +1 -0
  114. package/dist/core/crypto/EntrySignature.js +210 -0
  115. package/dist/core/crypto/EntrySignature.js.map +1 -0
  116. package/dist/core/crypto/MindooDocSigner.d.ts.map +1 -1
  117. package/dist/core/crypto/MindooDocSigner.js +6 -2
  118. package/dist/core/crypto/MindooDocSigner.js.map +1 -1
  119. package/dist/core/crypto/WitnessReceipt.d.ts +137 -0
  120. package/dist/core/crypto/WitnessReceipt.d.ts.map +1 -0
  121. package/dist/core/crypto/WitnessReceipt.js +182 -0
  122. package/dist/core/crypto/WitnessReceipt.js.map +1 -0
  123. package/dist/core/crypto/encryptedFields.d.ts +27 -0
  124. package/dist/core/crypto/encryptedFields.d.ts.map +1 -0
  125. package/dist/core/crypto/encryptedFields.js +58 -0
  126. package/dist/core/crypto/encryptedFields.js.map +1 -0
  127. package/dist/core/crypto/pbkdf2Iterations.d.ts +12 -0
  128. package/dist/core/crypto/pbkdf2Iterations.d.ts.map +1 -1
  129. package/dist/core/crypto/pbkdf2Iterations.js +23 -0
  130. package/dist/core/crypto/pbkdf2Iterations.js.map +1 -1
  131. package/dist/core/crypto/privateKeyEncryption.d.ts.map +1 -1
  132. package/dist/core/crypto/privateKeyEncryption.js +3 -1
  133. package/dist/core/crypto/privateKeyEncryption.js.map +1 -1
  134. package/dist/core/databaseIdValidation.d.ts +1 -1
  135. package/dist/core/databaseIdValidation.d.ts.map +1 -1
  136. package/dist/core/databaseIdValidation.js +4 -4
  137. package/dist/core/databaseIdValidation.js.map +1 -1
  138. package/dist/core/errors.d.ts +26 -0
  139. package/dist/core/errors.d.ts.map +1 -1
  140. package/dist/core/errors.js +42 -1
  141. package/dist/core/errors.js.map +1 -1
  142. package/dist/core/expressions/builder.d.ts +102 -0
  143. package/dist/core/expressions/builder.d.ts.map +1 -0
  144. package/dist/core/expressions/builder.js +249 -0
  145. package/dist/core/expressions/builder.js.map +1 -0
  146. package/dist/core/expressions/evaluateExpression.d.ts +78 -0
  147. package/dist/core/expressions/evaluateExpression.d.ts.map +1 -0
  148. package/dist/core/expressions/evaluateExpression.js +386 -0
  149. package/dist/core/expressions/evaluateExpression.js.map +1 -0
  150. package/dist/core/expressions/formulaSource.d.ts +24 -0
  151. package/dist/core/expressions/formulaSource.d.ts.map +1 -0
  152. package/dist/core/expressions/formulaSource.js +765 -0
  153. package/dist/core/expressions/formulaSource.js.map +1 -0
  154. package/dist/core/expressions/index.d.ts +8 -0
  155. package/dist/core/expressions/index.d.ts.map +1 -0
  156. package/dist/core/expressions/index.js +46 -0
  157. package/dist/core/expressions/index.js.map +1 -0
  158. package/dist/core/expressions/metadata.d.ts +23 -0
  159. package/dist/core/expressions/metadata.d.ts.map +1 -0
  160. package/dist/core/expressions/metadata.js +191 -0
  161. package/dist/core/expressions/metadata.js.map +1 -0
  162. package/dist/core/expressions/types.d.ts +164 -0
  163. package/dist/core/expressions/types.d.ts.map +1 -0
  164. package/dist/core/expressions/types.js +3 -0
  165. package/dist/core/expressions/types.js.map +1 -0
  166. package/dist/core/extraction/types.d.ts +47 -0
  167. package/dist/core/extraction/types.d.ts.map +1 -0
  168. package/dist/core/extraction/types.js +42 -0
  169. package/dist/core/extraction/types.js.map +1 -0
  170. package/dist/core/index.d.ts +13 -3
  171. package/dist/core/index.d.ts.map +1 -1
  172. package/dist/core/index.js +113 -4
  173. package/dist/core/index.js.map +1 -1
  174. package/dist/core/indexing/createViewDataProvider.d.ts +84 -0
  175. package/dist/core/indexing/createViewDataProvider.d.ts.map +1 -0
  176. package/dist/core/indexing/createViewDataProvider.js +139 -0
  177. package/dist/core/indexing/createViewDataProvider.js.map +1 -0
  178. package/dist/core/indexing/fulltext/DocumentFullTextIndex.d.ts +180 -0
  179. package/dist/core/indexing/fulltext/DocumentFullTextIndex.d.ts.map +1 -0
  180. package/dist/core/indexing/fulltext/DocumentFullTextIndex.js +548 -0
  181. package/dist/core/indexing/fulltext/DocumentFullTextIndex.js.map +1 -0
  182. package/dist/core/indexing/fulltext/SearchEngineAdapter.d.ts +69 -0
  183. package/dist/core/indexing/fulltext/SearchEngineAdapter.d.ts.map +1 -0
  184. package/dist/core/indexing/fulltext/SearchEngineAdapter.js +183 -0
  185. package/dist/core/indexing/fulltext/SearchEngineAdapter.js.map +1 -0
  186. package/dist/core/indexing/fulltext/extractFulltextText.d.ts +34 -0
  187. package/dist/core/indexing/fulltext/extractFulltextText.d.ts.map +1 -0
  188. package/dist/core/indexing/fulltext/extractFulltextText.js +129 -0
  189. package/dist/core/indexing/fulltext/extractFulltextText.js.map +1 -0
  190. package/dist/core/indexing/fulltext/index.d.ts +5 -0
  191. package/dist/core/indexing/fulltext/index.d.ts.map +1 -0
  192. package/dist/core/indexing/fulltext/index.js +20 -0
  193. package/dist/core/indexing/fulltext/index.js.map +1 -0
  194. package/dist/core/indexing/fulltext/types.d.ts +168 -0
  195. package/dist/core/indexing/fulltext/types.d.ts.map +1 -0
  196. package/dist/core/indexing/fulltext/types.js +89 -0
  197. package/dist/core/indexing/fulltext/types.js.map +1 -0
  198. package/dist/core/indexing/summary/DocumentSummaryStore.d.ts +137 -0
  199. package/dist/core/indexing/summary/DocumentSummaryStore.d.ts.map +1 -0
  200. package/dist/core/indexing/summary/DocumentSummaryStore.js +438 -0
  201. package/dist/core/indexing/summary/DocumentSummaryStore.js.map +1 -0
  202. package/dist/core/indexing/summary/SummaryVirtualViewDataProvider.d.ts +72 -0
  203. package/dist/core/indexing/summary/SummaryVirtualViewDataProvider.d.ts.map +1 -0
  204. package/dist/core/indexing/summary/SummaryVirtualViewDataProvider.js +221 -0
  205. package/dist/core/indexing/summary/SummaryVirtualViewDataProvider.js.map +1 -0
  206. package/dist/core/indexing/summary/extractSummaryFields.d.ts +75 -0
  207. package/dist/core/indexing/summary/extractSummaryFields.d.ts.map +1 -0
  208. package/dist/core/indexing/summary/extractSummaryFields.js +266 -0
  209. package/dist/core/indexing/summary/extractSummaryFields.js.map +1 -0
  210. package/dist/core/indexing/summary/index.d.ts +5 -0
  211. package/dist/core/indexing/summary/index.d.ts.map +1 -0
  212. package/dist/core/indexing/summary/index.js +23 -0
  213. package/dist/core/indexing/summary/index.js.map +1 -0
  214. package/dist/core/indexing/summary/types.d.ts +119 -0
  215. package/dist/core/indexing/summary/types.d.ts.map +1 -0
  216. package/dist/core/indexing/summary/types.js +81 -0
  217. package/dist/core/indexing/summary/types.js.map +1 -0
  218. package/dist/core/indexing/virtualviews/IVirtualViewDataProvider.d.ts +47 -1
  219. package/dist/core/indexing/virtualviews/IVirtualViewDataProvider.d.ts.map +1 -1
  220. package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts +24 -8
  221. package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts.map +1 -1
  222. package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js +96 -41
  223. package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js.map +1 -1
  224. package/dist/core/indexing/virtualviews/ViewEntrySortKey.d.ts +2 -0
  225. package/dist/core/indexing/virtualviews/ViewEntrySortKey.d.ts.map +1 -1
  226. package/dist/core/indexing/virtualviews/ViewEntrySortKey.js +8 -3
  227. package/dist/core/indexing/virtualviews/ViewEntrySortKey.js.map +1 -1
  228. package/dist/core/indexing/virtualviews/VirtualView.d.ts +111 -5
  229. package/dist/core/indexing/virtualviews/VirtualView.d.ts.map +1 -1
  230. package/dist/core/indexing/virtualviews/VirtualView.js +266 -75
  231. package/dist/core/indexing/virtualviews/VirtualView.js.map +1 -1
  232. package/dist/core/indexing/virtualviews/VirtualViewColumn.d.ts +12 -0
  233. package/dist/core/indexing/virtualviews/VirtualViewColumn.d.ts.map +1 -1
  234. package/dist/core/indexing/virtualviews/VirtualViewColumn.js +1 -0
  235. package/dist/core/indexing/virtualviews/VirtualViewColumn.js.map +1 -1
  236. package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts +12 -0
  237. package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts.map +1 -1
  238. package/dist/core/indexing/virtualviews/VirtualViewEntryData.js +66 -5
  239. package/dist/core/indexing/virtualviews/VirtualViewEntryData.js.map +1 -1
  240. package/dist/core/indexing/virtualviews/VirtualViewFactory.d.ts +50 -6
  241. package/dist/core/indexing/virtualviews/VirtualViewFactory.d.ts.map +1 -1
  242. package/dist/core/indexing/virtualviews/VirtualViewFactory.js +54 -12
  243. package/dist/core/indexing/virtualviews/VirtualViewFactory.js.map +1 -1
  244. package/dist/core/indexing/virtualviews/index.d.ts +3 -3
  245. package/dist/core/indexing/virtualviews/index.d.ts.map +1 -1
  246. package/dist/core/indexing/virtualviews/index.js.map +1 -1
  247. package/dist/core/indexing/virtualviews/types.d.ts +6 -0
  248. package/dist/core/indexing/virtualviews/types.d.ts.map +1 -1
  249. package/dist/core/indexing/virtualviews/types.js +11 -3
  250. package/dist/core/indexing/virtualviews/types.js.map +1 -1
  251. package/dist/core/keys/KeyBag.d.ts +25 -0
  252. package/dist/core/keys/KeyBag.d.ts.map +1 -1
  253. package/dist/core/keys/KeyBag.js +37 -1
  254. package/dist/core/keys/KeyBag.js.map +1 -1
  255. package/dist/core/query/executeQuery.d.ts +18 -0
  256. package/dist/core/query/executeQuery.d.ts.map +1 -0
  257. package/dist/core/query/executeQuery.js +313 -0
  258. package/dist/core/query/executeQuery.js.map +1 -0
  259. package/dist/core/query/index.d.ts +5 -0
  260. package/dist/core/query/index.d.ts.map +1 -0
  261. package/dist/core/query/index.js +14 -0
  262. package/dist/core/query/index.js.map +1 -0
  263. package/dist/core/query/queryLive.d.ts +27 -0
  264. package/dist/core/query/queryLive.d.ts.map +1 -0
  265. package/dist/core/query/queryLive.js +104 -0
  266. package/dist/core/query/queryLive.js.map +1 -0
  267. package/dist/core/query/queryView.d.ts +156 -0
  268. package/dist/core/query/queryView.d.ts.map +1 -0
  269. package/dist/core/query/queryView.js +266 -0
  270. package/dist/core/query/queryView.js.map +1 -0
  271. package/dist/core/query/types.d.ts +121 -0
  272. package/dist/core/query/types.d.ts.map +1 -0
  273. package/dist/core/query/types.js +18 -0
  274. package/dist/core/query/types.js.map +1 -0
  275. package/dist/core/storeEntryTime.d.ts +57 -0
  276. package/dist/core/storeEntryTime.d.ts.map +1 -0
  277. package/dist/core/storeEntryTime.js +72 -0
  278. package/dist/core/storeEntryTime.js.map +1 -0
  279. package/dist/core/types.d.ts +1371 -34
  280. package/dist/core/types.d.ts.map +1 -1
  281. package/dist/core/types.js +13 -1
  282. package/dist/core/types.js.map +1 -1
  283. package/dist/core/uri/MindooURI.d.ts +53 -1
  284. package/dist/core/uri/MindooURI.d.ts.map +1 -1
  285. package/dist/core/uri/MindooURI.js +135 -0
  286. package/dist/core/uri/MindooURI.js.map +1 -1
  287. package/dist/core/utils/urlSafety.d.ts +46 -0
  288. package/dist/core/utils/urlSafety.d.ts.map +1 -0
  289. package/dist/core/utils/urlSafety.js +144 -0
  290. package/dist/core/utils/urlSafety.js.map +1 -0
  291. package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.d.ts +14 -0
  292. package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.d.ts.map +1 -1
  293. package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js +95 -4
  294. package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js.map +1 -1
  295. package/dist/node/server/CapabilityMatcher.d.ts +10 -0
  296. package/dist/node/server/CapabilityMatcher.d.ts.map +1 -1
  297. package/dist/node/server/CapabilityMatcher.js +14 -2
  298. package/dist/node/server/CapabilityMatcher.js.map +1 -1
  299. package/dist/node/server/MindooDBServer.d.ts.map +1 -1
  300. package/dist/node/server/MindooDBServer.js +117 -8
  301. package/dist/node/server/MindooDBServer.js.map +1 -1
  302. package/dist/node/server/PurgedDocRegistry.d.ts +32 -0
  303. package/dist/node/server/PurgedDocRegistry.d.ts.map +1 -0
  304. package/dist/node/server/PurgedDocRegistry.js +94 -0
  305. package/dist/node/server/PurgedDocRegistry.js.map +1 -0
  306. package/dist/node/server/ServerSync.d.ts.map +1 -1
  307. package/dist/node/server/ServerSync.js +5 -2
  308. package/dist/node/server/ServerSync.js.map +1 -1
  309. package/dist/node/server/SystemAdminAuth.d.ts +10 -0
  310. package/dist/node/server/SystemAdminAuth.d.ts.map +1 -1
  311. package/dist/node/server/SystemAdminAuth.js +25 -0
  312. package/dist/node/server/SystemAdminAuth.js.map +1 -1
  313. package/dist/node/server/TenantManager.d.ts +95 -1
  314. package/dist/node/server/TenantManager.d.ts.map +1 -1
  315. package/dist/node/server/TenantManager.js +382 -15
  316. package/dist/node/server/TenantManager.js.map +1 -1
  317. package/dist/node/server/config.d.ts.map +1 -1
  318. package/dist/node/server/config.js +5 -1
  319. package/dist/node/server/config.js.map +1 -1
  320. package/dist/node/server/types.d.ts +29 -3
  321. package/dist/node/server/types.d.ts.map +1 -1
  322. package/dist/node/server/types.js +12 -0
  323. package/dist/node/server/types.js.map +1 -1
  324. package/dist/node/server/validation.d.ts +6 -0
  325. package/dist/node/server/validation.d.ts.map +1 -1
  326. package/dist/node/server/validation.js +7 -1
  327. package/dist/node/server/validation.js.map +1 -1
  328. package/package.json +4 -3
  329. package/dist/appendonlystores/BasicOnDiskContentAddressedStoreFactory.d.ts +0 -8
  330. package/dist/appendonlystores/BasicOnDiskContentAddressedStoreFactory.d.ts.map +0 -1
  331. package/dist/appendonlystores/BasicOnDiskContentAddressedStoreFactory.js +0 -16
  332. package/dist/appendonlystores/BasicOnDiskContentAddressedStoreFactory.js.map +0 -1
  333. package/dist/core/appendonlystores/BasicOnDiskContentAddressedStore.d.ts +0 -68
  334. package/dist/core/appendonlystores/BasicOnDiskContentAddressedStore.d.ts.map +0 -1
  335. package/dist/core/appendonlystores/BasicOnDiskContentAddressedStore.js +0 -659
  336. package/dist/core/appendonlystores/BasicOnDiskContentAddressedStore.js.map +0 -1
  337. package/dist/node/attachments/writeAttachmentToFile.d.ts +0 -15
  338. package/dist/node/attachments/writeAttachmentToFile.d.ts.map +0 -1
  339. package/dist/node/attachments/writeAttachmentToFile.js +0 -73
  340. package/dist/node/attachments/writeAttachmentToFile.js.map +0 -1
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MiniSearchAdapter = void 0;
7
+ exports.createTokenizer = createTokenizer;
8
+ const minisearch_1 = __importDefault(require("minisearch"));
9
+ const types_1 = require("./types");
10
+ /**
11
+ * Build the tokenizer for a language: `Intl.Segmenter` word segmentation
12
+ * where available (correct for CJK and other scripts without word
13
+ * spaces), otherwise a Unicode letters/digits fallback (e.g. React
14
+ * Native/Hermes without `Intl.Segmenter`).
15
+ */
16
+ function createTokenizer(language) {
17
+ const SegmenterCtor = Intl.Segmenter;
18
+ if (typeof SegmenterCtor === "function") {
19
+ try {
20
+ const segmenter = new SegmenterCtor(language === "und" ? undefined : language, {
21
+ granularity: "word",
22
+ });
23
+ return (text) => {
24
+ const tokens = [];
25
+ for (const part of segmenter.segment(text)) {
26
+ if (part.isWordLike) {
27
+ tokens.push(part.segment);
28
+ }
29
+ }
30
+ return tokens;
31
+ };
32
+ }
33
+ catch {
34
+ // Unknown locale or Segmenter quirk → fall through to the regex.
35
+ }
36
+ }
37
+ let wordRe;
38
+ try {
39
+ wordRe = /[\p{L}\p{N}]+/gu;
40
+ }
41
+ catch {
42
+ // Engines without Unicode property escapes: cover ASCII plus the
43
+ // common Latin/Cyrillic/CJK ranges.
44
+ wordRe = /[A-Za-z0-9\u00C0-\u024F\u0370-\u03FF\u0400-\u04FF\u3040-\u30FF\u4E00-\u9FFF]+/g;
45
+ }
46
+ return (text) => text.match(wordRe) ?? [];
47
+ }
48
+ const ID_FIELD = "__docId";
49
+ /**
50
+ * MiniSearch-backed {@link SearchEngineAdapter}.
51
+ *
52
+ * MiniSearch requires the indexed field list at construction time, but
53
+ * mindoodb documents are schemaless (auto mode indexes whatever string
54
+ * fields documents have). The adapter therefore keeps the extracted
55
+ * source texts per document and transparently rebuilds the MiniSearch
56
+ * instance when a previously unseen field name appears — rare in
57
+ * practice, since real databases converge on a stable field set quickly.
58
+ * The kept source texts also make the serialized state self-contained.
59
+ */
60
+ class MiniSearchAdapter {
61
+ constructor(language, initialFields = []) {
62
+ this.docs = new Map();
63
+ this.language = language;
64
+ this.tokenize = createTokenizer(language);
65
+ this.fieldNames = [...new Set(initialFields)].sort();
66
+ this.engine = this.createEngine(this.fieldNames);
67
+ }
68
+ engineOptions(fields) {
69
+ return {
70
+ idField: ID_FIELD,
71
+ fields,
72
+ extractField: (document, fieldName) => {
73
+ if (fieldName === ID_FIELD) {
74
+ return document.__docId;
75
+ }
76
+ return document.fields[fieldName] ?? "";
77
+ },
78
+ tokenize: (text) => this.tokenize(text),
79
+ processTerm: (term) => {
80
+ const processed = term.toLowerCase();
81
+ return processed.length > 0 ? processed : null;
82
+ },
83
+ };
84
+ }
85
+ createEngine(fields) {
86
+ return new minisearch_1.default(this.engineOptions(fields));
87
+ }
88
+ /** Rebuild the MiniSearch instance over a grown field list. */
89
+ rebuildWithFields(fields) {
90
+ this.fieldNames = [...new Set(fields)].sort();
91
+ this.engine = this.createEngine(this.fieldNames);
92
+ for (const [docId, docFields] of this.docs) {
93
+ this.engine.add({ __docId: docId, fields: docFields });
94
+ }
95
+ }
96
+ add(docId, fields) {
97
+ const newFields = Object.keys(fields).filter((name) => !this.fieldNames.includes(name));
98
+ // Full removal via the kept source texts, NOT discard(): discarded
99
+ // documents keep their postings as "dirt" until a vacuum and keep
100
+ // counting into document frequencies — with the changefeed re-adding
101
+ // every edited document, that skews BM25 IDF (scores can even go
102
+ // negative). remove() is synchronous and leaves no dirt behind.
103
+ const previous = this.docs.get(docId);
104
+ if (previous) {
105
+ this.engine.remove({ __docId: docId, fields: previous });
106
+ }
107
+ this.docs.set(docId, fields);
108
+ if (newFields.length > 0) {
109
+ this.rebuildWithFields([...this.fieldNames, ...newFields]);
110
+ return;
111
+ }
112
+ this.engine.add({ __docId: docId, fields });
113
+ }
114
+ remove(docId) {
115
+ const previous = this.docs.get(docId);
116
+ if (previous) {
117
+ this.docs.delete(docId);
118
+ this.engine.remove({ __docId: docId, fields: previous });
119
+ }
120
+ }
121
+ has(docId) {
122
+ return this.docs.has(docId);
123
+ }
124
+ search(query, options) {
125
+ if (query.trim().length === 0 || this.docs.size === 0) {
126
+ return [];
127
+ }
128
+ const fields = options?.fields?.filter((field) => this.fieldNames.includes(field));
129
+ if (options?.fields && (!fields || fields.length === 0)) {
130
+ // Every requested field is unknown to the index → nothing can match.
131
+ return [];
132
+ }
133
+ const results = this.engine.search(query, {
134
+ fields,
135
+ prefix: options?.prefix ?? true,
136
+ fuzzy: options?.fuzzy ?? false,
137
+ combineWith: options?.combineWith ?? "AND",
138
+ });
139
+ const hits = [];
140
+ const limit = options?.limit;
141
+ for (const result of results) {
142
+ hits.push({ docId: String(result.id), score: result.score });
143
+ if (limit !== undefined && hits.length >= limit) {
144
+ break;
145
+ }
146
+ }
147
+ return hits;
148
+ }
149
+ getDocumentCount() {
150
+ return this.docs.size;
151
+ }
152
+ getFieldNames() {
153
+ return [...this.fieldNames];
154
+ }
155
+ serialize() {
156
+ const state = {
157
+ formatVersion: types_1.FULLTEXT_INDEX_FORMAT_VERSION,
158
+ language: this.language,
159
+ fields: this.fieldNames,
160
+ docs: Array.from(this.docs.entries()),
161
+ index: JSON.stringify(this.engine.toJSON()),
162
+ };
163
+ return new TextEncoder().encode(JSON.stringify(state));
164
+ }
165
+ load(bytes) {
166
+ const state = JSON.parse(new TextDecoder().decode(bytes));
167
+ if (state.formatVersion !== types_1.FULLTEXT_INDEX_FORMAT_VERSION) {
168
+ throw new Error(`Unsupported full-text index format version ${state.formatVersion} (expected ${types_1.FULLTEXT_INDEX_FORMAT_VERSION}).`);
169
+ }
170
+ if (state.language !== this.language) {
171
+ throw new Error(`Persisted full-text index language "${state.language}" does not match configured "${this.language}".`);
172
+ }
173
+ this.fieldNames = [...state.fields];
174
+ this.docs = new Map(state.docs);
175
+ this.engine = minisearch_1.default.loadJSON(state.index, this.engineOptions(this.fieldNames));
176
+ }
177
+ clear() {
178
+ this.docs.clear();
179
+ this.engine = this.createEngine(this.fieldNames);
180
+ }
181
+ }
182
+ exports.MiniSearchAdapter = MiniSearchAdapter;
183
+ //# sourceMappingURL=SearchEngineAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchEngineAdapter.js","sourceRoot":"","sources":["../../../../src/core/indexing/fulltext/SearchEngineAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { ResolvedFulltextConfig } from "./types";
2
+ /**
3
+ * Collect indexable plain text from an arbitrary materialized document
4
+ * value:
5
+ *
6
+ * - strings are taken as-is (Automerge text fields materialize as plain
7
+ * strings; rich-text block markers are normalized to whitespace)
8
+ * - arrays contribute the text of their elements, joined by whitespace
9
+ * - rich-text span objects (`{ type: "text", value }`) and tagged
10
+ * immutable strings (`{ type: "immutableString", value }`) contribute
11
+ * their `value`; block spans contribute a boundary space
12
+ * - other objects contribute the text of their own values (metadata keys
13
+ * of span shapes are skipped), so span arrays stored as plain JSON and
14
+ * nested structures are searchable without special-casing every shape
15
+ * - numbers/booleans/null are NOT indexed (full-text is for text;
16
+ * structured values belong in query filters)
17
+ *
18
+ * Depth is capped defensively so cyclic-ish/pathological structures can
19
+ * never stall indexing.
20
+ */
21
+ export declare function collectPlainText(value: unknown, depth?: number): string;
22
+ /**
23
+ * Extract the indexable text map for one document payload according to
24
+ * the resolved configuration:
25
+ *
26
+ * - explicit `include` paths (any nesting, keyed by the full dot-path), or
27
+ * - auto mode (empty `include`): every non-underscore top-level field
28
+ * whose extracted text is non-empty (encrypted-convention fields are
29
+ * skipped)
30
+ *
31
+ * Every value is capped at `maxFieldBytes` (truncated, not skipped).
32
+ */
33
+ export declare function extractFulltextFields(data: Record<string, unknown>, config: ResolvedFulltextConfig): Record<string, string>;
34
+ //# sourceMappingURL=extractFulltextText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractFulltextText.d.ts","sourceRoot":"","sources":["../../../../src/core/indexing/fulltext/extractFulltextText.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAiBtD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,GAAE,MAAU,GAAG,MAAM,CAwC1E;AAwBD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,sBAAsB,GAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAuBxB"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.collectPlainText = collectPlainText;
4
+ exports.extractFulltextFields = extractFulltextFields;
5
+ const extractSummaryFields_1 = require("../summary/extractSummaryFields");
6
+ /**
7
+ * Automerge materializes rich-text block markers as the Unicode object
8
+ * replacement character; treat it (and other separator/control chars) as
9
+ * whitespace so words on both sides of a block boundary stay separate
10
+ * tokens.
11
+ */
12
+ const BLOCK_MARKER_RE = /[\u{FFFC}\u{0000}-\u{0008}\u{000B}\u{000C}\u{000E}-\u{001F}]/gu;
13
+ function normalizeText(text) {
14
+ return text.replace(BLOCK_MARKER_RE, " ");
15
+ }
16
+ /** Keys of rich-text span objects that never carry indexable content. */
17
+ const SPAN_METADATA_KEYS = new Set(["type", "marks", "parents", "attr", "attrs"]);
18
+ /**
19
+ * Collect indexable plain text from an arbitrary materialized document
20
+ * value:
21
+ *
22
+ * - strings are taken as-is (Automerge text fields materialize as plain
23
+ * strings; rich-text block markers are normalized to whitespace)
24
+ * - arrays contribute the text of their elements, joined by whitespace
25
+ * - rich-text span objects (`{ type: "text", value }`) and tagged
26
+ * immutable strings (`{ type: "immutableString", value }`) contribute
27
+ * their `value`; block spans contribute a boundary space
28
+ * - other objects contribute the text of their own values (metadata keys
29
+ * of span shapes are skipped), so span arrays stored as plain JSON and
30
+ * nested structures are searchable without special-casing every shape
31
+ * - numbers/booleans/null are NOT indexed (full-text is for text;
32
+ * structured values belong in query filters)
33
+ *
34
+ * Depth is capped defensively so cyclic-ish/pathological structures can
35
+ * never stall indexing.
36
+ */
37
+ function collectPlainText(value, depth = 0) {
38
+ if (typeof value === "string") {
39
+ return normalizeText(value);
40
+ }
41
+ if (value === null || typeof value !== "object" || depth > 16) {
42
+ return "";
43
+ }
44
+ if (Array.isArray(value)) {
45
+ const parts = [];
46
+ for (const item of value) {
47
+ const text = collectPlainText(item, depth + 1);
48
+ if (text.length > 0) {
49
+ parts.push(text);
50
+ }
51
+ }
52
+ return parts.join(" ");
53
+ }
54
+ const raw = value;
55
+ // Rich-text span shapes and tagged immutable strings.
56
+ if (typeof raw.type === "string") {
57
+ if ((raw.type === "text" || raw.type === "immutableString") && typeof raw.value === "string") {
58
+ return normalizeText(raw.value);
59
+ }
60
+ if (raw.type === "block") {
61
+ return "";
62
+ }
63
+ }
64
+ const parts = [];
65
+ for (const [key, item] of Object.entries(raw)) {
66
+ if (SPAN_METADATA_KEYS.has(key)) {
67
+ continue;
68
+ }
69
+ const text = collectPlainText(item, depth + 1);
70
+ if (text.length > 0) {
71
+ parts.push(text);
72
+ }
73
+ }
74
+ return parts.join(" ");
75
+ }
76
+ /** Truncation that never leaves a surrogate half at the cut point. */
77
+ function truncateText(text, maxBytes) {
78
+ if (maxBytes <= 0 || text.length <= maxBytes) {
79
+ return text;
80
+ }
81
+ let end = maxBytes;
82
+ const last = text.charCodeAt(end - 1);
83
+ if (last >= 0xd800 && last <= 0xdbff) {
84
+ end--;
85
+ }
86
+ return text.slice(0, end);
87
+ }
88
+ /**
89
+ * Fields following the encrypted-field convention hold ciphertext —
90
+ * useless in a full-text index. Explicit `include` still wins for callers
91
+ * who really want it.
92
+ */
93
+ function isEncryptedConventionField(key) {
94
+ return key.endsWith("_encrypted") || key.endsWith("_encrypted_key");
95
+ }
96
+ /**
97
+ * Extract the indexable text map for one document payload according to
98
+ * the resolved configuration:
99
+ *
100
+ * - explicit `include` paths (any nesting, keyed by the full dot-path), or
101
+ * - auto mode (empty `include`): every non-underscore top-level field
102
+ * whose extracted text is non-empty (encrypted-convention fields are
103
+ * skipped)
104
+ *
105
+ * Every value is capped at `maxFieldBytes` (truncated, not skipped).
106
+ */
107
+ function extractFulltextFields(data, config) {
108
+ const fields = {};
109
+ if (config.include.length > 0) {
110
+ for (const path of config.include) {
111
+ const text = collectPlainText((0, extractSummaryFields_1.resolveFieldPath)(data, path));
112
+ if (text.trim().length > 0) {
113
+ fields[path] = truncateText(text, config.maxFieldBytes);
114
+ }
115
+ }
116
+ return fields;
117
+ }
118
+ for (const [key, value] of Object.entries(data)) {
119
+ if (key.startsWith("_") || isEncryptedConventionField(key)) {
120
+ continue;
121
+ }
122
+ const text = collectPlainText(value);
123
+ if (text.trim().length > 0) {
124
+ fields[key] = truncateText(text, config.maxFieldBytes);
125
+ }
126
+ }
127
+ return fields;
128
+ }
129
+ //# sourceMappingURL=extractFulltextText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractFulltextText.js","sourceRoot":"","sources":["../../../../src/core/indexing/fulltext/extractFulltextText.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { DocumentFullTextIndex } from "./DocumentFullTextIndex";
2
+ export { MiniSearchAdapter, createTokenizer, type SearchEngineAdapter, } from "./SearchEngineAdapter";
3
+ export { resolveFulltextConfig, sanitizeFulltextConfig, computeFulltextConfigFingerprint, FULLTEXT_SETUP_FIELD, FULLTEXT_ATTACHMENT_FIELD, FULLTEXT_INDEX_FORMAT_VERSION, DEFAULT_FULLTEXT_MAX_FIELD_BYTES, type FulltextConfig, type ResolvedFulltextConfig, type FulltextCoverage, type FulltextSearchHit, type FulltextSearchOptions, type FulltextSearchResult, type AttachmentTextExtractor, } from "./types";
4
+ export { collectPlainText, extractFulltextFields } from "./extractFulltextText";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/indexing/fulltext/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,KAAK,mBAAmB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,gCAAgC,EAChC,oBAAoB,EACpB,yBAAyB,EACzB,6BAA6B,EAC7B,gCAAgC,EAChC,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,GAC7B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractFulltextFields = exports.collectPlainText = exports.DEFAULT_FULLTEXT_MAX_FIELD_BYTES = exports.FULLTEXT_INDEX_FORMAT_VERSION = exports.FULLTEXT_ATTACHMENT_FIELD = exports.FULLTEXT_SETUP_FIELD = exports.computeFulltextConfigFingerprint = exports.sanitizeFulltextConfig = exports.resolveFulltextConfig = exports.createTokenizer = exports.MiniSearchAdapter = exports.DocumentFullTextIndex = void 0;
4
+ var DocumentFullTextIndex_1 = require("./DocumentFullTextIndex");
5
+ Object.defineProperty(exports, "DocumentFullTextIndex", { enumerable: true, get: function () { return DocumentFullTextIndex_1.DocumentFullTextIndex; } });
6
+ var SearchEngineAdapter_1 = require("./SearchEngineAdapter");
7
+ Object.defineProperty(exports, "MiniSearchAdapter", { enumerable: true, get: function () { return SearchEngineAdapter_1.MiniSearchAdapter; } });
8
+ Object.defineProperty(exports, "createTokenizer", { enumerable: true, get: function () { return SearchEngineAdapter_1.createTokenizer; } });
9
+ var types_1 = require("./types");
10
+ Object.defineProperty(exports, "resolveFulltextConfig", { enumerable: true, get: function () { return types_1.resolveFulltextConfig; } });
11
+ Object.defineProperty(exports, "sanitizeFulltextConfig", { enumerable: true, get: function () { return types_1.sanitizeFulltextConfig; } });
12
+ Object.defineProperty(exports, "computeFulltextConfigFingerprint", { enumerable: true, get: function () { return types_1.computeFulltextConfigFingerprint; } });
13
+ Object.defineProperty(exports, "FULLTEXT_SETUP_FIELD", { enumerable: true, get: function () { return types_1.FULLTEXT_SETUP_FIELD; } });
14
+ Object.defineProperty(exports, "FULLTEXT_ATTACHMENT_FIELD", { enumerable: true, get: function () { return types_1.FULLTEXT_ATTACHMENT_FIELD; } });
15
+ Object.defineProperty(exports, "FULLTEXT_INDEX_FORMAT_VERSION", { enumerable: true, get: function () { return types_1.FULLTEXT_INDEX_FORMAT_VERSION; } });
16
+ Object.defineProperty(exports, "DEFAULT_FULLTEXT_MAX_FIELD_BYTES", { enumerable: true, get: function () { return types_1.DEFAULT_FULLTEXT_MAX_FIELD_BYTES; } });
17
+ var extractFulltextText_1 = require("./extractFulltextText");
18
+ Object.defineProperty(exports, "collectPlainText", { enumerable: true, get: function () { return extractFulltextText_1.collectPlainText; } });
19
+ Object.defineProperty(exports, "extractFulltextFields", { enumerable: true, get: function () { return extractFulltextText_1.extractFulltextFields; } });
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/indexing/fulltext/index.ts"],"names":[],"mappings":";;;AAAA,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA;AAC9B,6DAI+B;AAH7B,wHAAA,iBAAiB,OAAA;AACjB,sHAAA,eAAe,OAAA;AAGjB,iCAeiB;AAdf,8GAAA,qBAAqB,OAAA;AACrB,+GAAA,sBAAsB,OAAA;AACtB,yHAAA,gCAAgC,OAAA;AAChC,6GAAA,oBAAoB,OAAA;AACpB,kHAAA,yBAAyB,OAAA;AACzB,sHAAA,6BAA6B,OAAA;AAC7B,yHAAA,gCAAgC,OAAA;AASlC,6DAAgF;AAAvE,uHAAA,gBAAgB,OAAA;AAAE,4HAAA,qBAAqB,OAAA"}
@@ -0,0 +1,168 @@
1
+ import type { ProcessChangesCursor } from "../../types";
2
+ /**
3
+ * Field of the `dbsetup` document holding the {@link FulltextConfig} used
4
+ * by full-text indexes that were not given an explicit configuration in
5
+ * code. Lives next to `summarySetup` in the same synced setup document
6
+ * (see docs/adhoc-queries.md and docs/fulltext-search.md).
7
+ */
8
+ export declare const FULLTEXT_SETUP_FIELD = "fulltextSetup";
9
+ /**
10
+ * Version of the persisted index format (serialization layout AND the
11
+ * engine/tokenizer behavior). Part of the config fingerprint, so bumping
12
+ * it invalidates persisted indexes and triggers a clean rebuild.
13
+ */
14
+ export declare const FULLTEXT_INDEX_FORMAT_VERSION = 3;
15
+ /**
16
+ * Default per-field cap (approximate bytes, JS string length) for text
17
+ * extracted into the full-text index. Longer values are truncated — not
18
+ * skipped — so a huge e-mail body still contributes its first part.
19
+ */
20
+ export declare const DEFAULT_FULLTEXT_MAX_FIELD_BYTES: number;
21
+ /**
22
+ * Synthetic index field holding text extracted from a document's
23
+ * attachments (via registered {@link AttachmentTextExtractor}s). Hits
24
+ * stay document-scoped (the Notes model): searching matches the document,
25
+ * not an individual attachment.
26
+ */
27
+ export declare const FULLTEXT_ATTACHMENT_FIELD = "_attachments";
28
+ /**
29
+ * Configuration of the client-side full-text index (see
30
+ * docs/fulltext-search.md).
31
+ *
32
+ * Like the summary configuration this is a derived, local index setting:
33
+ * changing it never rewrites documents, it only triggers a resumable
34
+ * backfill over the changefeed.
35
+ */
36
+ export interface FulltextConfig {
37
+ /**
38
+ * Master switch. The full-text index is OPT-IN (default `false`):
39
+ * unlike the summary buffer it costs indexing time and RAM only apps
40
+ * that actually search should pay for.
41
+ */
42
+ enabled?: boolean;
43
+ /**
44
+ * Dot-separated document field paths to index. When empty or omitted
45
+ * (auto mode), every non-underscore top-level field whose extracted
46
+ * plain text is non-empty is indexed. Explicit paths may be nested and
47
+ * may point at long-text / rich-text fields that are deliberately kept
48
+ * out of the summary buffer.
49
+ */
50
+ include?: string[];
51
+ /**
52
+ * When `true`, text is extracted from document attachments through the
53
+ * registered {@link AttachmentTextExtractor}s and indexed under the
54
+ * synthetic {@link FULLTEXT_ATTACHMENT_FIELD} field. Without registered
55
+ * extractors this setting has no effect. Default: `false`.
56
+ */
57
+ attachments?: boolean;
58
+ /**
59
+ * BCP-47 language tag steering the tokenizer (`Intl.Segmenter` locale
60
+ * where available). Part of the config fingerprint: changing the
61
+ * language rebuilds the index. Default: `"und"` (undetermined —
62
+ * language-neutral Unicode segmentation).
63
+ */
64
+ language?: string;
65
+ /**
66
+ * Per-field cap (approximate bytes) for extracted text. Values above
67
+ * the cap are truncated, not skipped.
68
+ * Default: {@link DEFAULT_FULLTEXT_MAX_FIELD_BYTES}.
69
+ */
70
+ maxFieldBytes?: number;
71
+ }
72
+ /** {@link FulltextConfig} with all defaults applied. */
73
+ export interface ResolvedFulltextConfig {
74
+ enabled: boolean;
75
+ include: string[];
76
+ attachments: boolean;
77
+ language: string;
78
+ maxFieldBytes: number;
79
+ }
80
+ export declare function resolveFulltextConfig(config?: FulltextConfig): ResolvedFulltextConfig;
81
+ /**
82
+ * Extract a {@link FulltextConfig} from an untyped value (the
83
+ * `fulltextSetup` field of the synced setup document). Unknown properties
84
+ * are dropped and wrongly-typed ones ignored, so a malformed document can
85
+ * never break index maintenance. Returns `undefined` when the value is
86
+ * not an object (missing field, deleted document) — callers fall back to
87
+ * the default (disabled) configuration.
88
+ */
89
+ export declare function sanitizeFulltextConfig(value: unknown): FulltextConfig | undefined;
90
+ /**
91
+ * Deterministic fingerprint of a full-text configuration, including the
92
+ * index format/engine version. Persisted alongside the index; a mismatch
93
+ * on restore (or a config change at runtime) marks the index as
94
+ * `"rebuilding"` and triggers a resumable backfill.
95
+ */
96
+ export declare function computeFulltextConfigFingerprint(config: ResolvedFulltextConfig): string;
97
+ /**
98
+ * Coverage state reported by search results: `"full"` when the index
99
+ * reflects the current configuration for all documents, `"rebuilding"`
100
+ * while a config-change backfill is still in progress.
101
+ */
102
+ export type FulltextCoverage = "full" | "rebuilding";
103
+ /** One hit of a full-text search: document id plus relevance score. */
104
+ export interface FulltextSearchHit {
105
+ docId: string;
106
+ /** Relevance score (BM25-like, engine-specific scale; higher = better). */
107
+ score: number;
108
+ }
109
+ /** Options for {@link DocumentFullTextIndex.search} / `db.searchText()`. */
110
+ export interface FulltextSearchOptions {
111
+ /**
112
+ * Restrict matching to these index fields (document field paths, plus
113
+ * the synthetic {@link FULLTEXT_ATTACHMENT_FIELD}). Default: all fields.
114
+ */
115
+ fields?: string[];
116
+ /** Match term prefixes (`"drag"` matches `"dragon"`). Default: `true`. */
117
+ prefix?: boolean;
118
+ /**
119
+ * Fuzzy matching tolerance: `true` (edit distance scaled by term
120
+ * length), a number (0..1 fraction of term length, or an absolute edit
121
+ * distance > 1), or `false` to disable. Default: `false`.
122
+ */
123
+ fuzzy?: boolean | number;
124
+ /**
125
+ * How multiple query terms combine: `"AND"` (all terms must match,
126
+ * default) or `"OR"` (any term matches).
127
+ */
128
+ combineWith?: "AND" | "OR";
129
+ /** Cap the number of returned hits (applied after scoring/sorting). */
130
+ limit?: number;
131
+ }
132
+ /** Result of {@link DocumentFullTextIndex.search} / `db.searchText()`. */
133
+ export interface FulltextSearchResult {
134
+ /** Matching documents, best score first. */
135
+ hits: FulltextSearchHit[];
136
+ coverage: FulltextCoverage;
137
+ }
138
+ /** Serialized shape of the persisted full-text metadata record. */
139
+ export interface FulltextMetaPayload {
140
+ cursor: ProcessChangesCursor | null;
141
+ configFingerprint: string;
142
+ needsBackfill: boolean;
143
+ backfillCursor: ProcessChangesCursor | null;
144
+ }
145
+ /**
146
+ * Extracts plain text from a document attachment for full-text indexing.
147
+ *
148
+ * Implementations are registered per database (see
149
+ * `MindooDB.registerAttachmentTextExtractor`); the host environment
150
+ * provides format-specific extractors (e.g. Haven registers text/CSV/JSON,
151
+ * PDF and Office extractors from its preview parsers). Without registered
152
+ * extractors — or with `fulltextSetup.attachments` unset — attachment
153
+ * content is not indexed.
154
+ */
155
+ export interface AttachmentTextExtractor {
156
+ /** Quick capability check before any bytes are loaded. */
157
+ supports(mimeType: string, fileName: string): boolean;
158
+ /**
159
+ * Extract plain text from the attachment bytes. Return `null` when the
160
+ * content turns out to be unsupported. Thrown errors are caught and
161
+ * logged by the index; the attachment is then skipped.
162
+ */
163
+ extract(bytes: Uint8Array, info: {
164
+ mimeType: string;
165
+ fileName: string;
166
+ }): Promise<string | null>;
167
+ }
168
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/indexing/fulltext/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,kBAAkB,CAAC;AAEpD;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,QAAa,CAAC;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,iBAAiB,CAAC;AAExD;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wDAAwD;AACxD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,sBAAsB,CAQrF;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,GAAG,SAAS,CAsBjF;AAED;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CASvF;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,YAAY,CAAC;AAErD,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4EAA4E;AAC5E,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC3B,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,0EAA0E;AAC1E,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC7C;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,uBAAuB;IACtC,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACtD;;;;OAIG;IACH,OAAO,CACL,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAC3C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC3B"}