@noy-db/hub 0.7.1-pre.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (812) hide show
  1. package/CHANGELOG.md +147 -14
  2. package/LICENSE +202 -21
  3. package/NOTICE +1 -0
  4. package/README.md +5 -5
  5. package/codemods/0.8.0-pre.json +61 -0
  6. package/dist/api-OS747DS4.js +18 -0
  7. package/dist/as/index.js +11 -12
  8. package/dist/as/index.js.map +1 -1
  9. package/dist/at/index.js +9 -10
  10. package/dist/attestation/index.js +37 -26
  11. package/dist/attestation/index.js.map +1 -1
  12. package/dist/{backup-XKCXVKV3.js → backup-YE2VQ26S.js} +15 -16
  13. package/dist/backup-YE2VQ26S.js.map +1 -0
  14. package/dist/blobs/index.js +13 -14
  15. package/dist/blobs/index.js.map +1 -1
  16. package/dist/broker/index.js +12 -13
  17. package/dist/broker/index.js.map +1 -1
  18. package/dist/by/index.js +2 -2
  19. package/dist/capsule/contract.d.ts +159 -0
  20. package/dist/capsule/contract.js +95 -0
  21. package/dist/capsule/enclave-aes/bound.d.ts +52 -0
  22. package/dist/capsule/enclave-aes/capabilities.d.ts +2 -0
  23. package/dist/capsule/enclave-aes/classify/compare.d.ts +20 -0
  24. package/dist/{kernel/enclave → capsule/enclave-aes}/classify/find.d.ts +1 -1
  25. package/dist/{kernel/enclave → capsule/enclave-aes}/classify/reveal.d.ts +1 -1
  26. package/dist/{kernel/enclave → capsule/enclave-aes}/classify/verify.d.ts +2 -2
  27. package/dist/{kernel/enclave → capsule/enclave-aes}/classify/write.d.ts +1 -1
  28. package/dist/{kernel/enclave → capsule/enclave-aes}/crypto.d.ts +33 -129
  29. package/dist/capsule/enclave-aes/index.d.ts +113 -0
  30. package/dist/capsule/enclave-aes/index.js +335 -0
  31. package/dist/capsule/enclave-aes/index.js.map +1 -0
  32. package/dist/capsule/enclave-aes/primitives.d.ts +29 -0
  33. package/dist/capsule/index.d.ts +27 -0
  34. package/dist/capsule/plumbing/ct-equal.d.ts +11 -0
  35. package/dist/{kernel/enclave/record-keys → capsule/plumbing}/deterministic.d.ts +8 -21
  36. package/dist/capsule/plumbing/digest.d.ts +122 -0
  37. package/dist/{kernel/enclave/record-keys → capsule/plumbing}/envelope-body.d.ts +44 -48
  38. package/dist/capsule/plumbing/index.d.ts +100 -0
  39. package/dist/capsule/plumbing/lifecycle.d.ts +50 -0
  40. package/dist/{kernel/enclave/record-keys → capsule/plumbing}/record-codec.d.ts +80 -20
  41. package/dist/{kernel/enclave → capsule/plumbing}/record-envelope.d.ts +1 -1
  42. package/dist/capsule/plumbing/rekey-blob.d.ts +33 -0
  43. package/dist/capsule/plumbing/rekey.d.ts +44 -0
  44. package/dist/capsule/plumbing/sealed-slot.d.ts +22 -0
  45. package/dist/capsule/plumbing/sealed-slots.d.ts +37 -0
  46. package/dist/capsule/plumbing/sealing.d.ts +29 -0
  47. package/dist/capsule/plumbing/sign.d.ts +9 -0
  48. package/dist/{kernel/enclave/record-keys → capsule/plumbing}/tombstone.d.ts +2 -2
  49. package/dist/capsule-VOLX3QRQ.js +209 -0
  50. package/dist/cargo/index.js +39 -36
  51. package/dist/{chunk-Q2MPFCQ7.js → chunk-23D6M6VM.js} +5 -5
  52. package/dist/chunk-23D6M6VM.js.map +1 -0
  53. package/dist/{chunk-R7BX2NB3.js → chunk-244QBK7Z.js} +4 -4
  54. package/dist/chunk-244QBK7Z.js.map +1 -0
  55. package/dist/chunk-2AFX33YA.js +936 -0
  56. package/dist/chunk-2AFX33YA.js.map +1 -0
  57. package/dist/{chunk-MVMXZYXT.js → chunk-2GHDLTPE.js} +2 -2
  58. package/dist/{chunk-GYGLAVCX.js → chunk-2MG3SW7Q.js} +6 -2
  59. package/dist/chunk-2MG3SW7Q.js.map +1 -0
  60. package/dist/{chunk-XLMEZIAJ.js → chunk-2ODVB6LZ.js} +2 -2
  61. package/dist/{chunk-HJUWN7JN.js → chunk-2PVXF5CS.js} +33 -8
  62. package/dist/chunk-2PVXF5CS.js.map +1 -0
  63. package/dist/{chunk-YJRT5UQM.js → chunk-2RH777HH.js} +21 -20
  64. package/dist/{chunk-YJRT5UQM.js.map → chunk-2RH777HH.js.map} +1 -1
  65. package/dist/{chunk-7O3Y4PPD.js → chunk-37EPTBBR.js} +153 -16
  66. package/dist/chunk-37EPTBBR.js.map +1 -0
  67. package/dist/{chunk-2ENE6445.js → chunk-3A5DUZ56.js} +102 -16
  68. package/dist/chunk-3A5DUZ56.js.map +1 -0
  69. package/dist/chunk-3EWS67C7.js +461 -0
  70. package/dist/chunk-3EWS67C7.js.map +1 -0
  71. package/dist/{chunk-SGZAIJCV.js → chunk-3L2NBKDR.js} +4 -8
  72. package/dist/chunk-3L2NBKDR.js.map +1 -0
  73. package/dist/{chunk-YMUFFJCO.js → chunk-3TDUWVWB.js} +5 -2
  74. package/dist/chunk-3TDUWVWB.js.map +1 -0
  75. package/dist/{chunk-4GVM6QZA.js → chunk-3XJQBBZD.js} +26 -28
  76. package/dist/chunk-3XJQBBZD.js.map +1 -0
  77. package/dist/{chunk-4ZS56W5S.js → chunk-42ALPZ2B.js} +672 -664
  78. package/dist/chunk-42ALPZ2B.js.map +1 -0
  79. package/dist/chunk-4CIQDWRB.js +524 -0
  80. package/dist/chunk-4CIQDWRB.js.map +1 -0
  81. package/dist/{chunk-RMS3NEA3.js → chunk-4JPMZTJY.js} +2 -2
  82. package/dist/{chunk-P3MG6QCN.js → chunk-4T3SE27M.js} +5 -9
  83. package/dist/chunk-4T3SE27M.js.map +1 -0
  84. package/dist/chunk-4V3Q35WG.js +204 -0
  85. package/dist/chunk-4V3Q35WG.js.map +1 -0
  86. package/dist/{chunk-NQKIUNW5.js → chunk-52MGURXO.js} +2 -2
  87. package/dist/{chunk-EQEYOJBM.js → chunk-5A4345TG.js} +4 -4
  88. package/dist/chunk-5A4345TG.js.map +1 -0
  89. package/dist/{chunk-334WSVOW.js → chunk-5FE75J4S.js} +6 -6
  90. package/dist/chunk-5FE75J4S.js.map +1 -0
  91. package/dist/chunk-5KC7QYEC.js +565 -0
  92. package/dist/chunk-5KC7QYEC.js.map +1 -0
  93. package/dist/{chunk-RSGLUIO6.js → chunk-5UMK7GRI.js} +13 -12
  94. package/dist/chunk-5UMK7GRI.js.map +1 -0
  95. package/dist/chunk-5WWDGFOS.js +275 -0
  96. package/dist/chunk-5WWDGFOS.js.map +1 -0
  97. package/dist/{chunk-QPQUVOZ2.js → chunk-6QVKPHBF.js} +3 -5
  98. package/dist/chunk-6QVKPHBF.js.map +1 -0
  99. package/dist/{chunk-ACAQ2DSG.js → chunk-747G6CT3.js} +2 -2
  100. package/dist/chunk-747G6CT3.js.map +1 -0
  101. package/dist/{chunk-QTQUH4DS.js → chunk-7R2Q7CPL.js} +16 -16
  102. package/dist/chunk-7R2Q7CPL.js.map +1 -0
  103. package/dist/{chunk-UGTBXF5U.js → chunk-7XMHMVTS.js} +3 -3
  104. package/dist/{chunk-YJX7EOJD.js → chunk-A4XMIZT3.js} +6 -6
  105. package/dist/{chunk-YJX7EOJD.js.map → chunk-A4XMIZT3.js.map} +1 -1
  106. package/dist/{chunk-A66I4JOA.js → chunk-AEQGFRU4.js} +4 -4
  107. package/dist/chunk-AEQGFRU4.js.map +1 -0
  108. package/dist/chunk-AL6ML4LA.js +1558 -0
  109. package/dist/chunk-AL6ML4LA.js.map +1 -0
  110. package/dist/{chunk-BZ3534YM.js → chunk-AUKKUPVB.js} +2 -2
  111. package/dist/{chunk-CUZLNGD5.js → chunk-B2YY6WDD.js} +1 -1
  112. package/dist/chunk-B2YY6WDD.js.map +1 -0
  113. package/dist/chunk-BKT776R5.js +1 -0
  114. package/dist/chunk-BNWA3WG5.js +22 -0
  115. package/dist/chunk-BNWA3WG5.js.map +1 -0
  116. package/dist/{chunk-VXANTWBJ.js → chunk-BPWYQ25R.js} +92 -6
  117. package/dist/{chunk-VXANTWBJ.js.map → chunk-BPWYQ25R.js.map} +1 -1
  118. package/dist/{chunk-6LKOJBV6.js → chunk-BVCUTXE3.js} +2 -2
  119. package/dist/chunk-CY2CYVWZ.js +41 -0
  120. package/dist/chunk-CY2CYVWZ.js.map +1 -0
  121. package/dist/{chunk-M4YPHYEH.js → chunk-DHHGL42E.js} +70 -25
  122. package/dist/chunk-DHHGL42E.js.map +1 -0
  123. package/dist/{chunk-VTFVLCUH.js → chunk-DIZLQVAA.js} +2 -2
  124. package/dist/{chunk-G73UVHCA.js → chunk-DLD5LGDS.js} +11 -12
  125. package/dist/chunk-DLD5LGDS.js.map +1 -0
  126. package/dist/{chunk-WQBG4SZS.js → chunk-DQESF6RP.js} +60 -49
  127. package/dist/chunk-DQESF6RP.js.map +1 -0
  128. package/dist/{chunk-LWBCUYZW.js → chunk-E2N2T5ZO.js} +2 -2
  129. package/dist/{chunk-3PGS7TYR.js → chunk-EGVJ7TM4.js} +29 -32
  130. package/dist/chunk-EGVJ7TM4.js.map +1 -0
  131. package/dist/{chunk-JVIBCBC7.js → chunk-EJLV62NI.js} +2 -2
  132. package/dist/{chunk-KKEESNPE.js → chunk-EYG2CY2X.js} +126 -19
  133. package/dist/chunk-EYG2CY2X.js.map +1 -0
  134. package/dist/{enclave-55PAM4YO.js → chunk-EZGV6F47.js} +83 -56
  135. package/dist/chunk-EZGV6F47.js.map +1 -0
  136. package/dist/{chunk-CHQCZZWC.js → chunk-EZOAKKTB.js} +36 -27
  137. package/dist/chunk-EZOAKKTB.js.map +1 -0
  138. package/dist/chunk-F6NCB7KT.js +13 -0
  139. package/dist/chunk-F6NCB7KT.js.map +1 -0
  140. package/dist/chunk-FFJFE4T7.js +100 -0
  141. package/dist/chunk-FFJFE4T7.js.map +1 -0
  142. package/dist/{chunk-JMGDHKQF.js → chunk-FLPCETP6.js} +2 -2
  143. package/dist/chunk-FOEDQATO.js +53 -0
  144. package/dist/chunk-FOEDQATO.js.map +1 -0
  145. package/dist/{chunk-DGOZ4UZD.js → chunk-FVH5QYY2.js} +2 -2
  146. package/dist/{chunk-HIWCKBEY.js → chunk-G2MVBDFP.js} +54 -28
  147. package/dist/chunk-G2MVBDFP.js.map +1 -0
  148. package/dist/chunk-GMKGGY7V.js +234 -0
  149. package/dist/chunk-GMKGGY7V.js.map +1 -0
  150. package/dist/{chunk-EIPVYUEP.js → chunk-GQ4MF3CM.js} +3 -3
  151. package/dist/chunk-GQ4MF3CM.js.map +1 -0
  152. package/dist/{chunk-PEOZ34EM.js → chunk-GSAK56VF.js} +1 -1
  153. package/dist/chunk-GSAK56VF.js.map +1 -0
  154. package/dist/{chunk-5VCRVKOZ.js → chunk-GUZET4SG.js} +12 -4
  155. package/dist/chunk-GUZET4SG.js.map +1 -0
  156. package/dist/{chunk-JBDFMYKQ.js → chunk-GZT3NQRA.js} +2 -2
  157. package/dist/{chunk-K23VKTN4.js → chunk-H23XHRTT.js} +19 -34
  158. package/dist/chunk-H23XHRTT.js.map +1 -0
  159. package/dist/{chunk-TFR7DSOV.js → chunk-H427H63K.js} +2 -2
  160. package/dist/{chunk-DFMWUOU5.js → chunk-H7JBY4P7.js} +23 -32
  161. package/dist/chunk-H7JBY4P7.js.map +1 -0
  162. package/dist/{chunk-SKGMN35F.js → chunk-HS554XAF.js} +3 -3
  163. package/dist/chunk-HS554XAF.js.map +1 -0
  164. package/dist/{chunk-HK67PX4J.js → chunk-HW7CMKUG.js} +1 -1
  165. package/dist/chunk-HW7CMKUG.js.map +1 -0
  166. package/dist/{chunk-3BVH633C.js → chunk-IMQKWR46.js} +5 -7
  167. package/dist/chunk-IMQKWR46.js.map +1 -0
  168. package/dist/{chunk-R42NSZI6.js → chunk-IUBMZPHM.js} +7 -7
  169. package/dist/chunk-IUBMZPHM.js.map +1 -0
  170. package/dist/{chunk-CUQPWYRX.js → chunk-IUT3GWP3.js} +75 -386
  171. package/dist/chunk-IUT3GWP3.js.map +1 -0
  172. package/dist/{chunk-RF6D3Y5E.js → chunk-JDEYF3PJ.js} +4 -8
  173. package/dist/{chunk-RF6D3Y5E.js.map → chunk-JDEYF3PJ.js.map} +1 -1
  174. package/dist/{chunk-PPTHY5QO.js → chunk-JIBUPZHA.js} +99 -8
  175. package/dist/chunk-JIBUPZHA.js.map +1 -0
  176. package/dist/{chunk-SMH6SRX7.js → chunk-JOSPH3E5.js} +2 -2
  177. package/dist/chunk-JQYKPKG6.js +193 -0
  178. package/dist/chunk-JQYKPKG6.js.map +1 -0
  179. package/dist/{chunk-7APJ6CO6.js → chunk-JSMTXZR3.js} +45 -13
  180. package/dist/chunk-JSMTXZR3.js.map +1 -0
  181. package/dist/chunk-JWWYRR4Q.js +12 -0
  182. package/dist/chunk-JWWYRR4Q.js.map +1 -0
  183. package/dist/{chunk-BVN6KXL2.js → chunk-KZXDLBY6.js} +14 -9
  184. package/dist/chunk-KZXDLBY6.js.map +1 -0
  185. package/dist/chunk-LGNDFRYC.js +23 -0
  186. package/dist/chunk-LGNDFRYC.js.map +1 -0
  187. package/dist/{chunk-XKWGNJ26.js → chunk-LIOVX5TJ.js} +7 -11
  188. package/dist/chunk-LIOVX5TJ.js.map +1 -0
  189. package/dist/{chunk-AYX7AINO.js → chunk-LNSVGRHO.js} +5 -7
  190. package/dist/chunk-LNSVGRHO.js.map +1 -0
  191. package/dist/chunk-M5B2W6YY.js +293 -0
  192. package/dist/chunk-M5B2W6YY.js.map +1 -0
  193. package/dist/chunk-MBMTND6D.js +456 -0
  194. package/dist/chunk-MBMTND6D.js.map +1 -0
  195. package/dist/{chunk-3BZZJJMQ.js → chunk-MILI22XQ.js} +3 -3
  196. package/dist/{chunk-A2HKRLPV.js → chunk-MXKI4ABF.js} +18 -59
  197. package/dist/chunk-MXKI4ABF.js.map +1 -0
  198. package/dist/{chunk-ZYIYHJ5R.js → chunk-MXOQ5JCG.js} +869 -238
  199. package/dist/chunk-MXOQ5JCG.js.map +1 -0
  200. package/dist/{chunk-V7ZRRCRJ.js → chunk-N7EVQD5S.js} +9 -13
  201. package/dist/chunk-N7EVQD5S.js.map +1 -0
  202. package/dist/chunk-N7UDP5VU.js +757 -0
  203. package/dist/chunk-N7UDP5VU.js.map +1 -0
  204. package/dist/chunk-NBQ3KK6X.js +270 -0
  205. package/dist/chunk-NBQ3KK6X.js.map +1 -0
  206. package/dist/{chunk-ZORTV6NH.js → chunk-NCO25JZO.js} +88 -4
  207. package/dist/chunk-NCO25JZO.js.map +1 -0
  208. package/dist/chunk-NH2UOV3B.js +18 -0
  209. package/dist/chunk-NH2UOV3B.js.map +1 -0
  210. package/dist/chunk-NYMLINRP.js +28 -0
  211. package/dist/chunk-NYMLINRP.js.map +1 -0
  212. package/dist/{chunk-YYP7WSEB.js → chunk-O2IMQSNA.js} +2 -2
  213. package/dist/chunk-O46CHQT7.js +215 -0
  214. package/dist/chunk-O46CHQT7.js.map +1 -0
  215. package/dist/chunk-OIEO4WDL.js +27 -0
  216. package/dist/chunk-OIEO4WDL.js.map +1 -0
  217. package/dist/{chunk-TRGTKX5E.js → chunk-OKSTSITU.js} +27 -4
  218. package/dist/chunk-OKSTSITU.js.map +1 -0
  219. package/dist/chunk-OYW3I5M4.js +31 -0
  220. package/dist/chunk-OYW3I5M4.js.map +1 -0
  221. package/dist/{chunk-Q7HZX3IF.js → chunk-PD64727P.js} +2 -2
  222. package/dist/chunk-PD64727P.js.map +1 -0
  223. package/dist/{chunk-FET5XCAT.js → chunk-PP3K67AJ.js} +34 -6
  224. package/dist/chunk-PP3K67AJ.js.map +1 -0
  225. package/dist/chunk-Q2XRFWOI.js +40 -0
  226. package/dist/chunk-Q2XRFWOI.js.map +1 -0
  227. package/dist/{chunk-QIZPZMUI.js → chunk-Q4UHJ5SN.js} +2 -2
  228. package/dist/{chunk-FAHMLERK.js → chunk-QBLT6POL.js} +2 -2
  229. package/dist/chunk-QMWY2FDS.js +157 -0
  230. package/dist/chunk-QMWY2FDS.js.map +1 -0
  231. package/dist/{chunk-LH5A3ZPG.js → chunk-RB4DOPGZ.js} +150 -22
  232. package/dist/chunk-RB4DOPGZ.js.map +1 -0
  233. package/dist/chunk-RHVMZSUU.js +7 -0
  234. package/dist/chunk-RHVMZSUU.js.map +1 -0
  235. package/dist/{chunk-BUE2D7PX.js → chunk-SMV2HRDU.js} +2 -2
  236. package/dist/chunk-SUZKW6UR.js +25 -0
  237. package/dist/chunk-SUZKW6UR.js.map +1 -0
  238. package/dist/{chunk-7MG7SJT7.js → chunk-SV2PM2OY.js} +1 -1
  239. package/dist/chunk-SV2PM2OY.js.map +1 -0
  240. package/dist/{chunk-UXVWEX5L.js → chunk-SYNY3VB5.js} +6 -2
  241. package/dist/chunk-SYNY3VB5.js.map +1 -0
  242. package/dist/{chunk-4GFX6MPA.js → chunk-TEHHROZL.js} +6 -8
  243. package/dist/chunk-TEHHROZL.js.map +1 -0
  244. package/dist/chunk-TKVUE4JF.js +1289 -0
  245. package/dist/chunk-TKVUE4JF.js.map +1 -0
  246. package/dist/{chunk-SFAWCTEM.js → chunk-TZZBXPZK.js} +2 -2
  247. package/dist/{chunk-F3W6YMDC.js → chunk-U2FZNEWJ.js} +4 -4
  248. package/dist/chunk-U2FZNEWJ.js.map +1 -0
  249. package/dist/{chunk-BLN54W3L.js → chunk-UA372JHH.js} +56 -3
  250. package/dist/chunk-UA372JHH.js.map +1 -0
  251. package/dist/{chunk-6YXCPL4T.js → chunk-UEFOQH74.js} +2 -2
  252. package/dist/chunk-UEFOQH74.js.map +1 -0
  253. package/dist/{chunk-2N5ML6HT.js → chunk-UIYESRD6.js} +9 -11
  254. package/dist/chunk-UIYESRD6.js.map +1 -0
  255. package/dist/{chunk-UHHPLO3I.js → chunk-V3RWOOSO.js} +4 -4
  256. package/dist/{chunk-KTFRCC5C.js → chunk-V7ADQF5O.js} +82 -8
  257. package/dist/chunk-V7ADQF5O.js.map +1 -0
  258. package/dist/{chunk-453F654R.js → chunk-VAORSCSU.js} +3 -3
  259. package/dist/chunk-VAORSCSU.js.map +1 -0
  260. package/dist/{chunk-GPNTB4Y7.js → chunk-VFHCKG5M.js} +6 -10
  261. package/dist/chunk-VFHCKG5M.js.map +1 -0
  262. package/dist/{chunk-2577DKXB.js → chunk-VHBKYN2J.js} +3 -3
  263. package/dist/chunk-VHBKYN2J.js.map +1 -0
  264. package/dist/chunk-VHM7HCKB.js +220 -0
  265. package/dist/chunk-VHM7HCKB.js.map +1 -0
  266. package/dist/{chunk-ZHKOPKE3.js → chunk-VKI2EB3N.js} +3 -3
  267. package/dist/chunk-VKI2EB3N.js.map +1 -0
  268. package/dist/{chunk-UDHWDSRL.js → chunk-VMV5SBE4.js} +16 -17
  269. package/dist/chunk-VMV5SBE4.js.map +1 -0
  270. package/dist/{chunk-SPYWXKJN.js → chunk-VQDZYB2B.js} +3 -3
  271. package/dist/chunk-VQDZYB2B.js.map +1 -0
  272. package/dist/{chunk-Q2PU57HC.js → chunk-VVOLDVIR.js} +2 -2
  273. package/dist/{chunk-3VF3WQ4F.js → chunk-WPOYWFSE.js} +7 -7
  274. package/dist/{chunk-3VF3WQ4F.js.map → chunk-WPOYWFSE.js.map} +1 -1
  275. package/dist/{chunk-OTQZ7ZWU.js → chunk-WXE4W2U6.js} +7 -11
  276. package/dist/chunk-WXE4W2U6.js.map +1 -0
  277. package/dist/chunk-XBKH4FOC.js +195 -0
  278. package/dist/chunk-XBKH4FOC.js.map +1 -0
  279. package/dist/{chunk-TUFM4UZP.js → chunk-XQRFSKYM.js} +2 -2
  280. package/dist/{chunk-3V4KWFX7.js → chunk-XSPFDUDG.js} +58 -53
  281. package/dist/chunk-XSPFDUDG.js.map +1 -0
  282. package/dist/{chunk-GY4WYNNG.js → chunk-Y2RKVFKR.js} +2 -2
  283. package/dist/{chunk-UP4BECPY.js → chunk-Y3LPTBG7.js} +89 -27
  284. package/dist/chunk-Y3LPTBG7.js.map +1 -0
  285. package/dist/{chunk-4OZNXTO4.js → chunk-YRXFFWG4.js} +2 -2
  286. package/dist/classified/index.js +5 -5
  287. package/dist/{classified-marker-BWOFVYAC.js → classified-marker-SIYKUU5L.js} +3 -3
  288. package/dist/classified-marker-SIYKUU5L.js.map +1 -0
  289. package/dist/collection-facade-CS7CA2XO.js +47 -0
  290. package/dist/{computed-VPOKQK4N.js → computed-FAD7SED4.js} +3 -3
  291. package/dist/consent/index.js +10 -11
  292. package/dist/consent/index.js.map +1 -1
  293. package/dist/cover/index.js +10 -11
  294. package/dist/coverage/index.js +306 -0
  295. package/dist/coverage/index.js.map +1 -0
  296. package/dist/custody/index.js +12 -13
  297. package/dist/{dead-filter-PKQDLOT4.js → dead-filter-4F3LWYKH.js} +11 -3
  298. package/dist/dead-filter-4F3LWYKH.js.map +1 -0
  299. package/dist/debug/index.js +11 -2
  300. package/dist/debug/index.js.map +1 -1
  301. package/dist/{delegation-DS5NRILW.js → delegation-NANZDG4N.js} +13 -16
  302. package/dist/delegation-NANZDG4N.js.map +1 -0
  303. package/dist/derivations/index.js +25 -23
  304. package/dist/derive-XLOJVXPU.js +20 -0
  305. package/dist/directory/index.js +10 -11
  306. package/dist/{dispatch-IEPAVQUM.js → dispatch-H4HV32AM.js} +5 -5
  307. package/dist/{dispatch-Q6MWLOJY.js → dispatch-JDZNGEB3.js} +20 -21
  308. package/dist/dispatch-JDZNGEB3.js.map +1 -0
  309. package/dist/executor-FMPVN6DT.js +35 -0
  310. package/dist/executor-LBBBRTN5.js +8 -0
  311. package/dist/executor-OSRZST2U.js +8 -0
  312. package/dist/export-accessible-RAOJAAU5.js +22 -0
  313. package/dist/extract-partition-JD5CUSTG.js +37 -0
  314. package/dist/{fanout-sidecar-S3QL53YX.js → fanout-sidecar-L7NHPIOC.js} +13 -15
  315. package/dist/fanout-sidecar-L7NHPIOC.js.map +1 -0
  316. package/dist/find-JRN4RNQ5.js +10 -0
  317. package/dist/forget/index.js +9 -10
  318. package/dist/forget/index.js.map +1 -1
  319. package/dist/guards/index.js +4 -4
  320. package/dist/history/index.js +13 -14
  321. package/dist/history/index.js.map +1 -1
  322. package/dist/i18n/index.js +14 -15
  323. package/dist/i18n/index.js.map +1 -1
  324. package/dist/index.d.ts +36 -14
  325. package/dist/index.js +970 -163
  326. package/dist/index.js.map +1 -1
  327. package/dist/indexing/index.js +13 -5
  328. package/dist/indexing/index.js.map +1 -1
  329. package/dist/introspection/index.js +11 -12
  330. package/dist/issue-YIVBZUTH.js +19 -0
  331. package/dist/ivf-flat-UZ6DQDLS.js +314 -0
  332. package/dist/ivf-flat-UZ6DQDLS.js.map +1 -0
  333. package/dist/{json-schema-V3M5MUCM.js → json-schema-3SHX72CC.js} +2 -1
  334. package/dist/json-schema-3SHX72CC.js.map +1 -0
  335. package/dist/kernel/attestation-types.d.ts +62 -0
  336. package/dist/kernel/collection-config.d.ts +5 -68
  337. package/dist/kernel/collection.d.ts +30 -9
  338. package/dist/kernel/cutover-transform.d.ts +1 -1
  339. package/dist/kernel/errors.d.ts +257 -38
  340. package/dist/kernel/generation-map.d.ts +48 -0
  341. package/dist/kernel/merge-authority.d.ts +1 -1
  342. package/dist/kernel/noydb.d.ts +6 -1
  343. package/dist/kernel/paths.d.ts +29 -5
  344. package/dist/kernel/prepared-write.d.ts +1 -1
  345. package/dist/kernel/present-cache.d.ts +58 -0
  346. package/dist/kernel/query/all.d.ts +7 -0
  347. package/dist/kernel/query/builder.d.ts +601 -270
  348. package/dist/kernel/query/civil-date.d.ts +64 -0
  349. package/dist/kernel/query/cursor.d.ts +40 -0
  350. package/dist/kernel/query/distinct-key.d.ts +98 -0
  351. package/dist/kernel/query/hydration.d.ts +76 -0
  352. package/dist/kernel/query/index.d.ts +31 -15
  353. package/dist/kernel/query/internal/core.d.ts +30 -0
  354. package/dist/kernel/query/internal/hooks.d.ts +22 -0
  355. package/dist/kernel/query/internal/maintenance.d.ts +43 -0
  356. package/dist/kernel/query/live/incremental.d.ts +314 -0
  357. package/dist/kernel/query/live/index.d.ts +22 -0
  358. package/dist/kernel/query/live/install.d.ts +2 -0
  359. package/dist/kernel/query/{live.d.ts → live/live.d.ts} +39 -9
  360. package/dist/kernel/query/live/methods.d.ts +107 -0
  361. package/dist/kernel/query/predicate.d.ts +119 -1
  362. package/dist/kernel/query/reduce/date-trunc.d.ts +75 -0
  363. package/dist/kernel/query/reduce/index.d.ts +36 -0
  364. package/dist/kernel/query/reduce/install.d.ts +2 -0
  365. package/dist/kernel/query/reduce/methods.d.ts +259 -0
  366. package/dist/kernel/query/reduce/scan-methods.d.ts +121 -0
  367. package/dist/kernel/query/relate/explain.d.ts +199 -0
  368. package/dist/kernel/query/relate/index.d.ts +48 -0
  369. package/dist/kernel/query/relate/install.d.ts +2 -0
  370. package/dist/kernel/query/relate/join-on.d.ts +126 -0
  371. package/dist/kernel/query/relate/join-reduce.d.ts +16 -0
  372. package/dist/kernel/query/relate/join.d.ts +452 -0
  373. package/dist/kernel/query/relate/methods.d.ts +426 -0
  374. package/dist/kernel/query/relate/partition.d.ts +87 -0
  375. package/dist/kernel/query/relate/scan-methods.d.ts +163 -0
  376. package/dist/kernel/query/relate/traverse.d.ts +109 -0
  377. package/dist/kernel/query/scan-builder.d.ts +79 -176
  378. package/dist/kernel/query/sort-key.d.ts +52 -0
  379. package/dist/kernel/secret-mode.d.ts +1 -1
  380. package/dist/kernel/tx-write-gate.d.ts +77 -0
  381. package/dist/kernel/types.d.ts +113 -8
  382. package/dist/kernel/validation.d.ts +27 -10
  383. package/dist/kernel/vault.d.ts +11 -6
  384. package/dist/kernel/via/compose.d.ts +3 -0
  385. package/dist/kernel/via/index.d.ts +56 -0
  386. package/dist/kernel/via/pipeline.d.ts +48 -0
  387. package/dist/kernel/write-queue.d.ts +17 -0
  388. package/dist/{ledger-EDXFFZQL.js → ledger-5ZMGE44K.js} +11 -12
  389. package/dist/liberate-WZSZM2W6.js +24 -0
  390. package/dist/link-set-MFXC24VK.js +29 -0
  391. package/dist/{managed-secret-NCWEMPUQ.js → managed-secret-MFTFT22X.js} +10 -11
  392. package/dist/materialized-views/index.js +30 -24
  393. package/dist/{migrate-cek-5ENH64AA.js → migrate-cek-DZRFFOHW.js} +2 -2
  394. package/dist/money/index.js +5 -5
  395. package/dist/noydb-ITIGNKUF.js +96 -0
  396. package/dist/overlay-views/index.js +4 -4
  397. package/dist/periods/index.js +12 -13
  398. package/dist/pod/index.js +74 -67
  399. package/dist/{pod-handle-ECVCDIXW.js → pod-handle-A3LET7NO.js} +10 -11
  400. package/dist/pod-handle-A3LET7NO.js.map +1 -0
  401. package/dist/policy/index.js +10 -11
  402. package/dist/port/on/index.d.ts +1 -1
  403. package/dist/port/to/index.d.ts +1 -1
  404. package/dist/port/with/blob-strategy.d.ts +10 -1
  405. package/dist/port/with/classified-strategy.d.ts +1 -1
  406. package/dist/port/with/collection-options.d.ts +6 -1
  407. package/dist/port/with/collection-registries.d.ts +1 -1
  408. package/dist/port/with/coverage-strategy.d.ts +83 -0
  409. package/dist/port/with/lookup-strategy.d.ts +2 -2
  410. package/dist/port/with/service-bus.d.ts +46 -0
  411. package/dist/port/with/strategies.d.ts +2 -0
  412. package/dist/portability/index.js +8 -8
  413. package/dist/{post-register-3IPCSG6Q.js → post-register-7ND27CF2.js} +6 -6
  414. package/dist/post-register-7ND27CF2.js.map +1 -0
  415. package/dist/query/all/index.js +31 -0
  416. package/dist/query/index.js +20 -32
  417. package/dist/query/live/index.js +21 -0
  418. package/dist/query/live/index.js.map +1 -0
  419. package/dist/query/reduce/index.js +33 -0
  420. package/dist/query/reduce/index.js.map +1 -0
  421. package/dist/query/relate/index.js +56 -0
  422. package/dist/query/relate/index.js.map +1 -0
  423. package/dist/reduce/index.js +72 -18
  424. package/dist/reduce/index.js.map +1 -1
  425. package/dist/register-DT5HZ2LZ.js +30 -0
  426. package/dist/registry-BHRZGZHF.js +8 -0
  427. package/dist/registry-ET6ZFFWA.js +34 -0
  428. package/dist/registry-HXFGLGTG.js +8 -0
  429. package/dist/registry-THCPDEOD.js +23 -0
  430. package/dist/request-withdrawal-AV2MJJKY.js +30 -0
  431. package/dist/{reveal-QZDHSGD4.js → reveal-B2TLP4JQ.js} +10 -9
  432. package/dist/reveal-B2TLP4JQ.js.map +1 -0
  433. package/dist/revoke-6DWIEOCV.js +24 -0
  434. package/dist/satellites/index.js +1 -1
  435. package/dist/schema-update/index.js +2 -2
  436. package/dist/sealed-record/index.js +16 -18
  437. package/dist/sealed-record/index.js.map +1 -1
  438. package/dist/search/index.js +11 -5
  439. package/dist/{seed-X5CC22CQ.js → seed-XNSE4U3S.js} +15 -18
  440. package/dist/seed-XNSE4U3S.js.map +1 -0
  441. package/dist/sequence/index.js +9 -10
  442. package/dist/session/index.js +9 -10
  443. package/dist/session/index.js.map +1 -1
  444. package/dist/shadow/index.js +2 -2
  445. package/dist/signer-MHGW3OIL.js +23 -0
  446. package/dist/snapshots/index.js +11 -11
  447. package/dist/stale-6GCFMOOR.js +28 -0
  448. package/dist/storage-BYN5LO6Z.js +21 -0
  449. package/dist/storage-BYN5LO6Z.js.map +1 -0
  450. package/dist/store/index.js +1 -1
  451. package/dist/{store-coordination-provider-4WZAIRHC.js → store-coordination-provider-C4BPT5XF.js} +11 -12
  452. package/dist/store-coordination-provider-C4BPT5XF.js.map +1 -0
  453. package/dist/sync/index.js +10 -11
  454. package/dist/sync/index.js.map +1 -1
  455. package/dist/team/index.js +17 -16
  456. package/dist/tiers/index.js +13 -12
  457. package/dist/to/index.js +2 -2
  458. package/dist/transactions/index.js +3 -3
  459. package/dist/util/index.js +1 -1
  460. package/dist/vault-head/index.js +11 -14
  461. package/dist/vault-head/index.js.map +1 -1
  462. package/dist/{verify-6MDTIUEV.js → verify-UKALW7C2.js} +14 -12
  463. package/dist/verify-UKALW7C2.js.map +1 -0
  464. package/dist/via/blob/index.d.ts +1 -0
  465. package/dist/via/classified/binding.d.ts +2 -2
  466. package/dist/via/classified/config-drift.d.ts +2 -2
  467. package/dist/via/classified/errors.d.ts +1 -1
  468. package/dist/via/geo/binding.d.ts +31 -0
  469. package/dist/via/geo/descriptor.d.ts +54 -0
  470. package/dist/via/geo/geohash.d.ts +95 -0
  471. package/dist/via/geo/index.d.ts +13 -0
  472. package/dist/via/geo/where.d.ts +50 -0
  473. package/dist/via/i18n/core.d.ts +1 -1
  474. package/dist/via/lookup/handle.d.ts +4 -4
  475. package/dist/via/lookup/registry.d.ts +1 -1
  476. package/dist/via/lookup/snapshot.d.ts +3 -3
  477. package/dist/walk-4VPK7AS4.js +20 -0
  478. package/dist/walk-4VPK7AS4.js.map +1 -0
  479. package/dist/with-audit/attestation/index.d.ts +2 -1
  480. package/dist/with-audit/attestation/issue.d.ts +2 -2
  481. package/dist/with-audit/attestation/revoke.d.ts +2 -2
  482. package/dist/with-audit/attestation/scheme.d.ts +7 -0
  483. package/dist/with-audit/attestation/signer.d.ts +1 -1
  484. package/dist/with-audit/attestation/strategy.d.ts +2 -2
  485. package/dist/with-audit/attestation/types.d.ts +10 -0
  486. package/dist/with-audit/attestation/vault-facade.d.ts +2 -2
  487. package/dist/with-audit/attestation/verifier.d.ts +6 -0
  488. package/dist/with-audit/consent/consent.d.ts +1 -1
  489. package/dist/with-audit/consent/strategy.d.ts +1 -1
  490. package/dist/with-audit/coverage/accounting.d.ts +112 -0
  491. package/dist/with-audit/coverage/active.d.ts +29 -0
  492. package/dist/with-audit/coverage/index.d.ts +61 -0
  493. package/dist/with-audit/coverage/sketch.d.ts +75 -0
  494. package/dist/with-audit/forget/subject-index.d.ts +1 -1
  495. package/dist/with-audit/periods/periods.d.ts +55 -7
  496. package/dist/with-audit/periods/reserved-collections.d.ts +3 -0
  497. package/dist/with-audit/periods/vault-facade.d.ts +18 -1
  498. package/dist/with-audit/sealed-record/index.d.ts +2 -2
  499. package/dist/with-audit/sealed-record/strategy.d.ts +1 -1
  500. package/dist/with-audit/tiers/index.d.ts +53 -2
  501. package/dist/with-audit/tiers/strategy.d.ts +8 -0
  502. package/dist/with-cargo/adopt-partition.d.ts +1 -1
  503. package/dist/with-cargo/extract-partition.d.ts +1 -1
  504. package/dist/with-cargo/floor.d.ts +3 -3
  505. package/dist/with-commit/history/history.d.ts +2 -2
  506. package/dist/with-commit/history/index.d.ts +1 -1
  507. package/dist/with-commit/history/ledger/store.d.ts +1 -1
  508. package/dist/with-commit/history/strategy.d.ts +1 -1
  509. package/dist/with-commit/history/time-machine.d.ts +1 -1
  510. package/dist/with-commit/numbering/index.d.ts +1 -1
  511. package/dist/with-commit/sequence/index.d.ts +1 -1
  512. package/dist/with-commit/tx/invariants.d.ts +1 -1
  513. package/dist/with-commit/tx/transaction.d.ts +13 -3
  514. package/dist/with-commit/vault-head/head.d.ts +1 -1
  515. package/dist/with-commit/vault-head/index.d.ts +1 -1
  516. package/dist/with-commit/vault-head/strategy.d.ts +1 -1
  517. package/dist/with-commit/vault-head/verify.d.ts +1 -1
  518. package/dist/with-formula/derivations/dispatch.d.ts +1 -1
  519. package/dist/with-formula/derivations/fanout-sidecar.d.ts +1 -1
  520. package/dist/with-formula/materialized-views/dependency-analyzer.d.ts +4 -3
  521. package/dist/with-formula/materialized-views/emit-memo.d.ts +40 -0
  522. package/dist/with-formula/materialized-views/executor.d.ts +8 -0
  523. package/dist/with-formula/materialized-views/index.d.ts +1 -1
  524. package/dist/with-formula/materialized-views/registry.d.ts +15 -0
  525. package/dist/with-formula/materialized-views/types.d.ts +106 -14
  526. package/dist/with-formula/materialized-views/window-stage.d.ts +11 -0
  527. package/dist/with-formula/overlay-views/types.d.ts +1 -1
  528. package/dist/with-formula/overlay-views/virtual-collection.d.ts +13 -4
  529. package/dist/with-lookup/embeddings/chunks.d.ts +79 -0
  530. package/dist/with-lookup/embeddings/descriptor.d.ts +21 -0
  531. package/dist/with-lookup/embeddings/index.d.ts +3 -0
  532. package/dist/with-lookup/embeddings/ivf-flat.d.ts +93 -0
  533. package/dist/with-lookup/embeddings/vector-index.d.ts +73 -0
  534. package/dist/with-lookup/embeddings/vector-set.d.ts +94 -1
  535. package/dist/with-lookup/embeddings/with-vector-index.d.ts +67 -0
  536. package/dist/with-lookup/indexing/collection-facade.d.ts +86 -3
  537. package/dist/with-lookup/indexing/compound-indexes.d.ts +129 -0
  538. package/dist/with-lookup/indexing/eager-indexes.d.ts +170 -1
  539. package/dist/with-lookup/indexing/index-snapshot.d.ts +62 -0
  540. package/dist/with-lookup/indexing/lazy-builder.d.ts +33 -0
  541. package/dist/with-lookup/indexing/persisted-field-indexes.d.ts +104 -0
  542. package/dist/with-lookup/indexing/persisted-indexes.d.ts +12 -0
  543. package/dist/with-lookup/indexing/sorted-indexes.d.ts +117 -0
  544. package/dist/with-lookup/indexing/unique-constraints.d.ts +106 -23
  545. package/dist/with-lookup/reduce/active.d.ts +2 -24
  546. package/dist/with-lookup/reduce/group-core.d.ts +43 -0
  547. package/dist/with-lookup/reduce/groupby.d.ts +195 -36
  548. package/dist/with-lookup/reduce/incremental-group.d.ts +153 -0
  549. package/dist/with-lookup/reduce/index.d.ts +26 -5
  550. package/dist/with-lookup/reduce/reducers.d.ts +255 -1
  551. package/dist/with-lookup/reduce/reduction.d.ts +44 -13
  552. package/dist/with-lookup/reduce/strategy.d.ts +43 -3
  553. package/dist/with-lookup/reduce/window.d.ts +262 -0
  554. package/dist/with-lookup/search/collection-facade.d.ts +45 -9
  555. package/dist/with-lookup/search/index-store.d.ts +5 -3
  556. package/dist/with-lookup/search/index.d.ts +4 -2
  557. package/dist/with-lookup/search/inverted-index.d.ts +38 -2
  558. package/dist/with-lookup/search/persisted-index-store.d.ts +5 -2
  559. package/dist/with-lookup/search/phrase.d.ts +28 -0
  560. package/dist/with-lookup/search/retrieve-types.d.ts +57 -1
  561. package/dist/with-lookup/search/serialize.d.ts +29 -3
  562. package/dist/with-lookup/search/strategy.d.ts +2 -6
  563. package/dist/with-party/broker/index.d.ts +3 -3
  564. package/dist/with-party/directory/cover/index.d.ts +1 -1
  565. package/dist/with-party/directory/cover/storage.d.ts +1 -1
  566. package/dist/with-party/directory/cover/types.d.ts +1 -1
  567. package/dist/with-party/directory/index.d.ts +1 -1
  568. package/dist/with-party/directory/types.d.ts +1 -1
  569. package/dist/with-party/directory/user-envelope/api.d.ts +1 -1
  570. package/dist/with-party/directory/user-envelope/storage.d.ts +1 -1
  571. package/dist/with-party/policy/engine.d.ts +1 -1
  572. package/dist/with-party/policy/index.d.ts +1 -1
  573. package/dist/with-party/policy/presets.d.ts +1 -1
  574. package/dist/with-party/team/authenticators.d.ts +91 -1
  575. package/dist/with-party/team/delegation.d.ts +1 -1
  576. package/dist/with-party/team/echo-secret.d.ts +2 -2
  577. package/dist/with-party/team/index.d.ts +4 -3
  578. package/dist/with-party/team/keyring.d.ts +2 -2
  579. package/dist/with-party/team/magic-link-grant.d.ts +1 -1
  580. package/dist/with-party/team/managed-secret.d.ts +1 -1
  581. package/dist/with-party/team/noydb-facade.d.ts +12 -3
  582. package/dist/with-party/team/recovery.d.ts +1 -1
  583. package/dist/with-party/team/roster-tag.d.ts +1 -1
  584. package/dist/with-party/team/rotate-recover.d.ts +1 -1
  585. package/dist/with-party/team/wrapped-deks.d.ts +1 -1
  586. package/dist/with-pod/format.d.ts +1 -1
  587. package/dist/with-pod/index.d.ts +1 -1
  588. package/dist/with-pod/pod.d.ts +1 -1
  589. package/dist/with-shape/blobs/blob-compaction.d.ts +17 -1
  590. package/dist/with-shape/blobs/blob-intent.d.ts +1 -1
  591. package/dist/with-shape/blobs/blob-set.d.ts +23 -4
  592. package/dist/with-shape/blobs/legacy-sweep.d.ts +35 -0
  593. package/dist/with-shape/introspection/describe.d.ts +7 -1
  594. package/dist/with-shape/introspection/field-meta.d.ts +18 -0
  595. package/dist/with-shape/introspection/types.d.ts +57 -1
  596. package/dist/with-shape/introspection/walk.d.ts +1 -1
  597. package/dist/with-shape/links/lazy-handle.d.ts +1 -1
  598. package/dist/with-shape/links/link-set.d.ts +1 -1
  599. package/dist/with-shape/links/vault-facade.d.ts +1 -1
  600. package/dist/with-shape/manifest/derive.d.ts +1 -1
  601. package/dist/with-shape/manifest/storage.d.ts +1 -1
  602. package/dist/with-shape/persisted-schemas/register.d.ts +1 -1
  603. package/dist/with-shape/persisted-schemas/storage.d.ts +1 -1
  604. package/dist/with-shape/satellites/dead-filter.d.ts +1 -1
  605. package/dist/with-shape/satellites/declare.d.ts +1 -1
  606. package/dist/with-shape/satellites/marker.d.ts +1 -1
  607. package/dist/with-shape/satellites/post-register.d.ts +1 -1
  608. package/dist/with-store/partitioned/index.d.ts +337 -0
  609. package/dist/with-sync/change-broadcast.d.ts +153 -0
  610. package/dist/with-sync/presence.d.ts +5 -10
  611. package/dist/withdraw-accessible-HL7GACUE.js +27 -0
  612. package/dist/withdraw-accessible-HL7GACUE.js.map +1 -0
  613. package/package.json +48 -12
  614. package/dist/api-WYW4YEQG.js +0 -19
  615. package/dist/backup-XKCXVKV3.js.map +0 -1
  616. package/dist/chunk-2577DKXB.js.map +0 -1
  617. package/dist/chunk-2ENE6445.js.map +0 -1
  618. package/dist/chunk-2N5ML6HT.js.map +0 -1
  619. package/dist/chunk-334WSVOW.js.map +0 -1
  620. package/dist/chunk-3BVH633C.js.map +0 -1
  621. package/dist/chunk-3PGS7TYR.js.map +0 -1
  622. package/dist/chunk-3V4KWFX7.js.map +0 -1
  623. package/dist/chunk-453F654R.js.map +0 -1
  624. package/dist/chunk-4GFX6MPA.js.map +0 -1
  625. package/dist/chunk-4GVM6QZA.js.map +0 -1
  626. package/dist/chunk-4ZS56W5S.js.map +0 -1
  627. package/dist/chunk-5VCRVKOZ.js.map +0 -1
  628. package/dist/chunk-6YXCPL4T.js.map +0 -1
  629. package/dist/chunk-7APJ6CO6.js.map +0 -1
  630. package/dist/chunk-7MG2LHO5.js +0 -1616
  631. package/dist/chunk-7MG2LHO5.js.map +0 -1
  632. package/dist/chunk-7MG7SJT7.js.map +0 -1
  633. package/dist/chunk-7O3Y4PPD.js.map +0 -1
  634. package/dist/chunk-A2HKRLPV.js.map +0 -1
  635. package/dist/chunk-A66I4JOA.js.map +0 -1
  636. package/dist/chunk-ACAQ2DSG.js.map +0 -1
  637. package/dist/chunk-ATL3ZVXT.js +0 -151
  638. package/dist/chunk-ATL3ZVXT.js.map +0 -1
  639. package/dist/chunk-AYX7AINO.js.map +0 -1
  640. package/dist/chunk-BLN54W3L.js.map +0 -1
  641. package/dist/chunk-BRLKZUBT.js +0 -95
  642. package/dist/chunk-BRLKZUBT.js.map +0 -1
  643. package/dist/chunk-BTDR2PXY.js +0 -29
  644. package/dist/chunk-BTDR2PXY.js.map +0 -1
  645. package/dist/chunk-BVN6KXL2.js.map +0 -1
  646. package/dist/chunk-CHQCZZWC.js.map +0 -1
  647. package/dist/chunk-CUQPWYRX.js.map +0 -1
  648. package/dist/chunk-CUZLNGD5.js.map +0 -1
  649. package/dist/chunk-DFMWUOU5.js.map +0 -1
  650. package/dist/chunk-EIPVYUEP.js.map +0 -1
  651. package/dist/chunk-EQEYOJBM.js.map +0 -1
  652. package/dist/chunk-F3W6YMDC.js.map +0 -1
  653. package/dist/chunk-FET5XCAT.js.map +0 -1
  654. package/dist/chunk-G73UVHCA.js.map +0 -1
  655. package/dist/chunk-GPNTB4Y7.js.map +0 -1
  656. package/dist/chunk-GYGLAVCX.js.map +0 -1
  657. package/dist/chunk-HIWCKBEY.js.map +0 -1
  658. package/dist/chunk-HJUWN7JN.js.map +0 -1
  659. package/dist/chunk-HK67PX4J.js.map +0 -1
  660. package/dist/chunk-HPVZCW43.js +0 -479
  661. package/dist/chunk-HPVZCW43.js.map +0 -1
  662. package/dist/chunk-I3ISCYT7.js +0 -159
  663. package/dist/chunk-I3ISCYT7.js.map +0 -1
  664. package/dist/chunk-K23VKTN4.js.map +0 -1
  665. package/dist/chunk-KKEESNPE.js.map +0 -1
  666. package/dist/chunk-KTFRCC5C.js.map +0 -1
  667. package/dist/chunk-LH5A3ZPG.js.map +0 -1
  668. package/dist/chunk-LP7BEXCT.js +0 -32
  669. package/dist/chunk-LP7BEXCT.js.map +0 -1
  670. package/dist/chunk-M4YPHYEH.js.map +0 -1
  671. package/dist/chunk-NSITFOCJ.js +0 -99
  672. package/dist/chunk-NSITFOCJ.js.map +0 -1
  673. package/dist/chunk-OTQZ7ZWU.js.map +0 -1
  674. package/dist/chunk-P3MG6QCN.js.map +0 -1
  675. package/dist/chunk-PEOZ34EM.js.map +0 -1
  676. package/dist/chunk-PPTHY5QO.js.map +0 -1
  677. package/dist/chunk-Q2MPFCQ7.js.map +0 -1
  678. package/dist/chunk-Q7HZX3IF.js.map +0 -1
  679. package/dist/chunk-QPQUVOZ2.js.map +0 -1
  680. package/dist/chunk-QTQUH4DS.js.map +0 -1
  681. package/dist/chunk-R42NSZI6.js.map +0 -1
  682. package/dist/chunk-R7BX2NB3.js.map +0 -1
  683. package/dist/chunk-RSGLUIO6.js.map +0 -1
  684. package/dist/chunk-RTBJ5IOO.js +0 -87
  685. package/dist/chunk-RTBJ5IOO.js.map +0 -1
  686. package/dist/chunk-SGZAIJCV.js.map +0 -1
  687. package/dist/chunk-SKGMN35F.js.map +0 -1
  688. package/dist/chunk-SPYWXKJN.js.map +0 -1
  689. package/dist/chunk-SZJ3DLZA.js +0 -66
  690. package/dist/chunk-SZJ3DLZA.js.map +0 -1
  691. package/dist/chunk-TRGTKX5E.js.map +0 -1
  692. package/dist/chunk-UDHWDSRL.js.map +0 -1
  693. package/dist/chunk-UP4BECPY.js.map +0 -1
  694. package/dist/chunk-UXVWEX5L.js.map +0 -1
  695. package/dist/chunk-V7ZRRCRJ.js.map +0 -1
  696. package/dist/chunk-WQBG4SZS.js.map +0 -1
  697. package/dist/chunk-XKWGNJ26.js.map +0 -1
  698. package/dist/chunk-YMUFFJCO.js.map +0 -1
  699. package/dist/chunk-ZHKOPKE3.js.map +0 -1
  700. package/dist/chunk-ZN4FD4PE.js +0 -364
  701. package/dist/chunk-ZN4FD4PE.js.map +0 -1
  702. package/dist/chunk-ZORTV6NH.js.map +0 -1
  703. package/dist/chunk-ZYIYHJ5R.js.map +0 -1
  704. package/dist/classified-marker-BWOFVYAC.js.map +0 -1
  705. package/dist/collection-facade-JSJYIKS4.js +0 -45
  706. package/dist/dead-filter-PKQDLOT4.js.map +0 -1
  707. package/dist/delegation-DS5NRILW.js.map +0 -1
  708. package/dist/derive-E642AOUB.js +0 -21
  709. package/dist/dispatch-Q6MWLOJY.js.map +0 -1
  710. package/dist/executor-5NIMLSKZ.js +0 -8
  711. package/dist/executor-7UQ3BZ4F.js +0 -29
  712. package/dist/executor-AQVXV5GZ.js +0 -8
  713. package/dist/export-accessible-ORMKLA3E.js +0 -22
  714. package/dist/extract-partition-NKYO3WNG.js +0 -37
  715. package/dist/fanout-sidecar-S3QL53YX.js.map +0 -1
  716. package/dist/find-NOGJ25VX.js +0 -10
  717. package/dist/issue-3DTQ7VJJ.js +0 -18
  718. package/dist/json-schema-V3M5MUCM.js.map +0 -1
  719. package/dist/kernel/enclave/classify/compare.d.ts +0 -10
  720. package/dist/kernel/enclave/index.d.ts +0 -87
  721. package/dist/kernel/enclave/record-keys/lifecycle.d.ts +0 -124
  722. package/dist/kernel/enclave/record-keys/rekey-blob.d.ts +0 -88
  723. package/dist/kernel/enclave/record-keys/rekey.d.ts +0 -91
  724. package/dist/kernel/enclave/record-keys/sealed-slot.d.ts +0 -14
  725. package/dist/kernel/enclave/record-keys/sealed-slots.d.ts +0 -123
  726. package/dist/kernel/enclave/record-keys/sealing.d.ts +0 -70
  727. package/dist/kernel/query/join.d.ts +0 -232
  728. package/dist/liberate-V35QUHJP.js +0 -24
  729. package/dist/link-set-2TTM3IZC.js +0 -30
  730. package/dist/noydb-62MX4QUG.js +0 -90
  731. package/dist/pod-handle-ECVCDIXW.js.map +0 -1
  732. package/dist/post-register-3IPCSG6Q.js.map +0 -1
  733. package/dist/register-HHLXEQDN.js +0 -31
  734. package/dist/registry-23WF3TGH.js +0 -8
  735. package/dist/registry-4AYVUNXK.js +0 -8
  736. package/dist/registry-JS3YFQQM.js +0 -18
  737. package/dist/registry-XX2Z7B46.js +0 -32
  738. package/dist/request-withdrawal-CHPATE4G.js +0 -30
  739. package/dist/reveal-QZDHSGD4.js.map +0 -1
  740. package/dist/revoke-7M2VW4ON.js +0 -23
  741. package/dist/seed-X5CC22CQ.js.map +0 -1
  742. package/dist/signer-SJQJVSM6.js +0 -24
  743. package/dist/stale-BZS6H2RY.js +0 -29
  744. package/dist/storage-RW4QBS23.js +0 -22
  745. package/dist/store-coordination-provider-4WZAIRHC.js.map +0 -1
  746. package/dist/verify-6MDTIUEV.js.map +0 -1
  747. package/dist/walk-ZURCH6RZ.js +0 -21
  748. package/dist/withdraw-accessible-PXR4IXDX.js +0 -27
  749. /package/dist/{api-WYW4YEQG.js.map → api-OS747DS4.js.map} +0 -0
  750. /package/dist/{computed-VPOKQK4N.js.map → capsule/contract.js.map} +0 -0
  751. /package/dist/{kernel/enclave → capsule/enclave-aes}/broker/proof.d.ts +0 -0
  752. /package/dist/{kernel/enclave → capsule/enclave-aes}/classify/bidx.d.ts +0 -0
  753. /package/dist/{kernel/enclave → capsule/enclave-aes}/classify/digest.d.ts +0 -0
  754. /package/dist/{kernel/enclave → capsule/enclave-aes}/classify/vdig.d.ts +0 -0
  755. /package/dist/{kernel/enclave/classify → capsule/plumbing}/kofn.d.ts +0 -0
  756. /package/dist/{kernel/enclave/classify → capsule/plumbing}/normalize.d.ts +0 -0
  757. /package/dist/{kernel/enclave → capsule/plumbing}/record-aad.d.ts +0 -0
  758. /package/dist/{collection-facade-JSJYIKS4.js.map → capsule-VOLX3QRQ.js.map} +0 -0
  759. /package/dist/{chunk-MVMXZYXT.js.map → chunk-2GHDLTPE.js.map} +0 -0
  760. /package/dist/{chunk-XLMEZIAJ.js.map → chunk-2ODVB6LZ.js.map} +0 -0
  761. /package/dist/{chunk-RMS3NEA3.js.map → chunk-4JPMZTJY.js.map} +0 -0
  762. /package/dist/{chunk-NQKIUNW5.js.map → chunk-52MGURXO.js.map} +0 -0
  763. /package/dist/{chunk-UGTBXF5U.js.map → chunk-7XMHMVTS.js.map} +0 -0
  764. /package/dist/{chunk-BZ3534YM.js.map → chunk-AUKKUPVB.js.map} +0 -0
  765. /package/dist/{derive-E642AOUB.js.map → chunk-BKT776R5.js.map} +0 -0
  766. /package/dist/{chunk-6LKOJBV6.js.map → chunk-BVCUTXE3.js.map} +0 -0
  767. /package/dist/{chunk-VTFVLCUH.js.map → chunk-DIZLQVAA.js.map} +0 -0
  768. /package/dist/{chunk-LWBCUYZW.js.map → chunk-E2N2T5ZO.js.map} +0 -0
  769. /package/dist/{chunk-JVIBCBC7.js.map → chunk-EJLV62NI.js.map} +0 -0
  770. /package/dist/{chunk-JMGDHKQF.js.map → chunk-FLPCETP6.js.map} +0 -0
  771. /package/dist/{chunk-DGOZ4UZD.js.map → chunk-FVH5QYY2.js.map} +0 -0
  772. /package/dist/{chunk-JBDFMYKQ.js.map → chunk-GZT3NQRA.js.map} +0 -0
  773. /package/dist/{chunk-TFR7DSOV.js.map → chunk-H427H63K.js.map} +0 -0
  774. /package/dist/{chunk-SMH6SRX7.js.map → chunk-JOSPH3E5.js.map} +0 -0
  775. /package/dist/{chunk-3BZZJJMQ.js.map → chunk-MILI22XQ.js.map} +0 -0
  776. /package/dist/{chunk-YYP7WSEB.js.map → chunk-O2IMQSNA.js.map} +0 -0
  777. /package/dist/{chunk-QIZPZMUI.js.map → chunk-Q4UHJ5SN.js.map} +0 -0
  778. /package/dist/{chunk-FAHMLERK.js.map → chunk-QBLT6POL.js.map} +0 -0
  779. /package/dist/{chunk-BUE2D7PX.js.map → chunk-SMV2HRDU.js.map} +0 -0
  780. /package/dist/{chunk-SFAWCTEM.js.map → chunk-TZZBXPZK.js.map} +0 -0
  781. /package/dist/{chunk-UHHPLO3I.js.map → chunk-V3RWOOSO.js.map} +0 -0
  782. /package/dist/{chunk-Q2PU57HC.js.map → chunk-VVOLDVIR.js.map} +0 -0
  783. /package/dist/{chunk-TUFM4UZP.js.map → chunk-XQRFSKYM.js.map} +0 -0
  784. /package/dist/{chunk-GY4WYNNG.js.map → chunk-Y2RKVFKR.js.map} +0 -0
  785. /package/dist/{chunk-4OZNXTO4.js.map → chunk-YRXFFWG4.js.map} +0 -0
  786. /package/dist/{enclave-55PAM4YO.js.map → collection-facade-CS7CA2XO.js.map} +0 -0
  787. /package/dist/{executor-5NIMLSKZ.js.map → computed-FAD7SED4.js.map} +0 -0
  788. /package/dist/{executor-7UQ3BZ4F.js.map → derive-XLOJVXPU.js.map} +0 -0
  789. /package/dist/{dispatch-IEPAVQUM.js.map → dispatch-H4HV32AM.js.map} +0 -0
  790. /package/dist/{executor-AQVXV5GZ.js.map → executor-FMPVN6DT.js.map} +0 -0
  791. /package/dist/{export-accessible-ORMKLA3E.js.map → executor-LBBBRTN5.js.map} +0 -0
  792. /package/dist/{extract-partition-NKYO3WNG.js.map → executor-OSRZST2U.js.map} +0 -0
  793. /package/dist/{find-NOGJ25VX.js.map → export-accessible-RAOJAAU5.js.map} +0 -0
  794. /package/dist/{issue-3DTQ7VJJ.js.map → extract-partition-JD5CUSTG.js.map} +0 -0
  795. /package/dist/{ledger-EDXFFZQL.js.map → find-JRN4RNQ5.js.map} +0 -0
  796. /package/dist/{liberate-V35QUHJP.js.map → issue-YIVBZUTH.js.map} +0 -0
  797. /package/dist/{link-set-2TTM3IZC.js.map → ledger-5ZMGE44K.js.map} +0 -0
  798. /package/dist/{managed-secret-NCWEMPUQ.js.map → liberate-WZSZM2W6.js.map} +0 -0
  799. /package/dist/{noydb-62MX4QUG.js.map → link-set-MFXC24VK.js.map} +0 -0
  800. /package/dist/{register-HHLXEQDN.js.map → managed-secret-MFTFT22X.js.map} +0 -0
  801. /package/dist/{migrate-cek-5ENH64AA.js.map → migrate-cek-DZRFFOHW.js.map} +0 -0
  802. /package/dist/{registry-23WF3TGH.js.map → noydb-ITIGNKUF.js.map} +0 -0
  803. /package/dist/{registry-4AYVUNXK.js.map → query/all/index.js.map} +0 -0
  804. /package/dist/{registry-JS3YFQQM.js.map → register-DT5HZ2LZ.js.map} +0 -0
  805. /package/dist/{registry-XX2Z7B46.js.map → registry-BHRZGZHF.js.map} +0 -0
  806. /package/dist/{request-withdrawal-CHPATE4G.js.map → registry-ET6ZFFWA.js.map} +0 -0
  807. /package/dist/{revoke-7M2VW4ON.js.map → registry-HXFGLGTG.js.map} +0 -0
  808. /package/dist/{signer-SJQJVSM6.js.map → registry-THCPDEOD.js.map} +0 -0
  809. /package/dist/{stale-BZS6H2RY.js.map → request-withdrawal-AV2MJJKY.js.map} +0 -0
  810. /package/dist/{storage-RW4QBS23.js.map → revoke-6DWIEOCV.js.map} +0 -0
  811. /package/dist/{walk-ZURCH6RZ.js.map → signer-MHGW3OIL.js.map} +0 -0
  812. /package/dist/{withdraw-accessible-PXR4IXDX.js.map → stale-6GCFMOOR.js.map} +0 -0
@@ -14,7 +14,26 @@
14
14
  */
15
15
  import type { Reduction, ReduceSpec, ReduceResult, ReductionUpstream } from './reduction.js';
16
16
  import type { GroupedQuery, GroupedQueryN } from './groupby.js';
17
+ import type { GroupMaintenanceSource } from '../../kernel/query/live/incremental.js';
18
+ import type { WindowFactory, WindowSpec, WindowedQuery } from './window.js';
19
+ /**
20
+ * Re-exported so `kernel/query/builder.ts` can name `.window()`'s spec and
21
+ * return type WITHOUT a second spine→service import specifier: this strategy
22
+ * module is the seam the kernel is allowed to reach (`check-architecture.mjs`
23
+ * → PRE_EXISTING_SPINE_SERVICE_IMPORTS), and adding a new grandfathered path
24
+ * there for a type-only import would loosen the ratchet for no gain.
25
+ */
26
+ export type { WindowSpec, WindowedQuery } from './window.js';
27
+ /**
28
+ * Options for {@link withReduce}. `window` is the {@link WindowFactory}
29
+ * returned by `withWindow()` — omitted, `.window()` throws and the window
30
+ * engine stays out of the bundle entirely (see `window.ts` § "Opting in").
31
+ */
32
+ export interface ReduceOptions {
33
+ readonly window?: WindowFactory;
34
+ }
17
35
  import type { ViaPipeline } from '../../kernel/via/pipeline.js';
36
+ import type { HydrationGate } from '../../kernel/query/hydration.js';
18
37
  /**
19
38
  * Seam interface. `@internal` — will promote to public only when the
20
39
  * aggregate service is extracted into its own package.
@@ -28,19 +47,40 @@ export interface ReduceStrategy {
28
47
  * reduction runs. NO_REDUCE throws; the active strategy
29
48
  * constructs a real `Reduction`.
30
49
  */
31
- aggregate<Spec extends ReduceSpec>(executeRecords: () => readonly unknown[], spec: Spec, upstreams: readonly ReductionUpstream[]): Reduction<ReduceResult<Spec>>;
50
+ aggregate<Spec extends ReduceSpec>(executeRecords: () => readonly unknown[], spec: Spec, upstreams: readonly ReductionUpstream[],
51
+ /** #1414 — the source collection's cold gate, when there is one. */
52
+ gate?: HydrationGate): Reduction<ReduceResult<Spec>>;
32
53
  /**
33
54
  * Build a `GroupedQuery<T, F, S>` for `Query.groupBy(field)`. Same
34
55
  * closure / upstream inputs as `aggregate` plus the group key field.
35
56
  */
36
- groupBy<T, F extends string, S extends keyof T = never, M extends keyof T & string = never>(executeRecords: () => readonly unknown[], field: F, upstreams: readonly ReductionUpstream[], dictLabelResolver?: (key: string, locale: string, fallback?: string | readonly string[]) => Promise<string | undefined>, via?: ViaPipeline): GroupedQuery<T, F, S, M>;
57
+ groupBy<T, F extends string, S extends keyof T = never, M extends keyof T & string = never>(executeRecords: () => readonly unknown[], field: F, upstreams: readonly ReductionUpstream[], dictLabelResolver?: (key: string, locale: string, fallback?: string | readonly string[]) => Promise<string | undefined>, via?: ViaPipeline,
58
+ /**
59
+ * #1341 (grouped half) — the delta-maintenance seam. Supplied by
60
+ * `Query.groupBy()` only for a plan `canMaintainIncrementally()` admits;
61
+ * omitted, `.groupBy().aggregate().live()` re-runs in full as before.
62
+ */
63
+ maintenance?: GroupMaintenanceSource): GroupedQuery<T, F, S, M>;
37
64
  /**
38
65
  * Variadic-keyed sibling — builds a `GroupedQueryN<T, F, S>` for
39
66
  * `Query.groupBy(...fields)`. No dictLabelResolver — `<field>Label`
40
67
  * projection only applies to single-field groupings, which dispatch
41
68
  * through `groupBy` above.
42
69
  */
43
- groupByN<T, F extends readonly string[], S extends keyof T = never, M extends keyof T & string = never>(executeRecords: () => readonly unknown[], fields: F, upstreams: readonly ReductionUpstream[], via?: ViaPipeline): GroupedQueryN<T, F, S, M>;
70
+ groupByN<T, F extends readonly string[], S extends keyof T = never, M extends keyof T & string = never>(executeRecords: () => readonly unknown[], fields: F, upstreams: readonly ReductionUpstream[], via?: ViaPipeline,
71
+ /** #1341 (grouped half) — see `groupBy` above. */
72
+ maintenance?: GroupMaintenanceSource): GroupedQueryN<T, F, S, M>;
73
+ /**
74
+ * Build a `WindowedQuery<T>` for `Query.window(spec)` (#1349). Same closure
75
+ * / upstream inputs as `groupBy`, plus the window definition. The Via
76
+ * pipeline is threaded so `.select()` gets the same money/distinct reducer
77
+ * rewriting `.aggregate()` gets.
78
+ *
79
+ * Throws unless the strategy was built as `withReduce({ window: withWindow() })`
80
+ * — the second opt-in exists so the window engine is not charged to a
81
+ * consumer who only aggregates. See `window.ts` § "Opting in".
82
+ */
83
+ window<T>(executeRecords: () => readonly unknown[], spec: WindowSpec, upstreams: readonly ReductionUpstream[], via?: ViaPipeline): WindowedQuery<T>;
44
84
  /**
45
85
  * Terminal streaming aggregator for `ScanBuilder.aggregate(spec)`.
46
86
  * Takes an async iterable of decrypted records + the spec and
@@ -0,0 +1,262 @@
1
+ /**
2
+ * Query DSL `.window()` — SQL window functions over the query's result rows
3
+ * (#1349).
4
+ *
5
+ * ```ts
6
+ * invoices.query()
7
+ * .where('status', '==', 'open')
8
+ * .window({ partitionBy: 'clientId', orderBy: 'date' })
9
+ * .select({ balance: runningSum('amount'), prev: lag('amount', 1), n: rowNumber() })
10
+ * .run()
11
+ * ```
12
+ *
13
+ * Pure in-hub post-processing: the store holds ciphertext, so this runs after
14
+ * decryption like every other query stage. No index is consulted — see
15
+ * "Complexity" below for why the sorted-index fast path is deliberately not
16
+ * taken in v1.
17
+ *
18
+ * ## What it is, precisely
19
+ *
20
+ * A window function adds COLUMNS to a row; it never adds, removes or reorders
21
+ * rows. `.select()` therefore returns the query's own rows, in the query's own
22
+ * order, each widened with the window outputs. `orderBy` inside `.window()`
23
+ * decides how a PARTITION is walked; `Query.orderBy()` decides how the RESULT
24
+ * is presented. That is SQL's split and both are honoured independently.
25
+ *
26
+ * ⭐ Distinguished from `.groupBy()` by ARITY: `.groupBy().aggregate()` emits
27
+ * one row per bucket and drops the source rows; `.window().select()` keeps
28
+ * every source row and attaches per-row values computed over its partition.
29
+ *
30
+ * ## The frame — `rows unbounded preceding → current row`, and only that
31
+ *
32
+ * A running aggregate at position `i` of its partition sees exactly rows
33
+ * `0..i`. There is no `RANGE`, no `n preceding`, no `following`, and no
34
+ * `frame` option to pass — explicit frames are a separate feature, and a
35
+ * half-built frame surface is worse than none. `lag`/`lead` are navigation,
36
+ * not aggregation, so they are unaffected by the frame.
37
+ *
38
+ * ## Ordering inside a partition is TOTAL
39
+ *
40
+ * Rows are sorted by the `orderBy` keys and, where those compare equal, by
41
+ * their UPSTREAM POSITION — the sort is a stable sort over an ascending index
42
+ * array, so equal keys keep the order the query produced them in. Without that
43
+ * final key, `lag`/`lead` over equal keys would be a coin flip between runs.
44
+ *
45
+ * The value comparator is {@link compareReduced}, shared with the post-group
46
+ * ordering of #1336 rather than reinvented, and for the same reason: a money
47
+ * value reaches this stage DECODED, as an exact decimal string, and lexical
48
+ * order gets `'9882.00'` vs `'10004.00'` backwards. (The pre-group row
49
+ * pipeline asks `ViaPipeline.compareForOrder` instead — that reads the STORED
50
+ * scaled-integer form, which is not what a decoded row holds, so it cannot
51
+ * serve here.)
52
+ *
53
+ * PEER-ship for `rank` is decided by the `orderBy` keys ALONE, never by the
54
+ * upstream tie-break — otherwise no two rows would ever be peers and `rank`
55
+ * would collapse into `rowNumber`.
56
+ *
57
+ * ## Complexity, and the index question
58
+ *
59
+ * O(n log n): one partition pass, then a sort per partition. #1344's sorted
60
+ * indexes could in principle make the sort a merge, but the input here is the
61
+ * query's already-materialised, already-DECODED result rows — the index is
62
+ * over stored (encoded) values on the collection, and it has no way to express
63
+ * "sorted within each partition of `clientId`". Taking a fast path would mean
64
+ * proving identical output including the upstream tie-break, which the index
65
+ * cannot witness. So v1 sorts. This is the correct path, not a placeholder.
66
+ *
67
+ * ## Opting in — and why there is a second opt-in at all
68
+ *
69
+ * `withReduce()` alone does NOT light this up: `.window()` throws until the
70
+ * strategy is built as `withReduce({ window: withWindow() })`. That is not
71
+ * ceremony for its own sake — it is the SAME no-op-stub-until-opted-in rule
72
+ * that keeps `Reduction`/`GroupedQuery` out of the floor bundle, applied one
73
+ * level down. `withReduce()`'s returned object is a live value the bundler
74
+ * cannot prove unused, so a `window()` method that named {@link WindowedQuery}
75
+ * directly made this whole engine reachable from `withReduce` and charged it
76
+ * to every consumer who opted into ordinary aggregation and will never call
77
+ * `.window()`. Measured: the `analytics` bundle scenario went 960 → 1,845
78
+ * gzipped bytes, +92%. Passing the factory in means the engine is reachable
79
+ * only from a consumer that names `withWindow`.
80
+ * ⛔ Do not "simplify" this back into `withReduce()` — `check-bundle.mjs`'s
81
+ * `analytics` scenario carries a `WindowedQuery` eager-import canary that will
82
+ * fail if you do.
83
+ *
84
+ * ## Not in `explain()`
85
+ *
86
+ * Same shape as #1336's post-group ops: `explain()` is a terminal on `Query`,
87
+ * and `.window()` leaves `Query` for `WindowedQuery`, so there is no
88
+ * `explain()` in the chain past this point to add a node to. The window stage
89
+ * also has nothing to choose — one dispatch, over rows already in memory.
90
+ */
91
+ import type { Reducer } from './reducers.js';
92
+ import type { ReductionUpstream, LiveReduction } from './reduction.js';
93
+ import type { DateTruncKey } from '../../kernel/query/reduce/date-trunc.js';
94
+ import type { MoneyString } from '../../via/money/branded.js';
95
+ import type { ViaPipeline } from '../../kernel/via/pipeline.js';
96
+ /** One ordering key inside a window: a field name, a `dateTrunc()` key, or either with a direction. */
97
+ export type WindowOrderInput<F extends string = string> = F | DateTruncKey | {
98
+ readonly field: F | DateTruncKey;
99
+ readonly direction?: 'asc' | 'desc';
100
+ };
101
+ /**
102
+ * The window definition passed to `.window()`.
103
+ *
104
+ * Both members are optional and mean what SQL's omissions mean: no
105
+ * `partitionBy` is one partition holding the whole relation; no `orderBy`
106
+ * makes every row in a partition a peer (so `rank()` is 1 throughout and a
107
+ * running aggregate sees the rows in upstream order).
108
+ */
109
+ export interface WindowSpec<F extends string = string> {
110
+ /** Field name(s) and/or `dateTrunc()` key(s) to partition on. */
111
+ readonly partitionBy?: F | DateTruncKey | readonly (F | DateTruncKey)[];
112
+ /** How each partition is walked. Successive keys are tie-breakers. */
113
+ readonly orderBy?: WindowOrderInput<F> | readonly WindowOrderInput<F>[];
114
+ }
115
+ /**
116
+ * A non-aggregating window function (ranking or navigation). Built by the
117
+ * factories below — the shape is opaque to consumers.
118
+ */
119
+ export interface WindowFn<R = unknown> {
120
+ readonly __window: true;
121
+ readonly op: 'rowNumber' | 'rank' | 'lag' | 'lead';
122
+ /**
123
+ * Compute one value per row of an ORDERED partition.
124
+ * `peerStart[i]` is the index of the first row that compares equal to row
125
+ * `i` under the window's `orderBy` keys.
126
+ */
127
+ evaluate(rows: readonly unknown[], peerStart: readonly number[]): R[];
128
+ }
129
+ /**
130
+ * A `.select()` slot: either a window function or an ordinary {@link Reducer},
131
+ * which runs as a RUNNING aggregate under the v1 frame. Any reducer works —
132
+ * `count()`, `sum()`, `countDistinct()`, a custom one — so `runningSum` and
133
+ * `runningMoneySum` below are named conveniences, not a separate mechanism.
134
+ */
135
+ export type WindowSelectSpec = Readonly<Record<string, WindowFn<unknown> | Reducer<unknown, unknown>>>;
136
+ /** Result type of one `.select()` slot. */
137
+ type WindowSlotResult<V> = V extends WindowFn<infer R> ? R : V extends Reducer<infer R, unknown> ? R : unknown;
138
+ /** A window result row: the source record widened with the selected outputs. */
139
+ export type WindowRow<T, Spec extends WindowSelectSpec> = T & {
140
+ [K in keyof Spec]: WindowSlotResult<Spec[K]>;
141
+ };
142
+ /**
143
+ * Sequential position of the row within its partition, starting at 1. NEVER
144
+ * repeats — two rows that tie under `orderBy` still get distinct numbers,
145
+ * resolved by the upstream tie-break. Use {@link rank} when ties should share
146
+ * a number.
147
+ */
148
+ export declare function rowNumber(): WindowFn<number>;
149
+ /**
150
+ * Competition rank within the partition, starting at 1. Rows that compare
151
+ * EQUAL under the window's `orderBy` keys share a rank, and the next distinct
152
+ * value SKIPS the ranks they consumed — `1, 2, 2, 4`. This is the only place
153
+ * `rank` and {@link rowNumber} differ, so a fixture without ties cannot tell
154
+ * them apart.
155
+ *
156
+ * With no `orderBy` every row is a peer and every rank is 1.
157
+ */
158
+ export declare function rank(): WindowFn<number>;
159
+ /**
160
+ * Value of `field` from the row `offset` positions EARLIER in the partition.
161
+ * Returns `defaultValue` (default `undefined`) for the first `offset` rows.
162
+ */
163
+ export declare function lag<R = unknown>(field: string, offset?: number, defaultValue?: R): WindowFn<R | undefined>;
164
+ /**
165
+ * Value of `field` from the row `offset` positions LATER in the partition.
166
+ * Returns `defaultValue` (default `undefined`) for the last `offset` rows.
167
+ */
168
+ export declare function lead<R = unknown>(field: string, offset?: number, defaultValue?: R): WindowFn<R | undefined>;
169
+ /**
170
+ * Running total of a numeric `field` over `rows unbounded preceding → current
171
+ * row`. Identical to passing `sum(field)` — named for the reading.
172
+ *
173
+ * ⚠️ For a declared money field use {@link runningMoneySum}: it is the same
174
+ * reducer, but typed `MoneyString` to match what the exact BigInt rewrite
175
+ * actually returns.
176
+ */
177
+ export declare function runningSum(field: string): Reducer<number>;
178
+ /**
179
+ * Running total of a **declared money field**, exact at any magnitude.
180
+ *
181
+ * The reducer is the ordinary money `sum`, and it is rewritten by
182
+ * `ViaPipeline.wrapReducers` into `via/money/money-reducer.ts`'s BigInt
183
+ * accumulator at `.select()` time — the SAME rewrite `.aggregate()` and
184
+ * `.groupBy()` get, so a running balance and a grand total cannot disagree.
185
+ * Nothing here touches a float: values accumulate as scaled `bigint`s and each
186
+ * row's value is `formatScaledInt`'d out of the state at that point.
187
+ */
188
+ export declare function runningMoneySum(field: string): Reducer<MoneyString>;
189
+ /**
190
+ * Execute the window stage. Pure function over a row array — exported for
191
+ * tests and for any future `scan().window()` reuse.
192
+ *
193
+ * Rows are returned in INPUT order, each a shallow copy widened with the
194
+ * selected outputs. A `dateTrunc()` partition key is read off an internal
195
+ * projection and is deliberately NOT stamped on the output row — unlike
196
+ * `.groupBy()`, where the derived key IS the result key.
197
+ */
198
+ export declare function applyWindow<R>(records: readonly unknown[], spec: WindowSpec, select: WindowSelectSpec): R[];
199
+ /**
200
+ * What `withWindow()` hands to `withReduce()`. Named as a type so
201
+ * `strategy.ts` / `active.ts` can speak it in a TYPE-ONLY import and never
202
+ * pull this module into their runtime graph.
203
+ */
204
+ export type WindowFactory = <T>(executeRecords: () => readonly unknown[], spec: WindowSpec, upstreams: readonly ReductionUpstream[], via?: ViaPipeline) => WindowedQuery<T>;
205
+ /**
206
+ * Light up `.window()` on `Query`.
207
+ *
208
+ * ```ts
209
+ * import { withReduce, withWindow } from '@noy-db/hub/reduce'
210
+ * createNoydb({ store, user, secret, reduceStrategy: withReduce({ window: withWindow() }) })
211
+ * ```
212
+ *
213
+ * The only reference to {@link WindowedQuery} outside this module's own
214
+ * consumers — see "Opting in" in the module docs for why that matters.
215
+ */
216
+ export declare function withWindow(): WindowFactory;
217
+ /**
218
+ * Chainable wrapper returned by `Query.window(spec)`. Terminates with
219
+ * `.select(spec)`, which is the only operation on it — a window with nothing
220
+ * selected computes nothing.
221
+ */
222
+ export declare class WindowedQuery<T> {
223
+ private readonly executeRecords;
224
+ private readonly spec;
225
+ private readonly upstreams;
226
+ private readonly via?;
227
+ constructor(executeRecords: () => readonly unknown[], spec: WindowSpec, upstreams: readonly ReductionUpstream[], via?: ViaPipeline | undefined);
228
+ /**
229
+ * Attach window outputs to every row. Each slot is either a
230
+ * {@link WindowFn} (`rowNumber`, `rank`, `lag`, `lead`) or a `Reducer`,
231
+ * which runs as a running aggregate over `rows unbounded preceding →
232
+ * current row`.
233
+ *
234
+ * Reducers are rewritten through the collection's Via pipeline exactly as
235
+ * `.aggregate()` rewrites them, so a `sum` over a declared money field
236
+ * becomes the exact BigInt accumulator and a `countDistinct` dedups on the
237
+ * canonical index key.
238
+ */
239
+ select<Spec extends WindowSelectSpec>(spec: Spec): WindowSelection<WindowRow<T, Spec>>;
240
+ }
241
+ /**
242
+ * The `.window(...).select(...)` terminal. Mirrors `GroupedReduction`'s shape
243
+ * — `.run()` and `.live()` — minus the post-group stage: ordering and limiting
244
+ * of window OUTPUT rows belong on the underlying `Query`, before `.window()`,
245
+ * because a window never changes the row set.
246
+ */
247
+ export declare class WindowSelection<R> {
248
+ private readonly executeRecords;
249
+ private readonly spec;
250
+ private readonly select;
251
+ private readonly upstreams;
252
+ constructor(executeRecords: () => readonly unknown[], spec: WindowSpec, select: WindowSelectSpec, upstreams: readonly ReductionUpstream[]);
253
+ /** Execute the query and return every row, widened with the window outputs. */
254
+ run(): R[];
255
+ /**
256
+ * Reactive terminal — re-runs the whole window pipeline on every upstream
257
+ * change, the same naive-recompute contract `GroupedReduction.live()` has.
258
+ * Always call `live.stop()` when finished.
259
+ */
260
+ live(): LiveReduction<R[]>;
261
+ }
262
+ export {};
@@ -22,7 +22,7 @@
22
22
  * Internal service — not exported as a `@noy-db/hub/*` subpath.
23
23
  */
24
24
  import type { NoydbStore } from '../../kernel/types.js';
25
- import type { RecordCodec } from '../../kernel/enclave/index.js';
25
+ import type { RecordCodec } from '../../capsule/index.js';
26
26
  import { type I18nTextDescriptor } from '../../via/i18n/core.js';
27
27
  import { type DictKeyDescriptor, type StaticDictDescriptor, type DictionaryHandle } from '../../via/i18n/dictionary.js';
28
28
  import type { BlobSet } from '../../with-shape/blobs/blob-set.js';
@@ -31,8 +31,8 @@ import { type VectorSet, type EmbeddingDescriptor } from '../embeddings/index.js
31
31
  import { type SearchOptions, type SearchResult } from './index.js';
32
32
  import type { IndexStore } from './index-store.js';
33
33
  import type { PersistedIndexCallbacks } from './persisted-index-store.js';
34
- import type { IndexDoc } from './inverted-index.js';
35
- import type { RetrieveOptions, RetrieveHit } from './retrieve-types.js';
34
+ import type { IndexDoc, IndexBuildOptions } from './inverted-index.js';
35
+ import type { RetrieveOptions, RetrieveHit, SimilarToOptions } from './retrieve-types.js';
36
36
  /** Everything the moving search/retrieval methods touched on `this.*`. */
37
37
  export interface SearchContext<T> {
38
38
  /** Collection name — error context + `_ftindex` row key. */
@@ -52,6 +52,8 @@ export interface SearchContext<T> {
52
52
  readonly lazy: boolean;
53
53
  /** Declared text-index fields, or undefined. */
54
54
  readonly textIndexes: readonly string[] | undefined;
55
+ /** Subset of `textIndexes` recording token positions for phrase / proximity (#1354). */
56
+ readonly textIndexPositions: readonly string[] | undefined;
55
57
  /** Declared i18n fields, or undefined. */
56
58
  readonly i18nFields: Record<string, I18nTextDescriptor> | undefined;
57
59
  /** Declared dictionary-key fields, or undefined. */
@@ -78,6 +80,13 @@ export interface SearchContext<T> {
78
80
  export declare function search<T>(ctx: SearchContext<T>, field: string, query: string, opts?: SearchOptions): Promise<SearchResult<T>[]>;
79
81
  /** L1 — build IndexDoc[] for the configured text fields over the live cache. */
80
82
  export declare function buildRetrievalDocs<T>(ctx: SearchContext<T>, labelMaps: Map<string, Map<string, Record<string, string>>>, blobFilenames: Map<string, Map<string, string[]>>, only?: readonly string[]): IndexDoc[];
83
+ /**
84
+ * L1 — the positional-postings opt-in for this collection (#1354), or
85
+ * `undefined` when nothing opted in. Returning `undefined` rather than
86
+ * `{ positions: [] }` keeps the no-opt-in path byte-identical to a caller that
87
+ * never heard of positions.
88
+ */
89
+ export declare function positionBuildOptions<T>(ctx: SearchContext<T>): IndexBuildOptions | undefined;
81
90
  /** L1 — true iff any configured text index is also a blob field (gates ALL slot I/O). */
82
91
  export declare function hasIndexedBlobFields<T>(ctx: SearchContext<T>, only?: readonly string[]): boolean;
83
92
  /** L1.5 — force-persist the lexical index now (e.g. on save/idle). Persists only when textIndexPersist is enabled; a no-op otherwise. */
@@ -103,15 +112,42 @@ export declare function flushIndex<T>(ctx: SearchContext<T>): Promise<void>;
103
112
  export declare function buildPersistedIndexCallbacks<T>(provideCtx: () => SearchContext<T>): PersistedIndexCallbacks;
104
113
  /** L1 — pre-build the lexical index (e.g. on open) so the first retrieve() pays no build scan. */
105
114
  export declare function warmIndex<T>(ctx: SearchContext<T>): Promise<void>;
106
- /** Retrieval. mode: 'lexical' (default) | 'semantic' (L2) | 'hybrid' (L3). */
115
+ /**
116
+ * Retrieval. mode: 'lexical' (default) | 'semantic' (L2) | 'hybrid' (L3).
117
+ *
118
+ * ## `within` — the typed half of retrieval (#1343)
119
+ *
120
+ * Money / number / date / boolean fields are NOT tokenised into the lexical
121
+ * index and never will be: instead of a second (typed-token) index format, a
122
+ * typed match is expressed as an ordinary `Query` and handed to `within`, so
123
+ * the comparison runs in the query engine — over the sorted / compound range
124
+ * indexes — in each field's CANONICAL space (money as its scaled integer, not
125
+ * as a lexically-compared string). `retrieve()` contributes the text half and
126
+ * intersects.
127
+ *
128
+ * Two ordering properties, both load-bearing:
129
+ *
130
+ * - **Scoring is global; narrowing is not.** BM25 runs over the WHOLE corpus
131
+ * (df / N / avgdl unchanged by `within`), so a document's score is the same
132
+ * whichever `within` it is paired with — a filter re-ranks nothing. Narrowing
133
+ * the postings instead would make IDF filter-dependent and scores
134
+ * incomparable between two calls. It also costs nothing to score first: the
135
+ * index already scores every doc and only slices at the end.
136
+ * - **`limit` counts hits from the NARROWED set.** Truncating corpus-wide first
137
+ * and filtering after would under-return (`limit: 10` yielding 1), so the
138
+ * mode branches run unlimited and the caller's `limit` is applied last.
139
+ *
140
+ * An empty `within` result set yields NO hits — never all of them.
141
+ *
142
+ * A `within` with an empty text query is **typed-only retrieval**: the typed
143
+ * predicate is the whole query, returned in the usual hit shape (score 0,
144
+ * `field: '(within)'`, empty snippet) so a typed and a text search are read the
145
+ * same way. An empty query with NO `within` still matches nothing.
146
+ */
107
147
  export declare function retrieve<T>(ctx: SearchContext<T>, query: string, opts?: RetrieveOptions<T>): Promise<RetrieveHit<T>[]>;
108
148
  /** L2 — raw-vector kNN over the encrypted vector set (decrypted in the trusted tier).
109
149
  * Snippet is '' for vector hits in v1 (semantic match isn't span-located). */
110
- export declare function similarTo<T>(ctx: SearchContext<T>, vector: Float32Array, opts?: {
111
- k?: number;
112
- minScore?: number;
113
- includeRecord?: boolean;
114
- }): Promise<RetrieveHit<T>[]>;
150
+ export declare function similarTo<T>(ctx: SearchContext<T>, vector: Float32Array, opts?: SimilarToOptions): Promise<RetrieveHit<T>[]>;
115
151
  /**
116
152
  * L2 — the embedding write-hook: derive a record's embedding vector at
117
153
  * write and persist it as the encrypted `_vec` side-car. Routed through the
@@ -3,9 +3,11 @@
3
3
  * lazy; an opaque-blob backend implements the same interface so the
4
4
  * collection call-site is unchanged.
5
5
  */
6
- import { InvertedIndex, type IndexDoc } from './inverted-index.js';
6
+ import { InvertedIndex, type IndexDoc, type IndexBuildOptions } from './inverted-index.js';
7
7
  export interface IndexStore {
8
- ensureBuilt(build: () => ReadonlyArray<IndexDoc>): Promise<InvertedIndex>;
8
+ /** `opts` carries the positional-postings opt-in (#1354); a persisted store also
9
+ * uses it to decide whether a loaded sidecar still matches the live config. */
10
+ ensureBuilt(build: () => ReadonlyArray<IndexDoc>, opts?: IndexBuildOptions): Promise<InvertedIndex>;
9
11
  markDirty(): void;
10
12
  flush(): Promise<void>;
11
13
  readonly built: boolean;
@@ -13,7 +15,7 @@ export interface IndexStore {
13
15
  export declare class MemoryIndexStore implements IndexStore {
14
16
  private index;
15
17
  get built(): boolean;
16
- ensureBuilt(build: () => ReadonlyArray<IndexDoc>): Promise<InvertedIndex>;
18
+ ensureBuilt(build: () => ReadonlyArray<IndexDoc>, opts?: IndexBuildOptions): Promise<InvertedIndex>;
17
19
  markDirty(): void;
18
20
  flush(): Promise<void>;
19
21
  }
@@ -8,12 +8,14 @@
8
8
  export { tokenize, type Tokenizer } from './tokenize.js';
9
9
  export { searchScan, type SearchOptions, type SearchResult, type SearchEntry } from './scan.js';
10
10
  export { segmentTokens, segmentTokenizer, type Token } from './segment.js';
11
- export { InvertedIndex, type IndexDoc, type IndexHit, type QueryOptions } from './inverted-index.js';
11
+ export { InvertedIndex, type IndexDoc, type IndexHit, type QueryOptions, type IndexBuildOptions, type IndexSnapshot } from './inverted-index.js';
12
12
  export { extractSnippet } from './snippet.js';
13
13
  export { MemoryIndexStore, type IndexStore } from './index-store.js';
14
14
  export { buildStringFieldEntries, type FieldEntry } from './build-docs.js';
15
- export type { RetrieveOptions, RetrieveHit } from './retrieve-types.js';
15
+ export type { RetrieveOptions, RetrieveHit, SimilarToOptions } from './retrieve-types.js';
16
16
  export { fuseRetrieval, type FuseOptions } from './fuse.js';
17
+ export { withVectorIndex, DEFAULT_INDEX_MIN_VECTORS, type VectorIndexOptions } from '../embeddings/with-vector-index.js';
18
+ export type { VectorIndex, VectorIndexConfig, VectorIndexSearchOptions } from '../embeddings/vector-index.js';
17
19
  export { withSearch } from './active.js';
18
20
  export { NO_SEARCH, type SearchStrategy } from './strategy.js';
19
21
  export { SearchNotEnabledError } from '../../kernel/errors.js';
@@ -14,14 +14,43 @@ export interface IndexHit {
14
14
  readonly text: string;
15
15
  readonly offset: number;
16
16
  }
17
+ /** Build-time index shape. The only knob is which fields carry positions. */
18
+ export interface IndexBuildOptions {
19
+ /** Fields whose postings record token positions (phrase / proximity). Opt-in: index size grows. */
20
+ readonly positions?: readonly string[];
21
+ }
17
22
  export interface QueryOptions {
18
23
  readonly limit?: number;
19
24
  readonly match?: 'any' | 'all';
20
25
  readonly prefix?: boolean;
21
26
  readonly fields?: readonly string[];
27
+ /**
28
+ * Per-field score weights (BM25F-style, #1354). Purely query-side — nothing
29
+ * in the index changes. A field with no entry weighs 1, and the no-boost path
30
+ * performs no multiplication at all, so an unboosted query's scores are
31
+ * bit-for-bit what they were before boosts existed.
32
+ *
33
+ * ⚠️ Textbook BM25F pools term frequencies ACROSS fields before one
34
+ * saturation step. This index scores each field independently and keeps the
35
+ * best (see the class doc), so a boost weights the per-field score instead.
36
+ * Same intent — "a hit in `name` is worth more than a hit in `notes`" —
37
+ * different arithmetic; do not expect Lucene's BM25F numbers.
38
+ */
39
+ readonly boost?: Readonly<Record<string, number>>;
22
40
  }
41
+ /**
42
+ * Persisted shape. `v` is the format stamp: an older stamp is REJECTED and the
43
+ * index rebuilt, never migrated or read leniently — see
44
+ * {@link parseIndexSnapshot}. v1 (pre-#1354) had no `posFields` and no `pos`,
45
+ * and a v1 blob read as v2 would silently answer "this doc has no positions",
46
+ * i.e. "your phrase does not match", which is a wrong answer rather than a slow
47
+ * one.
48
+ */
49
+ export declare const INDEX_SNAPSHOT_VERSION = 2;
23
50
  export interface IndexSnapshot {
24
- readonly v: 1;
51
+ readonly v: number;
52
+ /** Fields whose docs carry `pos`. Empty ⇒ nobody opted in. */
53
+ readonly posFields: readonly string[];
25
54
  readonly fieldStats: ReadonlyArray<[string, {
26
55
  df: [string, number][];
27
56
  n: number;
@@ -35,13 +64,20 @@ export interface IndexSnapshot {
35
64
  len: number;
36
65
  tf: [string, number][];
37
66
  firstOffset: [string, number][];
67
+ /** term -> ascending token ordinals. Present iff `field` ∈ `posFields`. */
68
+ pos?: [string, number[]][];
38
69
  }>;
39
70
  }
40
71
  export declare class InvertedIndex {
41
72
  private readonly fieldStats;
42
73
  private readonly docs;
43
- static build(docs: ReadonlyArray<IndexDoc>): InvertedIndex;
74
+ private posFields;
75
+ static build(docs: ReadonlyArray<IndexDoc>, opts?: IndexBuildOptions): InvertedIndex;
76
+ /** Fields this index carries positions for (#1354) — the store compares it against the live config. */
77
+ get positionFields(): ReadonlySet<string>;
44
78
  query(query: string, opts?: QueryOptions): IndexHit[];
79
+ /** Token ordinal → char offset in the ORIGINAL text, by re-segmenting this one doc. */
80
+ private charOffsetAt;
45
81
  toSnapshot(): IndexSnapshot;
46
82
  static fromSnapshot(s: IndexSnapshot): InvertedIndex;
47
83
  }
@@ -19,7 +19,7 @@
19
19
  * with the store, which is out of scope for an in-memory debounce layer over an
20
20
  * arbitrary opaque-blob backend.
21
21
  */
22
- import { InvertedIndex, type IndexDoc } from './inverted-index.js';
22
+ import { InvertedIndex, type IndexDoc, type IndexBuildOptions } from './inverted-index.js';
23
23
  import type { IndexStore } from './index-store.js';
24
24
  export interface Fingerprint {
25
25
  readonly count: number;
@@ -47,6 +47,9 @@ export declare class PersistedIndexStore implements IndexStore {
47
47
  private index;
48
48
  private timer;
49
49
  private lastBuild;
50
+ /** The positional-postings opt-in the last caller asked for (#1354). A loaded
51
+ * sidecar that does not carry exactly these fields is discarded, not adapted. */
52
+ private lastOpts;
50
53
  private readonly debounceMs;
51
54
  /**
52
55
  * Bumped by every purge (removePersisted). A save() captured under a since-stale
@@ -92,7 +95,7 @@ export declare class PersistedIndexStore implements IndexStore {
92
95
  private pendingCompensation;
93
96
  constructor(cb: PersistedIndexCallbacks);
94
97
  get built(): boolean;
95
- ensureBuilt(build: () => ReadonlyArray<IndexDoc>): Promise<InvertedIndex>;
98
+ ensureBuilt(build: () => ReadonlyArray<IndexDoc>, opts?: IndexBuildOptions): Promise<InvertedIndex>;
96
99
  markDirty(): void;
97
100
  /** Force an immediate persist (cancels any pending debounce). */
98
101
  flush(): Promise<void>;
@@ -0,0 +1,28 @@
1
+ /** One quoted clause. `slop === undefined` ⇒ strict ordered phrase. */
2
+ export interface PhraseClause {
3
+ readonly terms: readonly string[];
4
+ readonly slop: number | undefined;
5
+ }
6
+ export interface ParsedQuery {
7
+ /** Unquoted terms — scored exactly as before #1354. */
8
+ readonly terms: readonly string[];
9
+ readonly phrases: readonly PhraseClause[];
10
+ }
11
+ /**
12
+ * Split a raw query into bare terms + quoted clauses. An unterminated quote
13
+ * has no closing delimiter to match, so it never forms a clause and its text
14
+ * falls through to the bare-term tokenizer — a typo degrades to today's
15
+ * behaviour rather than to an error.
16
+ */
17
+ export declare function parseSearchQuery(query: string): ParsedQuery;
18
+ /**
19
+ * Occurrences of a clause inside one field's positional postings, plus the
20
+ * token position the first occurrence starts at (`-1` when there is none).
21
+ *
22
+ * `positions` maps term → ascending token ordinals. A term the posting does
23
+ * not carry is an immediate miss.
24
+ */
25
+ export declare function matchClause(positions: ReadonlyMap<string, readonly number[]>, clause: PhraseClause): {
26
+ count: number;
27
+ start: number;
28
+ };