mindoodb 0.0.23 → 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 +697 -4
  21. package/dist/core/BaseMindooDB.d.ts.map +1 -1
  22. package/dist/core/BaseMindooDB.js +3273 -180
  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 +1509 -39
  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,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.executeQueryLive = executeQueryLive;
4
+ const executeQuery_1 = require("./executeQuery");
5
+ /**
6
+ * Fingerprint of a query result: docIds + lastModified in result order.
7
+ * Any membership, ordering, or content change (content changes bump
8
+ * `lastModified`) alters the fingerprint; changes to non-matching
9
+ * documents cost only the scan, never an `onResult` call.
10
+ *
11
+ * Full-text relevance scores participate ROUNDED (two decimals): adding
12
+ * or removing documents shifts BM25 statistics slightly for every other
13
+ * match, and re-pushing an unchanged result list over marginal score
14
+ * drift would spam subscribers.
15
+ */
16
+ function fingerprintResult(result) {
17
+ const parts = [String(result.total)];
18
+ for (const row of result.rows) {
19
+ parts.push(row.textScore === undefined
20
+ ? `${row.docId}:${row.lastModified}`
21
+ : `${row.docId}:${row.lastModified}:${row.textScore.toFixed(2)}`);
22
+ }
23
+ return parts.join("|");
24
+ }
25
+ /**
26
+ * Live query: delivers the initial result, keeps the summary current via
27
+ * the database's change listener, and re-evaluates the query after every
28
+ * (coalesced) change event. `onResult` only fires when the result
29
+ * fingerprint actually changed.
30
+ *
31
+ * Re-evaluations are single-flight with a pending flag, so bursts of
32
+ * change events never queue up more than one follow-up run. Evaluation
33
+ * errors are reported through `onError` (or logged to the console).
34
+ */
35
+ function executeQueryLive(db, summary, query, onResult, options) {
36
+ if (!db.addChangeListener) {
37
+ throw new Error("This MindooDB instance does not support change listeners.");
38
+ }
39
+ let lastFingerprint = null;
40
+ let unsubscribed = false;
41
+ let running = false;
42
+ let pending = false;
43
+ const reportError = (error) => {
44
+ if (options?.onError) {
45
+ options.onError(error);
46
+ }
47
+ else {
48
+ console.warn("[MindooDB] queryLive evaluation failed:", error);
49
+ }
50
+ };
51
+ const evaluate = async (force) => {
52
+ const result = await (0, executeQuery_1.executeQuery)(db, summary, query, options);
53
+ if (unsubscribed) {
54
+ return;
55
+ }
56
+ const fingerprint = fingerprintResult(result);
57
+ if (force || fingerprint !== lastFingerprint) {
58
+ lastFingerprint = fingerprint;
59
+ onResult(result);
60
+ }
61
+ };
62
+ const run = async (force) => {
63
+ if (running) {
64
+ pending = true;
65
+ return;
66
+ }
67
+ running = true;
68
+ try {
69
+ do {
70
+ pending = false;
71
+ try {
72
+ await evaluate(force);
73
+ }
74
+ catch (error) {
75
+ reportError(error);
76
+ }
77
+ force = false;
78
+ } while (pending && !unsubscribed);
79
+ }
80
+ finally {
81
+ running = false;
82
+ }
83
+ };
84
+ const removeListener = db.addChangeListener(() => {
85
+ if (!unsubscribed) {
86
+ void run(false);
87
+ }
88
+ });
89
+ // Deliver the initial result asynchronously.
90
+ void run(true);
91
+ return {
92
+ unsubscribe() {
93
+ unsubscribed = true;
94
+ removeListener();
95
+ },
96
+ async refresh() {
97
+ if (unsubscribed) {
98
+ return;
99
+ }
100
+ await run(true);
101
+ },
102
+ };
103
+ }
104
+ //# sourceMappingURL=queryLive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryLive.js","sourceRoot":"","sources":["../../../src/core/query/queryLive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ import type { MindooDB } from "../types";
2
+ import type { MindooDBAppBooleanExpression } from "../expressions/types";
3
+ import type { DocumentSummaryStore } from "../indexing/summary/DocumentSummaryStore";
4
+ import { VirtualView } from "../indexing/virtualviews/VirtualView";
5
+ import { VirtualViewColumn, type VirtualViewColumnOptions } from "../indexing/virtualviews/VirtualViewColumn";
6
+ import type { VirtualViewUpdateOptions } from "../indexing/virtualviews/IVirtualViewDataProvider";
7
+ import type { CategorizationStyle } from "../indexing/virtualviews/types";
8
+ import { type MindooQueryTextClause } from "./types";
9
+ /**
10
+ * Declarative definition of an ephemeral, summary-backed view. Fully
11
+ * JSON-serializable when columns use `expression` instead of
12
+ * `valueFunction` — the basis for view designs stored/synchronized as
13
+ * data.
14
+ */
15
+ export interface MindooQueryViewDefinition {
16
+ /**
17
+ * Expression filter selecting which documents appear in the view.
18
+ * Applies to every source unless a source provides its own filter.
19
+ */
20
+ filter?: MindooDBAppBooleanExpression;
21
+ /**
22
+ * Full-text pre-filter: only documents matching this search (in each
23
+ * source's full-text index) appear in the view, combined with `filter`
24
+ * as a logical AND. Applies to every source unless a source provides
25
+ * its own `text` clause. Requires full-text indexing to be enabled for
26
+ * each source database (`fulltext-not-enabled` otherwise) — see
27
+ * docs/fulltext-search.md.
28
+ *
29
+ * Matching documents expose the relevance as pseudo-fields to filter
30
+ * and column expressions: `_textScore` (0..1, normalized to the best
31
+ * hit of the current search, rounded to 2 decimals) and
32
+ * `_textScoreRaw` (engine-specific raw score).
33
+ */
34
+ text?: MindooQueryTextClause;
35
+ /** View columns (categories/sorting/totals work as in persistent views). */
36
+ columns: Array<VirtualViewColumn | VirtualViewColumnOptions>;
37
+ categorizationStyle?: CategorizationStyle;
38
+ }
39
+ /**
40
+ * One database feeding an ephemeral summary view. Like persistent
41
+ * VirtualViews, ephemeral views can combine multiple sources — different
42
+ * databases and even different tenants — each contributing entries under
43
+ * its own origin.
44
+ */
45
+ export interface EphemeralViewSource {
46
+ /** The database whose summary buffer feeds this source. */
47
+ db: MindooDB;
48
+ /**
49
+ * Per-source filter. When set it replaces the definition-level filter
50
+ * for this source (e.g. different document types per database).
51
+ */
52
+ filter?: MindooDBAppBooleanExpression;
53
+ /**
54
+ * Per-source full-text pre-filter. When set it replaces the
55
+ * definition-level `text` clause for this source.
56
+ */
57
+ text?: MindooQueryTextClause;
58
+ /**
59
+ * Origin identifier for entries of this source. Must be unique within
60
+ * the view. Defaults to `<tenantId>/<storeId>#ephemeral`, which is
61
+ * already unique across databases and tenants.
62
+ */
63
+ origin?: string;
64
+ }
65
+ /** Internally resolved source: summary store and origin are settled. */
66
+ interface ResolvedViewSource {
67
+ db: MindooDB;
68
+ summary: DocumentSummaryStore;
69
+ origin: string;
70
+ filter?: MindooDBAppBooleanExpression;
71
+ text?: MindooQueryTextClause;
72
+ }
73
+ /**
74
+ * An ephemeral VirtualView over one or more document summary buffers,
75
+ * created by `db.queryView()` (single database) or {@link queryViewAcross}
76
+ * (multiple databases/tenants).
77
+ *
78
+ * Unlike persistent views it is not registered with a CacheManager —
79
+ * building it is a pure in-memory sort over summary entries, so dynamic
80
+ * re-sorting is cheap: {@link resort} swaps in a new column set over the
81
+ * SAME summaries (no document reload, no changefeed re-consumption).
82
+ */
83
+ export declare class EphemeralSummaryView {
84
+ private readonly sources;
85
+ private definition;
86
+ private view;
87
+ private providers;
88
+ private disposed;
89
+ /** Whether a live binding is active (survives resort rebuilds). */
90
+ private liveBound;
91
+ constructor(sources: ResolvedViewSource[], definition: MindooQueryViewDefinition);
92
+ private buildView;
93
+ /** The underlying VirtualView (navigators, entries, totals as usual). */
94
+ getView(): VirtualView;
95
+ /** Bring the view up to date (summary updates + entry propagation). */
96
+ update(options?: VirtualViewUpdateOptions): Promise<void>;
97
+ /**
98
+ * Replace the column set (and optionally the filter and/or full-text
99
+ * clause) and rebuild the view from the summaries — dynamic re-sorting
100
+ * without touching documents. A live binding created via {@link bindTo}
101
+ * carries over to the new view.
102
+ */
103
+ resort(definition: Partial<MindooQueryViewDefinition> & Pick<MindooQueryViewDefinition, "columns">, options?: VirtualViewUpdateOptions): Promise<void>;
104
+ /**
105
+ * Keep this view up to date automatically via the change feeds of ALL
106
+ * source databases (see {@link VirtualView.bindTo}). Combine with
107
+ * `getView().onDidUpdate()` for UI re-render hooks.
108
+ *
109
+ * @returns An unbind function.
110
+ */
111
+ bindTo(): () => void;
112
+ private bindSources;
113
+ /** Detach all change-feed bindings. */
114
+ unbind(): void;
115
+ /**
116
+ * Release the view: detaches change-feed bindings and drops internal
117
+ * state. Ephemeral views hold no CacheManager registration, so nothing
118
+ * else needs cleanup.
119
+ */
120
+ dispose(): void;
121
+ isDisposed(): boolean;
122
+ private assertNotDisposed;
123
+ }
124
+ /**
125
+ * Build an ephemeral, summary-backed VirtualView over a single database
126
+ * and run its initial update. See {@link EphemeralSummaryView}.
127
+ */
128
+ export declare function createEphemeralSummaryView(db: MindooDB, summary: DocumentSummaryStore, definition: MindooQueryViewDefinition, options?: VirtualViewUpdateOptions): Promise<EphemeralSummaryView>;
129
+ /**
130
+ * Build an ephemeral, summary-backed VirtualView spanning MULTIPLE
131
+ * databases — and, since every source brings its own tenant context, even
132
+ * multiple tenants. Each source contributes entries under its own origin
133
+ * from its own summary buffer; no documents are materialized anywhere.
134
+ *
135
+ * ```typescript
136
+ * const view = await queryViewAcross(
137
+ * [
138
+ * { db: salesDb },
139
+ * { db: archiveDb, filter: v.eq(v.field("year"), 2025) },
140
+ * ],
141
+ * {
142
+ * filter: v.eq(v.field("type"), "deal"),
143
+ * columns: [
144
+ * VirtualViewColumn.category("region"),
145
+ * VirtualViewColumn.sorted("amount", ColumnSorting.DESCENDING),
146
+ * ],
147
+ * }
148
+ * );
149
+ * ```
150
+ *
151
+ * A per-source `filter` replaces the definition-level filter for that
152
+ * source. `bindTo()` subscribes to the change feeds of all sources.
153
+ */
154
+ export declare function queryViewAcross(sources: EphemeralViewSource[], definition: MindooQueryViewDefinition, options?: VirtualViewUpdateOptions): Promise<EphemeralSummaryView>;
155
+ export {};
156
+ //# sourceMappingURL=queryView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryView.d.ts","sourceRoot":"","sources":["../../../src/core/query/queryView.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EphemeralSummaryView = void 0;
4
+ exports.createEphemeralSummaryView = createEphemeralSummaryView;
5
+ exports.queryViewAcross = queryViewAcross;
6
+ const expressions_1 = require("../expressions");
7
+ const SummaryVirtualViewDataProvider_1 = require("../indexing/summary/SummaryVirtualViewDataProvider");
8
+ const VirtualView_1 = require("../indexing/virtualviews/VirtualView");
9
+ const VirtualViewColumn_1 = require("../indexing/virtualviews/VirtualViewColumn");
10
+ const types_1 = require("./types");
11
+ function defaultEphemeralOrigin(db) {
12
+ return `${db.getTenant().getId()}/${db.getStore().getId()}#ephemeral`;
13
+ }
14
+ function resolveSources(sources) {
15
+ if (sources.length === 0) {
16
+ throw new types_1.MindooQueryError("An ephemeral view needs at least one source database.");
17
+ }
18
+ const resolved = [];
19
+ const seenOrigins = new Set();
20
+ for (const source of sources) {
21
+ if (!source.db.getSummaryStore) {
22
+ throw new types_1.MindooQueryError("A source database does not support summary stores.");
23
+ }
24
+ const origin = source.origin ?? defaultEphemeralOrigin(source.db);
25
+ if (seenOrigins.has(origin)) {
26
+ throw new types_1.MindooQueryError(`Duplicate view source origin "${origin}" — pass distinct 'origin' values when combining the same database twice.`);
27
+ }
28
+ seenOrigins.add(origin);
29
+ resolved.push({
30
+ db: source.db,
31
+ summary: source.db.getSummaryStore(),
32
+ origin,
33
+ filter: source.filter,
34
+ text: source.text,
35
+ });
36
+ }
37
+ return resolved;
38
+ }
39
+ /**
40
+ * An ephemeral VirtualView over one or more document summary buffers,
41
+ * created by `db.queryView()` (single database) or {@link queryViewAcross}
42
+ * (multiple databases/tenants).
43
+ *
44
+ * Unlike persistent views it is not registered with a CacheManager —
45
+ * building it is a pure in-memory sort over summary entries, so dynamic
46
+ * re-sorting is cheap: {@link resort} swaps in a new column set over the
47
+ * SAME summaries (no document reload, no changefeed re-consumption).
48
+ */
49
+ class EphemeralSummaryView {
50
+ constructor(sources, definition) {
51
+ this.sources = sources;
52
+ this.definition = definition;
53
+ this.providers = [];
54
+ this.disposed = false;
55
+ /** Whether a live binding is active (survives resort rebuilds). */
56
+ this.liveBound = false;
57
+ this.view = this.buildView(definition);
58
+ }
59
+ buildView(definition) {
60
+ validateViewDefinition(this.sources, definition);
61
+ const columns = definition.columns.map((column) => column instanceof VirtualViewColumn_1.VirtualViewColumn ? column : new VirtualViewColumn_1.VirtualViewColumn(column));
62
+ const view = new VirtualView_1.VirtualView(columns);
63
+ if (definition.categorizationStyle !== undefined) {
64
+ view.setCategorizationStyle(definition.categorizationStyle);
65
+ }
66
+ this.providers = [];
67
+ for (const source of this.sources) {
68
+ const textClause = source.text ?? definition.text;
69
+ let text;
70
+ if (textClause) {
71
+ if (!source.db.getFullTextIndex) {
72
+ throw new types_1.MindooQueryError(`View source "${source.origin}" does not support full-text search.`, "fulltext-not-enabled");
73
+ }
74
+ text = { index: source.db.getFullTextIndex(), clause: textClause };
75
+ }
76
+ const provider = new SummaryVirtualViewDataProvider_1.SummaryVirtualViewDataProvider({
77
+ origin: source.origin,
78
+ summary: source.summary,
79
+ filter: source.filter ?? definition.filter,
80
+ text,
81
+ });
82
+ provider.init(view);
83
+ view.addDataProvider(provider);
84
+ this.providers.push(provider);
85
+ }
86
+ return view;
87
+ }
88
+ /** The underlying VirtualView (navigators, entries, totals as usual). */
89
+ getView() {
90
+ this.assertNotDisposed();
91
+ return this.view;
92
+ }
93
+ /** Bring the view up to date (summary updates + entry propagation). */
94
+ async update(options) {
95
+ this.assertNotDisposed();
96
+ await this.view.update(options);
97
+ }
98
+ /**
99
+ * Replace the column set (and optionally the filter and/or full-text
100
+ * clause) and rebuild the view from the summaries — dynamic re-sorting
101
+ * without touching documents. A live binding created via {@link bindTo}
102
+ * carries over to the new view.
103
+ */
104
+ async resort(definition, options) {
105
+ this.assertNotDisposed();
106
+ this.definition = {
107
+ ...this.definition,
108
+ ...definition,
109
+ };
110
+ this.view.unbind();
111
+ this.view = this.buildView(this.definition);
112
+ if (this.liveBound) {
113
+ this.bindSources();
114
+ }
115
+ await this.view.update(options);
116
+ }
117
+ /**
118
+ * Keep this view up to date automatically via the change feeds of ALL
119
+ * source databases (see {@link VirtualView.bindTo}). Combine with
120
+ * `getView().onDidUpdate()` for UI re-render hooks.
121
+ *
122
+ * @returns An unbind function.
123
+ */
124
+ bindTo() {
125
+ this.assertNotDisposed();
126
+ this.liveBound = true;
127
+ this.bindSources();
128
+ return () => {
129
+ this.unbind();
130
+ };
131
+ }
132
+ bindSources() {
133
+ for (const source of this.sources) {
134
+ this.view.bindTo(source.db);
135
+ }
136
+ }
137
+ /** Detach all change-feed bindings. */
138
+ unbind() {
139
+ this.liveBound = false;
140
+ this.view.unbind();
141
+ }
142
+ /**
143
+ * Release the view: detaches change-feed bindings and drops internal
144
+ * state. Ephemeral views hold no CacheManager registration, so nothing
145
+ * else needs cleanup.
146
+ */
147
+ dispose() {
148
+ if (this.disposed) {
149
+ return;
150
+ }
151
+ this.unbind();
152
+ this.disposed = true;
153
+ for (const provider of this.providers) {
154
+ provider.reset();
155
+ }
156
+ this.providers = [];
157
+ }
158
+ isDisposed() {
159
+ return this.disposed;
160
+ }
161
+ assertNotDisposed() {
162
+ if (this.disposed) {
163
+ throw new Error("This ephemeral view has been disposed.");
164
+ }
165
+ }
166
+ }
167
+ exports.EphemeralSummaryView = EphemeralSummaryView;
168
+ /**
169
+ * Managed pseudo-fields provided by the full-text pre-filter (not stored
170
+ * in the summary buffer): `_textScore` is the normalized 0..1 relevance of
171
+ * the match, `_textScoreRaw` the engine's raw score.
172
+ */
173
+ const TEXT_SCORE_FIELDS = new Set(["_textScore", "_textScoreRaw"]);
174
+ /**
175
+ * Guardrails mirroring `db.query()`: expressions must be answerable from
176
+ * the summary buffers (no decrypt, no view-tree operations in filters,
177
+ * referenced fields covered by EACH source's summary configuration).
178
+ * The text-score pseudo-fields are exempt from coverage but require an
179
+ * effective `text` clause on the source.
180
+ */
181
+ function validateViewDefinition(sources, definition) {
182
+ const columnPaths = new Set();
183
+ for (const column of definition.columns) {
184
+ const expression = column instanceof VirtualViewColumn_1.VirtualViewColumn ? column.expression : column.expression;
185
+ if (!expression) {
186
+ continue;
187
+ }
188
+ const requirements = (0, expressions_1.analyzeExpressionRequirements)(expression);
189
+ if (requirements.needsDecryption) {
190
+ throw new types_1.MindooQueryError("View columns cannot use decrypt expressions: encrypted fields are not stored in the summary buffer.");
191
+ }
192
+ for (const path of (0, expressions_1.getReferencedFields)(expression)) {
193
+ columnPaths.add(path);
194
+ }
195
+ }
196
+ for (const source of sources) {
197
+ const referencedPaths = new Set(columnPaths);
198
+ const filter = source.filter ?? definition.filter;
199
+ if (filter) {
200
+ const requirements = (0, expressions_1.analyzeExpressionRequirements)(filter);
201
+ if (requirements.needsViewContext) {
202
+ throw new types_1.MindooQueryError(`View filters cannot use view-tree operations (${requirements.viewContextOperations.join(", ")}).`);
203
+ }
204
+ if (requirements.needsDecryption) {
205
+ throw new types_1.MindooQueryError("View filters cannot use decrypt expressions: encrypted fields are not stored in the summary buffer.");
206
+ }
207
+ for (const path of (0, expressions_1.getReferencedFields)(filter)) {
208
+ referencedPaths.add(path);
209
+ }
210
+ }
211
+ const hasTextClause = (source.text ?? definition.text) !== undefined;
212
+ for (const path of referencedPaths) {
213
+ if (TEXT_SCORE_FIELDS.has(path)) {
214
+ if (!hasTextClause) {
215
+ throw new types_1.MindooQueryError(`Expression references "${path}", but source "${source.origin}" has no 'text' clause — ` +
216
+ `text scores only exist for full-text pre-filtered views.`);
217
+ }
218
+ continue;
219
+ }
220
+ if (!source.summary.isFieldCovered(path)) {
221
+ throw new types_1.MindooQueryError(`Field "${path}" is not covered by the summary configuration of source "${source.origin}" ` +
222
+ `(check include/exclude in SummaryConfig).`);
223
+ }
224
+ }
225
+ }
226
+ }
227
+ /**
228
+ * Build an ephemeral, summary-backed VirtualView over a single database
229
+ * and run its initial update. See {@link EphemeralSummaryView}.
230
+ */
231
+ async function createEphemeralSummaryView(db, summary, definition, options) {
232
+ const view = new EphemeralSummaryView([{ db, summary, origin: defaultEphemeralOrigin(db) }], definition);
233
+ await view.update(options);
234
+ return view;
235
+ }
236
+ /**
237
+ * Build an ephemeral, summary-backed VirtualView spanning MULTIPLE
238
+ * databases — and, since every source brings its own tenant context, even
239
+ * multiple tenants. Each source contributes entries under its own origin
240
+ * from its own summary buffer; no documents are materialized anywhere.
241
+ *
242
+ * ```typescript
243
+ * const view = await queryViewAcross(
244
+ * [
245
+ * { db: salesDb },
246
+ * { db: archiveDb, filter: v.eq(v.field("year"), 2025) },
247
+ * ],
248
+ * {
249
+ * filter: v.eq(v.field("type"), "deal"),
250
+ * columns: [
251
+ * VirtualViewColumn.category("region"),
252
+ * VirtualViewColumn.sorted("amount", ColumnSorting.DESCENDING),
253
+ * ],
254
+ * }
255
+ * );
256
+ * ```
257
+ *
258
+ * A per-source `filter` replaces the definition-level filter for that
259
+ * source. `bindTo()` subscribes to the change feeds of all sources.
260
+ */
261
+ async function queryViewAcross(sources, definition, options) {
262
+ const view = new EphemeralSummaryView(resolveSources(sources), definition);
263
+ await view.update(options);
264
+ return view;
265
+ }
266
+ //# sourceMappingURL=queryView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryView.js","sourceRoot":"","sources":["../../../src/core/query/queryView.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import type { MindooDBAppBooleanExpression, MindooDBAppExpression } from "../expressions/types";
2
+ import type { SummaryCoverage } from "../indexing/summary/types";
3
+ import type { VirtualViewUpdateOptions } from "../indexing/virtualviews/IVirtualViewDataProvider";
4
+ /**
5
+ * One sort key of a {@link MindooQuery}. Either a plain summary field
6
+ * path, a computed expression (evaluated per row before comparison), or a
7
+ * special pseudo-key (`{ special: "textScore" }` sorts by the full-text
8
+ * relevance score of the {@link MindooQuery.text} clause).
9
+ */
10
+ export interface MindooQuerySortKey {
11
+ field?: string;
12
+ expression?: MindooDBAppExpression;
13
+ /**
14
+ * `"textScore"`: sort by the relevance score of the query's `text`
15
+ * clause (only meaningful together with one). Direction defaults to the
16
+ * regular `direction` field — note that for pure relevance ranking you
17
+ * usually want `descending` (best match first), which is also the
18
+ * implicit default ordering when a `text` clause is present and no
19
+ * `sortBy` was given.
20
+ */
21
+ special?: "textScore";
22
+ direction?: "ascending" | "descending";
23
+ }
24
+ /**
25
+ * Full-text clause of a {@link MindooQuery}: matches documents through
26
+ * the database's full-text index (see docs/fulltext-search.md) and makes
27
+ * a relevance score available for sorting (`{ special: "textScore" }`).
28
+ * Requires full-text indexing to be enabled for the database — otherwise
29
+ * the query fails with `fulltext-not-enabled` (no silent full scan).
30
+ */
31
+ export interface MindooQueryTextClause {
32
+ /** The search string (tokenized like indexed content). */
33
+ query: string;
34
+ /**
35
+ * Restrict matching to these index fields (document field paths, plus
36
+ * the synthetic `_attachments` field). Default: all indexed fields.
37
+ */
38
+ fields?: string[];
39
+ /** Match term prefixes (`"drag"` matches `"dragon"`). Default: `true`. */
40
+ prefix?: boolean;
41
+ /** Fuzzy matching tolerance (see `FulltextSearchOptions.fuzzy`). Default: `false`. */
42
+ fuzzy?: boolean | number;
43
+ /** How multiple terms combine: `"AND"` (default) or `"OR"`. */
44
+ combineWith?: "AND" | "OR";
45
+ }
46
+ /**
47
+ * An ad-hoc query over the document summary buffer (see
48
+ * docs/adhoc-queries.md).
49
+ *
50
+ * The filter IS an expression of the MindooDB expression language — built
51
+ * with `createViewLanguage()` or parsed from formula text with
52
+ * `parseMindooDBFormulaBooleanExpression()` — so query definitions are
53
+ * plain JSON and travel safely across process boundaries.
54
+ */
55
+ export interface MindooQuery {
56
+ filter?: MindooDBAppBooleanExpression;
57
+ /**
58
+ * Full-text clause: additionally require documents to match this
59
+ * full-text search (combined with `filter` as a logical AND). Adds a
60
+ * relevance score per row (`MindooQueryRow.textScore`); without an
61
+ * explicit `sortBy`, results are ordered best score first.
62
+ */
63
+ text?: MindooQueryTextClause;
64
+ sortBy?: MindooQuerySortKey[];
65
+ limit?: number;
66
+ offset?: number;
67
+ /**
68
+ * Projection: restrict the fields returned per row. Defaults to all
69
+ * summary fields of the matching document.
70
+ */
71
+ fields?: string[];
72
+ }
73
+ export interface MindooQueryOptions extends VirtualViewUpdateOptions {
74
+ /**
75
+ * Escape hatch: materialize every document via the changefeed instead of
76
+ * querying the summary buffer. Removes the summary coverage requirement
77
+ * and allows `decrypt` expressions, but costs a full document scan —
78
+ * document as expensive, use only for one-off/administrative queries.
79
+ */
80
+ allowFullScan?: boolean;
81
+ }
82
+ export interface MindooQueryRow {
83
+ docId: string;
84
+ fields: Record<string, unknown>;
85
+ lastModified: number;
86
+ /**
87
+ * Relevance score of the query's `text` clause (higher = better
88
+ * match). Only present when the query had a `text` clause.
89
+ */
90
+ textScore?: number;
91
+ }
92
+ /**
93
+ * Which data answered the query: `"full"`/`"rebuilding"` from the summary
94
+ * buffer (see {@link SummaryCoverage}), `"full-scan"` when documents were
95
+ * materialized via `allowFullScan`.
96
+ */
97
+ export type MindooQueryCoverage = SummaryCoverage | "full-scan";
98
+ export interface MindooQueryResult {
99
+ rows: MindooQueryRow[];
100
+ /** Number of matching documents before `offset`/`limit` were applied. */
101
+ total: number;
102
+ coverage: MindooQueryCoverage;
103
+ }
104
+ /**
105
+ * Machine-readable reason codes for {@link MindooQueryError}. Currently
106
+ * only `"fulltext-not-enabled"` (a `text` clause on a database without an
107
+ * enabled full-text index) is distinguished; other failures carry no code.
108
+ */
109
+ export type MindooQueryErrorCode = "fulltext-not-enabled";
110
+ /**
111
+ * Thrown for queries that cannot be answered: referenced fields outside the
112
+ * summary coverage, `decrypt`/view-tree expressions without
113
+ * `allowFullScan`, a `text` clause without an enabled full-text index,
114
+ * or an aborted run.
115
+ */
116
+ export declare class MindooQueryError extends Error {
117
+ /** Machine-readable reason, when one is defined for the failure. */
118
+ readonly code?: MindooQueryErrorCode;
119
+ constructor(message: string, code?: MindooQueryErrorCode);
120
+ }
121
+ //# sourceMappingURL=types.d.ts.map