@noy-db/hub 0.7.0 → 0.8.0-pre.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 (616) hide show
  1. package/CHANGELOG.md +105 -14
  2. package/LICENSE +202 -21
  3. package/NOTICE +1 -0
  4. package/README.md +27 -10
  5. package/codemods/0.8.0-pre.json +61 -0
  6. package/dist/api-GVYEKSJE.js +19 -0
  7. package/dist/as/index.js +11 -11
  8. package/dist/at/index.js +9 -9
  9. package/dist/attestation/index.js +20 -20
  10. package/dist/{backup-IJTB4S4M.js → backup-7TFRVFLH.js} +21 -15
  11. package/dist/backup-7TFRVFLH.js.map +1 -0
  12. package/dist/blobs/index.js +13 -13
  13. package/dist/broker/index.js +12 -12
  14. package/dist/by/index.js +2 -2
  15. package/dist/cargo/index.js +39 -36
  16. package/dist/{chunk-7O3Y4PPD.js → chunk-244VXYPG.js} +140 -16
  17. package/dist/chunk-244VXYPG.js.map +1 -0
  18. package/dist/{chunk-BUE2D7PX.js → chunk-32YV3TJT.js} +2 -2
  19. package/dist/{chunk-3RCJJBNR.js → chunk-3ELRMVJK.js} +12 -12
  20. package/dist/{chunk-6GMZ7HEE.js → chunk-3F7GLNAE.js} +6 -6
  21. package/dist/{chunk-2Y4IMKA6.js → chunk-3H5KLDZN.js} +4 -4
  22. package/dist/{chunk-VTFVLCUH.js → chunk-3JWHAR6E.js} +2 -2
  23. package/dist/{chunk-YMUFFJCO.js → chunk-3TDUWVWB.js} +5 -2
  24. package/dist/chunk-3TDUWVWB.js.map +1 -0
  25. package/dist/{chunk-JBDFMYKQ.js → chunk-4AF3TUMP.js} +2 -2
  26. package/dist/{chunk-ZORTV6NH.js → chunk-4I522ERM.js} +88 -4
  27. package/dist/chunk-4I522ERM.js.map +1 -0
  28. package/dist/{chunk-MUM7IANK.js → chunk-4MXI3ODD.js} +4 -4
  29. package/dist/chunk-4MXI3ODD.js.map +1 -0
  30. package/dist/{chunk-BLN54W3L.js → chunk-5FDLC6G7.js} +56 -3
  31. package/dist/chunk-5FDLC6G7.js.map +1 -0
  32. package/dist/chunk-5O7D6ZTW.js +53 -0
  33. package/dist/chunk-5O7D6ZTW.js.map +1 -0
  34. package/dist/{chunk-J6FXAEUG.js → chunk-6B3VNR4P.js} +12 -12
  35. package/dist/{chunk-TUFM4UZP.js → chunk-6K7DPM7D.js} +2 -2
  36. package/dist/{chunk-K6LHRFBL.js → chunk-6LMQ5R26.js} +7 -7
  37. package/dist/{chunk-SPXXX5E4.js → chunk-6LNL42F5.js} +94 -32
  38. package/dist/chunk-6LNL42F5.js.map +1 -0
  39. package/dist/{chunk-XLMEZIAJ.js → chunk-6OWXYZK2.js} +2 -2
  40. package/dist/{chunk-BOWNCWZT.js → chunk-6QSQQLSE.js} +3 -3
  41. package/dist/chunk-7JE7BDYJ.js +1558 -0
  42. package/dist/chunk-7JE7BDYJ.js.map +1 -0
  43. package/dist/{chunk-KG7TZKZG.js → chunk-7VCXZDA4.js} +5 -5
  44. package/dist/chunk-7VCXZDA4.js.map +1 -0
  45. package/dist/{chunk-NQKIUNW5.js → chunk-A6IJU4TK.js} +2 -2
  46. package/dist/{chunk-BM5TWITZ.js → chunk-ANWPSTZU.js} +38 -9
  47. package/dist/chunk-ANWPSTZU.js.map +1 -0
  48. package/dist/{chunk-QIZPZMUI.js → chunk-AOWGXU6D.js} +2 -2
  49. package/dist/{chunk-CUZLNGD5.js → chunk-B2YY6WDD.js} +1 -1
  50. package/dist/chunk-B2YY6WDD.js.map +1 -0
  51. package/dist/{chunk-SFAWCTEM.js → chunk-B57AFBY2.js} +2 -2
  52. package/dist/{chunk-GPEQUXHL.js → chunk-B6SJIBQK.js} +4 -4
  53. package/dist/chunk-BJ2IXQ5Q.js +100 -0
  54. package/dist/chunk-BJ2IXQ5Q.js.map +1 -0
  55. package/dist/{chunk-Q2PU57HC.js → chunk-BK2HHQGN.js} +2 -2
  56. package/dist/chunk-BKT776R5.js +1 -0
  57. package/dist/{chunk-KUX3OB6D.js → chunk-BP6DARYA.js} +33 -5
  58. package/dist/chunk-BP6DARYA.js.map +1 -0
  59. package/dist/{chunk-FXBIP2WD.js → chunk-BUDAGWL5.js} +6 -6
  60. package/dist/chunk-CF5UU4S7.js +757 -0
  61. package/dist/chunk-CF5UU4S7.js.map +1 -0
  62. package/dist/{chunk-BOET4NA4.js → chunk-CKNGS5MH.js} +3 -3
  63. package/dist/chunk-CY2CYVWZ.js +41 -0
  64. package/dist/chunk-CY2CYVWZ.js.map +1 -0
  65. package/dist/{chunk-2577DKXB.js → chunk-DC5QVPV7.js} +2 -2
  66. package/dist/chunk-DC5QVPV7.js.map +1 -0
  67. package/dist/{chunk-YSRUYAVU.js → chunk-DE4DH2RZ.js} +2 -2
  68. package/dist/{chunk-6I2RQCET.js → chunk-DF73H4UN.js} +4 -4
  69. package/dist/{chunk-4GVM6QZA.js → chunk-ENAG3IY7.js} +2 -2
  70. package/dist/chunk-ENAG3IY7.js.map +1 -0
  71. package/dist/{chunk-K7NTTA6P.js → chunk-EOVMT6TB.js} +2 -2
  72. package/dist/chunk-F24ZZTHQ.js +193 -0
  73. package/dist/chunk-F24ZZTHQ.js.map +1 -0
  74. package/dist/chunk-F2TDU7MQ.js +456 -0
  75. package/dist/chunk-F2TDU7MQ.js.map +1 -0
  76. package/dist/chunk-F6NCB7KT.js +13 -0
  77. package/dist/chunk-F6NCB7KT.js.map +1 -0
  78. package/dist/{chunk-SPYWXKJN.js → chunk-F7XGHL5O.js} +3 -3
  79. package/dist/chunk-F7XGHL5O.js.map +1 -0
  80. package/dist/{chunk-XTXOCYOJ.js → chunk-FCKWQE2H.js} +5 -5
  81. package/dist/{chunk-U4FOQDY4.js → chunk-FH2L2E34.js} +4 -4
  82. package/dist/chunk-FH2L2E34.js.map +1 -0
  83. package/dist/{chunk-4OZNXTO4.js → chunk-FN5EBVTQ.js} +2 -2
  84. package/dist/chunk-FQ54DWUQ.js +270 -0
  85. package/dist/chunk-FQ54DWUQ.js.map +1 -0
  86. package/dist/{chunk-NKHRDYOR.js → chunk-FQ5VRHIB.js} +4 -4
  87. package/dist/{chunk-FAHMLERK.js → chunk-FW22ZCXT.js} +2 -2
  88. package/dist/chunk-FXQBGFOX.js +524 -0
  89. package/dist/chunk-FXQBGFOX.js.map +1 -0
  90. package/dist/{chunk-AO42KJO6.js → chunk-GF5BZ7D4.js} +45 -9
  91. package/dist/chunk-GF5BZ7D4.js.map +1 -0
  92. package/dist/{chunk-TRGTKX5E.js → chunk-GHLTDZRS.js} +5 -3
  93. package/dist/{chunk-TRGTKX5E.js.map → chunk-GHLTDZRS.js.map} +1 -1
  94. package/dist/{chunk-5WDXHNSW.js → chunk-HBPPGWUM.js} +5 -5
  95. package/dist/chunk-HBPPGWUM.js.map +1 -0
  96. package/dist/{chunk-KTFRCC5C.js → chunk-HBRLNOHL.js} +82 -8
  97. package/dist/chunk-HBRLNOHL.js.map +1 -0
  98. package/dist/chunk-HLEK5VAN.js +275 -0
  99. package/dist/chunk-HLEK5VAN.js.map +1 -0
  100. package/dist/{chunk-RMS3NEA3.js → chunk-HT2AHGQI.js} +2 -2
  101. package/dist/{chunk-CHJBLCOG.js → chunk-HVSCEIYL.js} +7 -7
  102. package/dist/{chunk-UXWB3FPF.js → chunk-I3JDRCMW.js} +150 -22
  103. package/dist/chunk-I3JDRCMW.js.map +1 -0
  104. package/dist/{chunk-GY4WYNNG.js → chunk-ID6Z6E66.js} +2 -2
  105. package/dist/{chunk-EYBQEIUY.js → chunk-IEX7NK2K.js} +3 -3
  106. package/dist/{chunk-KUJDV5QH.js → chunk-ISZQJBML.js} +5 -5
  107. package/dist/{chunk-LWBCUYZW.js → chunk-IT22PWKV.js} +2 -2
  108. package/dist/{chunk-EQEYOJBM.js → chunk-IUWCVHQ7.js} +3 -3
  109. package/dist/chunk-IUWCVHQ7.js.map +1 -0
  110. package/dist/{chunk-7V4TP3AF.js → chunk-J6UOHJY5.js} +4 -4
  111. package/dist/{chunk-JMGDHKQF.js → chunk-JCN44NCY.js} +2 -2
  112. package/dist/{chunk-CARABLSQ.js → chunk-K6W7BVZ6.js} +3 -3
  113. package/dist/{chunk-77K4PG6P.js → chunk-KJFW62P4.js} +29 -11
  114. package/dist/chunk-KJFW62P4.js.map +1 -0
  115. package/dist/{chunk-453F654R.js → chunk-L7DOS3TE.js} +2 -2
  116. package/dist/chunk-LGNDFRYC.js +23 -0
  117. package/dist/chunk-LGNDFRYC.js.map +1 -0
  118. package/dist/{chunk-WEQEYLCS.js → chunk-LGRLME4M.js} +7 -7
  119. package/dist/{chunk-RMF67KCG.js → chunk-LQ4ZHOKP.js} +2 -2
  120. package/dist/{chunk-ZVO4QVPD.js → chunk-M522UYZ2.js} +5 -5
  121. package/dist/{chunk-G56KBWFY.js → chunk-M7NI3IWE.js} +45 -12
  122. package/dist/chunk-M7NI3IWE.js.map +1 -0
  123. package/dist/chunk-MDWKM2XC.js +293 -0
  124. package/dist/chunk-MDWKM2XC.js.map +1 -0
  125. package/dist/chunk-MKXXMNJH.js +204 -0
  126. package/dist/chunk-MKXXMNJH.js.map +1 -0
  127. package/dist/{chunk-SKGMN35F.js → chunk-MLPHLJIQ.js} +3 -3
  128. package/dist/chunk-MLPHLJIQ.js.map +1 -0
  129. package/dist/{chunk-2N4GY74U.js → chunk-MTL7MXGR.js} +6 -6
  130. package/dist/{chunk-TFR7DSOV.js → chunk-MVZ2TPVP.js} +2 -2
  131. package/dist/{chunk-CPWQB3N5.js → chunk-N5DNADLQ.js} +7 -7
  132. package/dist/{chunk-ELNXJMGB.js → chunk-NNARWO72.js} +6 -6
  133. package/dist/{chunk-PT43Y56J.js → chunk-NRT6QZQB.js} +102 -16
  134. package/dist/chunk-NRT6QZQB.js.map +1 -0
  135. package/dist/{chunk-QIBVIOXO.js → chunk-NWHBJQAL.js} +99 -8
  136. package/dist/chunk-NWHBJQAL.js.map +1 -0
  137. package/dist/chunk-NYMLINRP.js +28 -0
  138. package/dist/chunk-NYMLINRP.js.map +1 -0
  139. package/dist/{chunk-7MG7SJT7.js → chunk-ODVPTDPK.js} +1 -1
  140. package/dist/chunk-ODVPTDPK.js.map +1 -0
  141. package/dist/chunk-ORDURZBU.js +461 -0
  142. package/dist/chunk-ORDURZBU.js.map +1 -0
  143. package/dist/{chunk-6YXCPL4T.js → chunk-PDCG6PR5.js} +2 -2
  144. package/dist/{chunk-REDOOY2Q.js → chunk-PSIV7CJV.js} +2 -2
  145. package/dist/{chunk-NA2NIJZI.js → chunk-QBBUZ3I3.js} +126 -19
  146. package/dist/chunk-QBBUZ3I3.js.map +1 -0
  147. package/dist/{chunk-5VCRVKOZ.js → chunk-QOOUUR4A.js} +6 -4
  148. package/dist/{chunk-5VCRVKOZ.js.map → chunk-QOOUUR4A.js.map} +1 -1
  149. package/dist/{chunk-ANATMFIO.js → chunk-QWFHIOD2.js} +5 -5
  150. package/dist/{chunk-X2DLENDQ.js → chunk-QWGU66MP.js} +3 -3
  151. package/dist/chunk-RHVMZSUU.js +7 -0
  152. package/dist/chunk-RHVMZSUU.js.map +1 -0
  153. package/dist/{chunk-BSFNRLK2.js → chunk-S57HTZ6X.js} +5 -5
  154. package/dist/{chunk-SZJ3DLZA.js → chunk-SEE332EV.js} +2 -2
  155. package/dist/{chunk-YYP7WSEB.js → chunk-SI3V7D4G.js} +2 -2
  156. package/dist/{chunk-UGTBXF5U.js → chunk-SOIQ4MM4.js} +3 -3
  157. package/dist/chunk-SUZKW6UR.js +25 -0
  158. package/dist/chunk-SUZKW6UR.js.map +1 -0
  159. package/dist/{chunk-VXGSWL6L.js → chunk-SYVZW77S.js} +6 -6
  160. package/dist/{chunk-6GOE5PGN.js → chunk-T2LBQ5DV.js} +883 -227
  161. package/dist/chunk-T2LBQ5DV.js.map +1 -0
  162. package/dist/chunk-T52GX4SA.js +215 -0
  163. package/dist/chunk-T52GX4SA.js.map +1 -0
  164. package/dist/{chunk-MVMXZYXT.js → chunk-TKUOEU2F.js} +2 -2
  165. package/dist/chunk-TOPYQ6GA.js +31 -0
  166. package/dist/chunk-TOPYQ6GA.js.map +1 -0
  167. package/dist/{chunk-SMH6SRX7.js → chunk-TROR3ALR.js} +2 -2
  168. package/dist/{chunk-2C3AQB46.js → chunk-UD5EVGZ7.js} +42 -389
  169. package/dist/chunk-UD5EVGZ7.js.map +1 -0
  170. package/dist/{chunk-KJIMGIWO.js → chunk-UPD5NWI5.js} +65 -17
  171. package/dist/chunk-UPD5NWI5.js.map +1 -0
  172. package/dist/{chunk-SL3JAAKN.js → chunk-UYB234ZR.js} +30 -2
  173. package/dist/chunk-UYB234ZR.js.map +1 -0
  174. package/dist/chunk-VHM7HCKB.js +220 -0
  175. package/dist/chunk-VHM7HCKB.js.map +1 -0
  176. package/dist/{chunk-DGOZ4UZD.js → chunk-VNNRUGMM.js} +2 -2
  177. package/dist/{chunk-HDOU6I2Y.js → chunk-VNPEWFPD.js} +4 -4
  178. package/dist/{chunk-L7CIOOBW.js → chunk-WNJ4AVGE.js} +2 -2
  179. package/dist/{chunk-FMZY5Q6L.js → chunk-WX5ADGTZ.js} +3 -3
  180. package/dist/{chunk-VXANTWBJ.js → chunk-WY2XXTET.js} +92 -6
  181. package/dist/{chunk-VXANTWBJ.js.map → chunk-WY2XXTET.js.map} +1 -1
  182. package/dist/{chunk-6X6SEMEE.js → chunk-X25NWUZB.js} +33 -8
  183. package/dist/chunk-X25NWUZB.js.map +1 -0
  184. package/dist/{chunk-Q7HZX3IF.js → chunk-X4773RBR.js} +2 -2
  185. package/dist/chunk-XBKH4FOC.js +195 -0
  186. package/dist/chunk-XBKH4FOC.js.map +1 -0
  187. package/dist/{chunk-ANSIZYEG.js → chunk-YNIUIERI.js} +3 -3
  188. package/dist/chunk-YSK2CU2Q.js +936 -0
  189. package/dist/chunk-YSK2CU2Q.js.map +1 -0
  190. package/dist/{chunk-UXVWEX5L.js → chunk-Z5HTYMMQ.js} +6 -2
  191. package/dist/chunk-Z5HTYMMQ.js.map +1 -0
  192. package/dist/{chunk-RRNRNANG.js → chunk-ZE4CHIED.js} +66 -75
  193. package/dist/chunk-ZE4CHIED.js.map +1 -0
  194. package/dist/chunk-ZSX4S5XB.js +1289 -0
  195. package/dist/chunk-ZSX4S5XB.js.map +1 -0
  196. package/dist/{chunk-BZ3534YM.js → chunk-ZUVBC32X.js} +2 -2
  197. package/dist/{chunk-L742JPKZ.js → chunk-ZXABPVM6.js} +6 -6
  198. package/dist/classified/index.js +5 -5
  199. package/dist/{classified-marker-LI2SF2E4.js → classified-marker-W3USLL5M.js} +3 -3
  200. package/dist/collection-facade-QU6IJBN3.js +48 -0
  201. package/dist/{computed-VPOKQK4N.js → computed-TPFBX7U4.js} +3 -3
  202. package/dist/consent/index.js +9 -9
  203. package/dist/cover/index.js +10 -10
  204. package/dist/coverage/index.js +306 -0
  205. package/dist/coverage/index.js.map +1 -0
  206. package/dist/custody/index.js +12 -12
  207. package/dist/{dead-filter-TSWZQRR5.js → dead-filter-U2UYKSZL.js} +2 -2
  208. package/dist/debug/index.js +1 -1
  209. package/dist/{delegation-OVIFFPG4.js → delegation-S3AEPW2T.js} +11 -11
  210. package/dist/derivations/index.js +25 -22
  211. package/dist/derive-OX7F6TGG.js +21 -0
  212. package/dist/directory/index.js +10 -10
  213. package/dist/{dispatch-WC6X2M6C.js → dispatch-3CQDJV5Q.js} +5 -5
  214. package/dist/{dispatch-S73TK3IY.js → dispatch-RH4LHKBH.js} +21 -21
  215. package/dist/{enclave-KJOTOH7X.js → enclave-27SMF6GF.js} +15 -9
  216. package/dist/executor-B6SRO2QS.js +36 -0
  217. package/dist/executor-BI5CHWRY.js +8 -0
  218. package/dist/executor-RBKM5W5K.js +8 -0
  219. package/dist/export-accessible-VMA3YM5V.js +22 -0
  220. package/dist/extract-partition-NF7PXGPP.js +37 -0
  221. package/dist/{fanout-sidecar-WUFXNYP4.js → fanout-sidecar-OT6RYLOL.js} +9 -9
  222. package/dist/find-LZMP26KF.js +10 -0
  223. package/dist/forget/index.js +9 -9
  224. package/dist/guards/index.js +4 -4
  225. package/dist/history/index.js +13 -13
  226. package/dist/i18n/index.js +14 -14
  227. package/dist/index.d.ts +29 -6
  228. package/dist/index.js +999 -191
  229. package/dist/index.js.map +1 -1
  230. package/dist/indexing/index.js +13 -5
  231. package/dist/indexing/index.js.map +1 -1
  232. package/dist/introspection/index.js +11 -11
  233. package/dist/issue-IHARXWW5.js +18 -0
  234. package/dist/ivf-flat-UZ6DQDLS.js +314 -0
  235. package/dist/ivf-flat-UZ6DQDLS.js.map +1 -0
  236. package/dist/{json-schema-V3M5MUCM.js → json-schema-3SHX72CC.js} +2 -1
  237. package/dist/json-schema-3SHX72CC.js.map +1 -0
  238. package/dist/kernel/collection-config.d.ts +4 -20
  239. package/dist/kernel/collection.d.ts +29 -8
  240. package/dist/kernel/enclave/crypto.d.ts +16 -0
  241. package/dist/kernel/enclave/index.d.ts +1 -1
  242. package/dist/kernel/enclave/record-keys/record-codec.d.ts +25 -0
  243. package/dist/kernel/errors.d.ts +227 -36
  244. package/dist/kernel/generation-map.d.ts +48 -0
  245. package/dist/kernel/memory-store.d.ts +35 -7
  246. package/dist/kernel/noydb.d.ts +6 -1
  247. package/dist/kernel/present-cache.d.ts +58 -0
  248. package/dist/kernel/query/all.d.ts +7 -0
  249. package/dist/kernel/query/builder.d.ts +601 -270
  250. package/dist/kernel/query/civil-date.d.ts +64 -0
  251. package/dist/kernel/query/cursor.d.ts +40 -0
  252. package/dist/kernel/query/distinct-key.d.ts +98 -0
  253. package/dist/kernel/query/hydration.d.ts +76 -0
  254. package/dist/kernel/query/index.d.ts +31 -15
  255. package/dist/kernel/query/internal/core.d.ts +30 -0
  256. package/dist/kernel/query/internal/hooks.d.ts +22 -0
  257. package/dist/kernel/query/internal/maintenance.d.ts +43 -0
  258. package/dist/kernel/query/live/incremental.d.ts +314 -0
  259. package/dist/kernel/query/live/index.d.ts +22 -0
  260. package/dist/kernel/query/live/install.d.ts +2 -0
  261. package/dist/kernel/query/{live.d.ts → live/live.d.ts} +39 -9
  262. package/dist/kernel/query/live/methods.d.ts +107 -0
  263. package/dist/kernel/query/predicate.d.ts +119 -1
  264. package/dist/kernel/query/reduce/date-trunc.d.ts +75 -0
  265. package/dist/kernel/query/reduce/index.d.ts +36 -0
  266. package/dist/kernel/query/reduce/install.d.ts +2 -0
  267. package/dist/kernel/query/reduce/methods.d.ts +259 -0
  268. package/dist/kernel/query/reduce/scan-methods.d.ts +121 -0
  269. package/dist/kernel/query/relate/explain.d.ts +199 -0
  270. package/dist/kernel/query/relate/index.d.ts +48 -0
  271. package/dist/kernel/query/relate/install.d.ts +2 -0
  272. package/dist/kernel/query/relate/join-on.d.ts +126 -0
  273. package/dist/kernel/query/relate/join-reduce.d.ts +16 -0
  274. package/dist/kernel/query/relate/join.d.ts +452 -0
  275. package/dist/kernel/query/relate/methods.d.ts +426 -0
  276. package/dist/kernel/query/relate/partition.d.ts +87 -0
  277. package/dist/kernel/query/relate/scan-methods.d.ts +163 -0
  278. package/dist/kernel/query/relate/traverse.d.ts +109 -0
  279. package/dist/kernel/query/scan-builder.d.ts +79 -176
  280. package/dist/kernel/query/sort-key.d.ts +52 -0
  281. package/dist/kernel/tx-write-gate.d.ts +77 -0
  282. package/dist/kernel/types.d.ts +71 -3
  283. package/dist/kernel/validation.d.ts +27 -10
  284. package/dist/kernel/vault.d.ts +9 -4
  285. package/dist/kernel/via/compose.d.ts +3 -0
  286. package/dist/kernel/via/index.d.ts +56 -0
  287. package/dist/kernel/via/pipeline.d.ts +48 -0
  288. package/dist/{ledger-F33ZVMTK.js → ledger-KZPCMVZY.js} +11 -11
  289. package/dist/liberate-GRLCZMW4.js +24 -0
  290. package/dist/link-set-JCMJ7ULP.js +30 -0
  291. package/dist/{managed-secret-PQYKSR6T.js → managed-secret-S3MQ6SH6.js} +10 -10
  292. package/dist/materialized-views/index.js +30 -23
  293. package/dist/{migrate-cek-5ENH64AA.js → migrate-cek-V7GKJZ7O.js} +2 -2
  294. package/dist/money/index.js +5 -5
  295. package/dist/noydb-SWQJ3MZS.js +97 -0
  296. package/dist/overlay-views/index.js +4 -4
  297. package/dist/periods/index.js +12 -12
  298. package/dist/pod/index.js +75 -68
  299. package/dist/{pod-handle-Q736KYON.js → pod-handle-WGDFB4C2.js} +9 -9
  300. package/dist/policy/index.js +10 -10
  301. package/dist/port/with/blob-strategy.d.ts +9 -0
  302. package/dist/port/with/collection-options.d.ts +5 -0
  303. package/dist/port/with/coverage-strategy.d.ts +83 -0
  304. package/dist/port/with/service-bus.d.ts +46 -0
  305. package/dist/port/with/strategies.d.ts +2 -0
  306. package/dist/portability/index.js +8 -8
  307. package/dist/{post-register-LNE2FE2A.js → post-register-SLSXIPBV.js} +6 -6
  308. package/dist/query/all/index.js +31 -0
  309. package/dist/query/index.js +20 -32
  310. package/dist/query/live/index.js +21 -0
  311. package/dist/query/live/index.js.map +1 -0
  312. package/dist/query/reduce/index.js +33 -0
  313. package/dist/query/reduce/index.js.map +1 -0
  314. package/dist/query/relate/index.js +56 -0
  315. package/dist/query/relate/index.js.map +1 -0
  316. package/dist/reduce/index.js +72 -18
  317. package/dist/reduce/index.js.map +1 -1
  318. package/dist/register-F3OYE7MJ.js +31 -0
  319. package/dist/registry-CILQFXFK.js +8 -0
  320. package/dist/registry-XNNYQVKV.js +8 -0
  321. package/dist/registry-YCDZV3VW.js +35 -0
  322. package/dist/registry-ZGYS33TE.js +24 -0
  323. package/dist/request-withdrawal-Z5NC6TXT.js +30 -0
  324. package/dist/{reveal-67RDQRIN.js → reveal-4BCKPEC2.js} +6 -6
  325. package/dist/revoke-ZL62WC2D.js +23 -0
  326. package/dist/satellites/index.js +1 -1
  327. package/dist/schema-update/index.js +2 -2
  328. package/dist/sealed-record/index.js +12 -12
  329. package/dist/search/index.js +11 -5
  330. package/dist/{seed-G42JYN56.js → seed-4JS2RJ4A.js} +12 -12
  331. package/dist/sequence/index.js +9 -9
  332. package/dist/session/index.js +9 -9
  333. package/dist/shadow/index.js +2 -2
  334. package/dist/signer-MBZZMXTC.js +24 -0
  335. package/dist/snapshots/index.js +10 -10
  336. package/dist/{stale-DDL7WQEZ.js → stale-TJ3DYZMQ.js} +10 -10
  337. package/dist/storage-SVMKRGCW.js +22 -0
  338. package/dist/{store-coordination-provider-MEQ2MJQG.js → store-coordination-provider-2O2VUHKW.js} +10 -10
  339. package/dist/sync/index.js +10 -10
  340. package/dist/team/index.js +17 -15
  341. package/dist/tiers/index.js +13 -11
  342. package/dist/to/index.js +2 -2
  343. package/dist/transactions/index.js +3 -3
  344. package/dist/util/index.js +1 -1
  345. package/dist/vault-head/index.js +8 -8
  346. package/dist/{verify-KOV2G5D6.js → verify-RVT67IMH.js} +5 -5
  347. package/dist/via/blob/index.d.ts +1 -0
  348. package/dist/via/geo/binding.d.ts +31 -0
  349. package/dist/via/geo/descriptor.d.ts +54 -0
  350. package/dist/via/geo/geohash.d.ts +95 -0
  351. package/dist/via/geo/index.d.ts +13 -0
  352. package/dist/via/geo/where.d.ts +50 -0
  353. package/dist/via/i18n/core.d.ts +1 -1
  354. package/dist/via/lookup/registry.d.ts +1 -1
  355. package/dist/via/lookup/snapshot.d.ts +3 -3
  356. package/dist/walk-HJ42EISE.js +21 -0
  357. package/dist/walk-HJ42EISE.js.map +1 -0
  358. package/dist/with-audit/coverage/accounting.d.ts +112 -0
  359. package/dist/with-audit/coverage/active.d.ts +29 -0
  360. package/dist/with-audit/coverage/index.d.ts +61 -0
  361. package/dist/with-audit/coverage/sketch.d.ts +75 -0
  362. package/dist/with-audit/periods/periods.d.ts +55 -7
  363. package/dist/with-audit/periods/reserved-collections.d.ts +3 -0
  364. package/dist/with-audit/periods/vault-facade.d.ts +17 -0
  365. package/dist/with-audit/tiers/index.d.ts +51 -0
  366. package/dist/with-audit/tiers/strategy.d.ts +8 -0
  367. package/dist/with-cargo/floor.d.ts +2 -2
  368. package/dist/with-commit/tx/invariants.d.ts +1 -1
  369. package/dist/with-commit/tx/transaction.d.ts +13 -3
  370. package/dist/with-formula/materialized-views/dependency-analyzer.d.ts +4 -3
  371. package/dist/with-formula/materialized-views/emit-memo.d.ts +40 -0
  372. package/dist/with-formula/materialized-views/executor.d.ts +8 -0
  373. package/dist/with-formula/materialized-views/index.d.ts +1 -1
  374. package/dist/with-formula/materialized-views/registry.d.ts +15 -0
  375. package/dist/with-formula/materialized-views/types.d.ts +106 -14
  376. package/dist/with-formula/materialized-views/window-stage.d.ts +11 -0
  377. package/dist/with-formula/overlay-views/types.d.ts +1 -1
  378. package/dist/with-formula/overlay-views/virtual-collection.d.ts +13 -4
  379. package/dist/with-lookup/embeddings/chunks.d.ts +79 -0
  380. package/dist/with-lookup/embeddings/descriptor.d.ts +21 -0
  381. package/dist/with-lookup/embeddings/index.d.ts +3 -0
  382. package/dist/with-lookup/embeddings/ivf-flat.d.ts +93 -0
  383. package/dist/with-lookup/embeddings/vector-index.d.ts +73 -0
  384. package/dist/with-lookup/embeddings/vector-set.d.ts +94 -1
  385. package/dist/with-lookup/embeddings/with-vector-index.d.ts +67 -0
  386. package/dist/with-lookup/indexing/collection-facade.d.ts +85 -2
  387. package/dist/with-lookup/indexing/compound-indexes.d.ts +129 -0
  388. package/dist/with-lookup/indexing/eager-indexes.d.ts +170 -1
  389. package/dist/with-lookup/indexing/index-snapshot.d.ts +62 -0
  390. package/dist/with-lookup/indexing/lazy-builder.d.ts +33 -0
  391. package/dist/with-lookup/indexing/persisted-field-indexes.d.ts +104 -0
  392. package/dist/with-lookup/indexing/persisted-indexes.d.ts +12 -0
  393. package/dist/with-lookup/indexing/sorted-indexes.d.ts +117 -0
  394. package/dist/with-lookup/indexing/unique-constraints.d.ts +106 -23
  395. package/dist/with-lookup/reduce/active.d.ts +2 -24
  396. package/dist/with-lookup/reduce/group-core.d.ts +43 -0
  397. package/dist/with-lookup/reduce/groupby.d.ts +195 -36
  398. package/dist/with-lookup/reduce/incremental-group.d.ts +153 -0
  399. package/dist/with-lookup/reduce/index.d.ts +26 -5
  400. package/dist/with-lookup/reduce/reducers.d.ts +255 -1
  401. package/dist/with-lookup/reduce/reduction.d.ts +44 -13
  402. package/dist/with-lookup/reduce/strategy.d.ts +43 -3
  403. package/dist/with-lookup/reduce/window.d.ts +262 -0
  404. package/dist/with-lookup/search/collection-facade.d.ts +44 -8
  405. package/dist/with-lookup/search/index-store.d.ts +5 -3
  406. package/dist/with-lookup/search/index.d.ts +4 -2
  407. package/dist/with-lookup/search/inverted-index.d.ts +38 -2
  408. package/dist/with-lookup/search/persisted-index-store.d.ts +5 -2
  409. package/dist/with-lookup/search/phrase.d.ts +28 -0
  410. package/dist/with-lookup/search/retrieve-types.d.ts +57 -1
  411. package/dist/with-lookup/search/serialize.d.ts +29 -3
  412. package/dist/with-lookup/search/strategy.d.ts +2 -6
  413. package/dist/with-party/directory/cover/index.d.ts +1 -1
  414. package/dist/with-party/directory/cover/storage.d.ts +1 -1
  415. package/dist/with-party/directory/cover/types.d.ts +1 -1
  416. package/dist/with-party/directory/index.d.ts +1 -1
  417. package/dist/with-party/directory/types.d.ts +1 -1
  418. package/dist/with-party/directory/user-envelope/api.d.ts +1 -1
  419. package/dist/with-party/policy/engine.d.ts +1 -1
  420. package/dist/with-party/policy/index.d.ts +1 -1
  421. package/dist/with-party/policy/presets.d.ts +1 -1
  422. package/dist/with-party/team/authenticators.d.ts +91 -1
  423. package/dist/with-party/team/index.d.ts +3 -2
  424. package/dist/with-party/team/keyring.d.ts +13 -6
  425. package/dist/with-party/team/managed-secret.d.ts +1 -1
  426. package/dist/with-party/team/noydb-facade.d.ts +12 -3
  427. package/dist/with-party/team/wrapped-deks.d.ts +4 -4
  428. package/dist/with-pod/format.d.ts +1 -1
  429. package/dist/with-pod/pod.d.ts +5 -5
  430. package/dist/with-shape/blobs/blob-compaction.d.ts +16 -0
  431. package/dist/with-shape/blobs/blob-set.d.ts +21 -2
  432. package/dist/with-shape/blobs/legacy-sweep.d.ts +35 -0
  433. package/dist/with-shape/introspection/describe.d.ts +6 -0
  434. package/dist/with-shape/introspection/field-meta.d.ts +18 -0
  435. package/dist/with-shape/introspection/types.d.ts +57 -1
  436. package/dist/with-shape/links/vault-facade.d.ts +1 -1
  437. package/dist/with-store/partitioned/index.d.ts +337 -0
  438. package/dist/with-sync/change-broadcast.d.ts +153 -0
  439. package/dist/withdraw-accessible-5NZUPAVA.js +27 -0
  440. package/dist/withdraw-accessible-5NZUPAVA.js.map +1 -0
  441. package/package.json +37 -10
  442. package/dist/api-TXFOVOXX.js +0 -19
  443. package/dist/backup-IJTB4S4M.js.map +0 -1
  444. package/dist/chunk-2577DKXB.js.map +0 -1
  445. package/dist/chunk-2C3AQB46.js.map +0 -1
  446. package/dist/chunk-4GVM6QZA.js.map +0 -1
  447. package/dist/chunk-5WDXHNSW.js.map +0 -1
  448. package/dist/chunk-6GOE5PGN.js.map +0 -1
  449. package/dist/chunk-6X6SEMEE.js.map +0 -1
  450. package/dist/chunk-77K4PG6P.js.map +0 -1
  451. package/dist/chunk-7MG2LHO5.js +0 -1616
  452. package/dist/chunk-7MG2LHO5.js.map +0 -1
  453. package/dist/chunk-7MG7SJT7.js.map +0 -1
  454. package/dist/chunk-7O3Y4PPD.js.map +0 -1
  455. package/dist/chunk-AO42KJO6.js.map +0 -1
  456. package/dist/chunk-ATL3ZVXT.js +0 -151
  457. package/dist/chunk-ATL3ZVXT.js.map +0 -1
  458. package/dist/chunk-BLN54W3L.js.map +0 -1
  459. package/dist/chunk-BM5TWITZ.js.map +0 -1
  460. package/dist/chunk-CUZLNGD5.js.map +0 -1
  461. package/dist/chunk-EQEYOJBM.js.map +0 -1
  462. package/dist/chunk-G56KBWFY.js.map +0 -1
  463. package/dist/chunk-I3ISCYT7.js +0 -159
  464. package/dist/chunk-I3ISCYT7.js.map +0 -1
  465. package/dist/chunk-KG7TZKZG.js.map +0 -1
  466. package/dist/chunk-KJIMGIWO.js.map +0 -1
  467. package/dist/chunk-KTFRCC5C.js.map +0 -1
  468. package/dist/chunk-KUX3OB6D.js.map +0 -1
  469. package/dist/chunk-MUM7IANK.js.map +0 -1
  470. package/dist/chunk-NA2NIJZI.js.map +0 -1
  471. package/dist/chunk-NSITFOCJ.js +0 -99
  472. package/dist/chunk-NSITFOCJ.js.map +0 -1
  473. package/dist/chunk-PT43Y56J.js.map +0 -1
  474. package/dist/chunk-QIBVIOXO.js.map +0 -1
  475. package/dist/chunk-RRNRNANG.js.map +0 -1
  476. package/dist/chunk-RTBJ5IOO.js +0 -87
  477. package/dist/chunk-RTBJ5IOO.js.map +0 -1
  478. package/dist/chunk-SKGMN35F.js.map +0 -1
  479. package/dist/chunk-SL3JAAKN.js.map +0 -1
  480. package/dist/chunk-SPXXX5E4.js.map +0 -1
  481. package/dist/chunk-SPYWXKJN.js.map +0 -1
  482. package/dist/chunk-U4FOQDY4.js.map +0 -1
  483. package/dist/chunk-UXVWEX5L.js.map +0 -1
  484. package/dist/chunk-UXWB3FPF.js.map +0 -1
  485. package/dist/chunk-YMUFFJCO.js.map +0 -1
  486. package/dist/chunk-ZN4FD4PE.js +0 -364
  487. package/dist/chunk-ZN4FD4PE.js.map +0 -1
  488. package/dist/chunk-ZORTV6NH.js.map +0 -1
  489. package/dist/collection-facade-4GRREZ6C.js +0 -45
  490. package/dist/derive-6O5SWQKN.js +0 -21
  491. package/dist/executor-5NIMLSKZ.js +0 -8
  492. package/dist/executor-AQVXV5GZ.js +0 -8
  493. package/dist/executor-PUAO6AKJ.js +0 -29
  494. package/dist/export-accessible-72EQNBMR.js +0 -22
  495. package/dist/extract-partition-PUYNU3UF.js +0 -37
  496. package/dist/find-2ABFCZX4.js +0 -10
  497. package/dist/issue-SIDORTSZ.js +0 -18
  498. package/dist/json-schema-V3M5MUCM.js.map +0 -1
  499. package/dist/kernel/query/join.d.ts +0 -232
  500. package/dist/liberate-LCDPNAG2.js +0 -24
  501. package/dist/link-set-FKNWAYKS.js +0 -30
  502. package/dist/noydb-DUXZPKSN.js +0 -90
  503. package/dist/register-I2DZXGAR.js +0 -31
  504. package/dist/registry-23WF3TGH.js +0 -8
  505. package/dist/registry-4AYVUNXK.js +0 -8
  506. package/dist/registry-VSSQPIGF.js +0 -18
  507. package/dist/registry-YLEWMGAC.js +0 -32
  508. package/dist/request-withdrawal-KFQHEZ25.js +0 -30
  509. package/dist/revoke-DQDZAZZM.js +0 -23
  510. package/dist/signer-WAMDZHEN.js +0 -24
  511. package/dist/storage-FLR73HHF.js +0 -22
  512. package/dist/walk-3UQBRMDV.js +0 -21
  513. package/dist/withdraw-accessible-EL5GXZBS.js +0 -27
  514. /package/dist/{api-TXFOVOXX.js.map → api-GVYEKSJE.js.map} +0 -0
  515. /package/dist/{chunk-BUE2D7PX.js.map → chunk-32YV3TJT.js.map} +0 -0
  516. /package/dist/{chunk-3RCJJBNR.js.map → chunk-3ELRMVJK.js.map} +0 -0
  517. /package/dist/{chunk-6GMZ7HEE.js.map → chunk-3F7GLNAE.js.map} +0 -0
  518. /package/dist/{chunk-2Y4IMKA6.js.map → chunk-3H5KLDZN.js.map} +0 -0
  519. /package/dist/{chunk-VTFVLCUH.js.map → chunk-3JWHAR6E.js.map} +0 -0
  520. /package/dist/{chunk-JBDFMYKQ.js.map → chunk-4AF3TUMP.js.map} +0 -0
  521. /package/dist/{chunk-J6FXAEUG.js.map → chunk-6B3VNR4P.js.map} +0 -0
  522. /package/dist/{chunk-TUFM4UZP.js.map → chunk-6K7DPM7D.js.map} +0 -0
  523. /package/dist/{chunk-K6LHRFBL.js.map → chunk-6LMQ5R26.js.map} +0 -0
  524. /package/dist/{chunk-XLMEZIAJ.js.map → chunk-6OWXYZK2.js.map} +0 -0
  525. /package/dist/{chunk-BOWNCWZT.js.map → chunk-6QSQQLSE.js.map} +0 -0
  526. /package/dist/{chunk-NQKIUNW5.js.map → chunk-A6IJU4TK.js.map} +0 -0
  527. /package/dist/{chunk-QIZPZMUI.js.map → chunk-AOWGXU6D.js.map} +0 -0
  528. /package/dist/{chunk-SFAWCTEM.js.map → chunk-B57AFBY2.js.map} +0 -0
  529. /package/dist/{chunk-GPEQUXHL.js.map → chunk-B6SJIBQK.js.map} +0 -0
  530. /package/dist/{chunk-Q2PU57HC.js.map → chunk-BK2HHQGN.js.map} +0 -0
  531. /package/dist/{collection-facade-4GRREZ6C.js.map → chunk-BKT776R5.js.map} +0 -0
  532. /package/dist/{chunk-FXBIP2WD.js.map → chunk-BUDAGWL5.js.map} +0 -0
  533. /package/dist/{chunk-BOET4NA4.js.map → chunk-CKNGS5MH.js.map} +0 -0
  534. /package/dist/{chunk-YSRUYAVU.js.map → chunk-DE4DH2RZ.js.map} +0 -0
  535. /package/dist/{chunk-6I2RQCET.js.map → chunk-DF73H4UN.js.map} +0 -0
  536. /package/dist/{chunk-K7NTTA6P.js.map → chunk-EOVMT6TB.js.map} +0 -0
  537. /package/dist/{chunk-XTXOCYOJ.js.map → chunk-FCKWQE2H.js.map} +0 -0
  538. /package/dist/{chunk-4OZNXTO4.js.map → chunk-FN5EBVTQ.js.map} +0 -0
  539. /package/dist/{chunk-NKHRDYOR.js.map → chunk-FQ5VRHIB.js.map} +0 -0
  540. /package/dist/{chunk-FAHMLERK.js.map → chunk-FW22ZCXT.js.map} +0 -0
  541. /package/dist/{chunk-RMS3NEA3.js.map → chunk-HT2AHGQI.js.map} +0 -0
  542. /package/dist/{chunk-CHJBLCOG.js.map → chunk-HVSCEIYL.js.map} +0 -0
  543. /package/dist/{chunk-GY4WYNNG.js.map → chunk-ID6Z6E66.js.map} +0 -0
  544. /package/dist/{chunk-EYBQEIUY.js.map → chunk-IEX7NK2K.js.map} +0 -0
  545. /package/dist/{chunk-KUJDV5QH.js.map → chunk-ISZQJBML.js.map} +0 -0
  546. /package/dist/{chunk-LWBCUYZW.js.map → chunk-IT22PWKV.js.map} +0 -0
  547. /package/dist/{chunk-7V4TP3AF.js.map → chunk-J6UOHJY5.js.map} +0 -0
  548. /package/dist/{chunk-JMGDHKQF.js.map → chunk-JCN44NCY.js.map} +0 -0
  549. /package/dist/{chunk-CARABLSQ.js.map → chunk-K6W7BVZ6.js.map} +0 -0
  550. /package/dist/{chunk-453F654R.js.map → chunk-L7DOS3TE.js.map} +0 -0
  551. /package/dist/{chunk-WEQEYLCS.js.map → chunk-LGRLME4M.js.map} +0 -0
  552. /package/dist/{chunk-RMF67KCG.js.map → chunk-LQ4ZHOKP.js.map} +0 -0
  553. /package/dist/{chunk-ZVO4QVPD.js.map → chunk-M522UYZ2.js.map} +0 -0
  554. /package/dist/{chunk-2N4GY74U.js.map → chunk-MTL7MXGR.js.map} +0 -0
  555. /package/dist/{chunk-TFR7DSOV.js.map → chunk-MVZ2TPVP.js.map} +0 -0
  556. /package/dist/{chunk-CPWQB3N5.js.map → chunk-N5DNADLQ.js.map} +0 -0
  557. /package/dist/{chunk-ELNXJMGB.js.map → chunk-NNARWO72.js.map} +0 -0
  558. /package/dist/{chunk-6YXCPL4T.js.map → chunk-PDCG6PR5.js.map} +0 -0
  559. /package/dist/{chunk-REDOOY2Q.js.map → chunk-PSIV7CJV.js.map} +0 -0
  560. /package/dist/{chunk-ANATMFIO.js.map → chunk-QWFHIOD2.js.map} +0 -0
  561. /package/dist/{chunk-X2DLENDQ.js.map → chunk-QWGU66MP.js.map} +0 -0
  562. /package/dist/{chunk-BSFNRLK2.js.map → chunk-S57HTZ6X.js.map} +0 -0
  563. /package/dist/{chunk-SZJ3DLZA.js.map → chunk-SEE332EV.js.map} +0 -0
  564. /package/dist/{chunk-YYP7WSEB.js.map → chunk-SI3V7D4G.js.map} +0 -0
  565. /package/dist/{chunk-UGTBXF5U.js.map → chunk-SOIQ4MM4.js.map} +0 -0
  566. /package/dist/{chunk-VXGSWL6L.js.map → chunk-SYVZW77S.js.map} +0 -0
  567. /package/dist/{chunk-MVMXZYXT.js.map → chunk-TKUOEU2F.js.map} +0 -0
  568. /package/dist/{chunk-SMH6SRX7.js.map → chunk-TROR3ALR.js.map} +0 -0
  569. /package/dist/{chunk-DGOZ4UZD.js.map → chunk-VNNRUGMM.js.map} +0 -0
  570. /package/dist/{chunk-HDOU6I2Y.js.map → chunk-VNPEWFPD.js.map} +0 -0
  571. /package/dist/{chunk-L7CIOOBW.js.map → chunk-WNJ4AVGE.js.map} +0 -0
  572. /package/dist/{chunk-FMZY5Q6L.js.map → chunk-WX5ADGTZ.js.map} +0 -0
  573. /package/dist/{chunk-Q7HZX3IF.js.map → chunk-X4773RBR.js.map} +0 -0
  574. /package/dist/{chunk-ANSIZYEG.js.map → chunk-YNIUIERI.js.map} +0 -0
  575. /package/dist/{chunk-BZ3534YM.js.map → chunk-ZUVBC32X.js.map} +0 -0
  576. /package/dist/{chunk-L742JPKZ.js.map → chunk-ZXABPVM6.js.map} +0 -0
  577. /package/dist/{classified-marker-LI2SF2E4.js.map → classified-marker-W3USLL5M.js.map} +0 -0
  578. /package/dist/{computed-VPOKQK4N.js.map → collection-facade-QU6IJBN3.js.map} +0 -0
  579. /package/dist/{derive-6O5SWQKN.js.map → computed-TPFBX7U4.js.map} +0 -0
  580. /package/dist/{dead-filter-TSWZQRR5.js.map → dead-filter-U2UYKSZL.js.map} +0 -0
  581. /package/dist/{delegation-OVIFFPG4.js.map → delegation-S3AEPW2T.js.map} +0 -0
  582. /package/dist/{enclave-KJOTOH7X.js.map → derive-OX7F6TGG.js.map} +0 -0
  583. /package/dist/{dispatch-WC6X2M6C.js.map → dispatch-3CQDJV5Q.js.map} +0 -0
  584. /package/dist/{dispatch-S73TK3IY.js.map → dispatch-RH4LHKBH.js.map} +0 -0
  585. /package/dist/{executor-5NIMLSKZ.js.map → enclave-27SMF6GF.js.map} +0 -0
  586. /package/dist/{executor-AQVXV5GZ.js.map → executor-B6SRO2QS.js.map} +0 -0
  587. /package/dist/{executor-PUAO6AKJ.js.map → executor-BI5CHWRY.js.map} +0 -0
  588. /package/dist/{export-accessible-72EQNBMR.js.map → executor-RBKM5W5K.js.map} +0 -0
  589. /package/dist/{extract-partition-PUYNU3UF.js.map → export-accessible-VMA3YM5V.js.map} +0 -0
  590. /package/dist/{find-2ABFCZX4.js.map → extract-partition-NF7PXGPP.js.map} +0 -0
  591. /package/dist/{fanout-sidecar-WUFXNYP4.js.map → fanout-sidecar-OT6RYLOL.js.map} +0 -0
  592. /package/dist/{issue-SIDORTSZ.js.map → find-LZMP26KF.js.map} +0 -0
  593. /package/dist/{ledger-F33ZVMTK.js.map → issue-IHARXWW5.js.map} +0 -0
  594. /package/dist/{liberate-LCDPNAG2.js.map → ledger-KZPCMVZY.js.map} +0 -0
  595. /package/dist/{link-set-FKNWAYKS.js.map → liberate-GRLCZMW4.js.map} +0 -0
  596. /package/dist/{managed-secret-PQYKSR6T.js.map → link-set-JCMJ7ULP.js.map} +0 -0
  597. /package/dist/{noydb-DUXZPKSN.js.map → managed-secret-S3MQ6SH6.js.map} +0 -0
  598. /package/dist/{migrate-cek-5ENH64AA.js.map → migrate-cek-V7GKJZ7O.js.map} +0 -0
  599. /package/dist/{register-I2DZXGAR.js.map → noydb-SWQJ3MZS.js.map} +0 -0
  600. /package/dist/{pod-handle-Q736KYON.js.map → pod-handle-WGDFB4C2.js.map} +0 -0
  601. /package/dist/{post-register-LNE2FE2A.js.map → post-register-SLSXIPBV.js.map} +0 -0
  602. /package/dist/{registry-23WF3TGH.js.map → query/all/index.js.map} +0 -0
  603. /package/dist/{registry-4AYVUNXK.js.map → register-F3OYE7MJ.js.map} +0 -0
  604. /package/dist/{registry-VSSQPIGF.js.map → registry-CILQFXFK.js.map} +0 -0
  605. /package/dist/{registry-YLEWMGAC.js.map → registry-XNNYQVKV.js.map} +0 -0
  606. /package/dist/{request-withdrawal-KFQHEZ25.js.map → registry-YCDZV3VW.js.map} +0 -0
  607. /package/dist/{revoke-DQDZAZZM.js.map → registry-ZGYS33TE.js.map} +0 -0
  608. /package/dist/{signer-WAMDZHEN.js.map → request-withdrawal-Z5NC6TXT.js.map} +0 -0
  609. /package/dist/{reveal-67RDQRIN.js.map → reveal-4BCKPEC2.js.map} +0 -0
  610. /package/dist/{stale-DDL7WQEZ.js.map → revoke-ZL62WC2D.js.map} +0 -0
  611. /package/dist/{seed-G42JYN56.js.map → seed-4JS2RJ4A.js.map} +0 -0
  612. /package/dist/{storage-FLR73HHF.js.map → signer-MBZZMXTC.js.map} +0 -0
  613. /package/dist/{walk-3UQBRMDV.js.map → stale-TJ3DYZMQ.js.map} +0 -0
  614. /package/dist/{withdraw-accessible-EL5GXZBS.js.map → storage-SVMKRGCW.js.map} +0 -0
  615. /package/dist/{store-coordination-provider-MEQ2MJQG.js.map → store-coordination-provider-2O2VUHKW.js.map} +0 -0
  616. /package/dist/{verify-KOV2G5D6.js.map → verify-RVT67IMH.js.map} +0 -0
@@ -0,0 +1,426 @@
1
+ /**
2
+ * #1458 — **Relate**: every multi-source and plan-level operation.
3
+ *
4
+ * `join` · `joinOn` · `rightJoin` · `fullOuterJoin` · `crossJoin` ·
5
+ * `crossJoinWith` · `traverse` · `ancestorsOf` · `descendantsOf` · `explain`
6
+ *
7
+ * The bodies below moved out of `kernel/query/builder.ts` UNCHANGED. They read
8
+ * `this.source` / `this.plan` / `this.joinContext` exactly as they did while
9
+ * they were class members, because at runtime that is precisely what they
10
+ * still are: `install()` copies them onto `Query.prototype`, and TypeScript's
11
+ * `private` never existed at runtime. The `declare` fields at the top of the
12
+ * mixin are how the compiler is told the same thing.
13
+ *
14
+ * ⚠️ **Do not import this module for its side effects — import
15
+ * `./index.js`.** This file defines the methods; the barrel installs them, and
16
+ * the barrel is what `package.json`'s `sideEffects` list names.
17
+ */
18
+ import type { QueryField } from '../../types.js';
19
+ import { Query } from '../builder.js';
20
+ import type { DeclaredPredicate, InternalSource, QueryPlan } from '../builder.js';
21
+ import type { CrossJoinClause } from '../predicate.js';
22
+ import type { ReduceStrategy } from '../../../with-lookup/reduce/strategy.js';
23
+ import type { JoinableSource, JoinContext, JoinStrategy } from './join.js';
24
+ import { type JoinOnSpec } from './join-on.js';
25
+ import type { QueryExplanation } from './explain.js';
26
+ import type { CyclePolicy, TraversalRow, TraverseOptions } from './traverse.js';
27
+ /**
28
+ * The Relate half of `Query`, as a mixin whose prototype is copied onto the
29
+ * real class. Never instantiated.
30
+ */
31
+ export declare class RelateMethods<T, S extends keyof T = never, Q extends keyof T & string = never, M extends keyof T & string = never> {
32
+ protected readonly source: InternalSource;
33
+ protected readonly plan: QueryPlan;
34
+ protected readonly joinContext: JoinContext | undefined;
35
+ protected readonly reduceStrategy: ReduceStrategy;
36
+ protected readonly predicates: ReadonlyMap<string, DeclaredPredicate> | undefined;
37
+ protected decodeVia: (records: readonly unknown[], locale?: string) => unknown[];
38
+ protected requireJoinContext: (terminal: string) => JoinContext;
39
+ ids: () => string[];
40
+ /**
41
+ * INNER join (#1361): `{ mode: 'inner' }` drops every left row whose alias
42
+ * resolves to nothing, and types the alias NON-nullable.
43
+ *
44
+ * ```ts
45
+ * invoices.query()
46
+ * .join<'client', Client>('clientId', { as: 'client', mode: 'inner' })
47
+ * .orderBy('total', 'desc')
48
+ * .limit(10)
49
+ * // → the ten largest invoices THAT HAVE a client; `row.client.name` needs
50
+ * // no null check.
51
+ * ```
52
+ *
53
+ * The long-hand `.join(f, { as }).where(as, '!=', null)` returns the same
54
+ * rows and keeps working unchanged — what it cannot do is keep the sort on
55
+ * the pre-join side. That predicate addresses the alias, so #1030 moves the
56
+ * WHOLE sort and page behind the legs; `mode: 'inner'` moves only the page,
57
+ * because the drop cannot reorder a left-side sort key. `.explain()` says
58
+ * which: `pre-join` on the `orderBy` node, `post-join` on the `page` node.
59
+ *
60
+ * The drop runs after `attachJoin`, so ref-mode semantics are unchanged — a
61
+ * `strict` dangling ref still throws rather than vanishing because the
62
+ * caller asked for an inner join.
63
+ */
64
+ join<As extends string, R = unknown>(field: QueryField<T, S>, opts: {
65
+ as: As;
66
+ mode: 'inner';
67
+ strategy?: JoinStrategy;
68
+ maxRows?: number;
69
+ }): Query<T & Record<As, R>, S, Q, M>;
70
+ join<As extends string, R = unknown>(field: QueryField<T, S>, opts: {
71
+ as: As;
72
+ mode?: undefined;
73
+ strategy?: JoinStrategy;
74
+ maxRows?: number;
75
+ }): Query<T & Record<As, R | null>, S, Q, M>;
76
+ /**
77
+ * DECLARED non-equi / non-id join (#1339) — a join whose `on` is data, not
78
+ * a callback.
79
+ *
80
+ * ```ts
81
+ * // composite equality — a hash join over a tuple key
82
+ * entries.query().joinOn<'rate', Rate>('rates', {
83
+ * as: 'rate',
84
+ * on: [['clientId', 'clientId'], ['year', 'year']],
85
+ * })
86
+ *
87
+ * // a range — nested loop over a right side sorted once
88
+ * entries.query().joinOn<'rate', Rate>('rates', {
89
+ * as: 'rate',
90
+ * on: { left: 'date', op: 'between', right: ['from', 'to'] },
91
+ * })
92
+ * ```
93
+ *
94
+ * ⭐ **Why this exists when `.crossJoin({ on })` already pairs anything.**
95
+ * `crossJoin`'s `on` is a closure. It cannot be serialized, so a
96
+ * materialized view built over one has its drift detection disabled — the
97
+ * plan summary records the sentinel `'[inline]'` and two different
98
+ * predicates hash identically. A `joinOn` predicate is plain JSON: it folds
99
+ * into `toPlan()` and into the MV `queryHash`, so an MV can genuinely
100
+ * DEPEND on it. That, not the pairing, is the feature.
101
+ *
102
+ * **No `ref()` needed** — the predicate names both sides itself, so `target`
103
+ * is the collection name rather than a declared FK field. Dangling is not a
104
+ * concept here: a left row matching nothing gets `null` under the alias (a
105
+ * LEFT outer join, like `.join()`), and `{ mode: 'inner' }` drops it.
106
+ *
107
+ * **⚠️ This join EXPANDS rows.** A ref join is one-to-one, so the left row
108
+ * count is constant; a declared `on` emits one row per MATCH, so a left row
109
+ * matching three right records becomes three rows. The per-side `maxRows`
110
+ * ceilings therefore cannot bound the result, and a third ceiling on the
111
+ * OUTPUT throws `JoinTooLargeError` with `side: 'output'`. Do not remove
112
+ * it: without it an unbounded theta join is a hang, not an error.
113
+ *
114
+ * **Cost.** Composite equality is O(n + m + output). A range is
115
+ * O(m log m) to sort the right side once, then O(log m) per left row for
116
+ * `< <= > >=`; `between` is O(log m + p) per left row, where p is the
117
+ * number of right intervals starting at or before the probe — which
118
+ * degrades to O(n·m) when every interval starts early. `explain()` names
119
+ * which of the two ran. Neither reaches the right collection's declared
120
+ * indexes: a `JoinableSource` does not expose them.
121
+ */
122
+ joinOn<As extends string, R = unknown>(target: string, opts: {
123
+ as: As;
124
+ on: JoinOnSpec;
125
+ mode: 'inner';
126
+ maxRows?: number;
127
+ }): Query<T & Record<As, R>, S, Q, M>;
128
+ joinOn<As extends string, R = unknown>(target: string, opts: {
129
+ as: As;
130
+ on: JoinOnSpec;
131
+ mode?: undefined;
132
+ maxRows?: number;
133
+ }): Query<T & Record<As, R | null>, S, Q, M>;
134
+ /**
135
+ * RIGHT outer join (#1289): every record of the TARGET collection appears,
136
+ * including one no left row points at. The mirror of `.join()`, which is
137
+ * and always was the left outer join.
138
+ *
139
+ * ```ts
140
+ * invoices.query().rightJoin<'client', Client>('clientId', { as: 'client' })
141
+ * // → one row per invoice/client match, PLUS { client } for every client
142
+ * // no invoice references. An invoice whose clientId matches nothing is
143
+ * // dropped — that is what makes it a right join.
144
+ * ```
145
+ *
146
+ * **The row shape is not `T`.** A right-only row carries the alias and
147
+ * nothing else, so the left fields are typed `Partial<T>` — SQL's "the left
148
+ * columns are NULL" in an object language. Read them defensively; a row
149
+ * where `amount` is `undefined` is a real, correct result, not a bug.
150
+ *
151
+ * **Cost.** A forward leg follows the left row's FK and is O(1) per row. A
152
+ * right leg cannot: the rows it must produce are exactly the ones no FK
153
+ * names. It builds a reverse index — the left rows bucketed by FK value —
154
+ * and walks the right snapshot against it. That is one extra pass over the
155
+ * left set and one `Map` the size of the distinct FK values; both sides are
156
+ * fully materialized either way, and both row ceilings still apply.
157
+ *
158
+ * **Ordering.** Like `.join()`, legs run AFTER `orderBy`/`limit`/`offset`
159
+ * unless the ordering addresses the alias (#1337),
160
+ * so those narrow the LEFT side. Rows are emitted in right-snapshot order.
161
+ *
162
+ * A left row whose non-null FK resolves to nothing is dropped, but the
163
+ * ref-mode check still runs on it: `strict` still throws
164
+ * `DanglingReferenceError`. Corruption should not become invisible because
165
+ * the caller changed join direction.
166
+ */
167
+ rightJoin<As extends string, R = unknown>(field: QueryField<T, S>, opts: {
168
+ as: As;
169
+ strategy?: JoinStrategy;
170
+ maxRows?: number;
171
+ }): Query<Partial<T> & Record<As, R>, S, Q, M>;
172
+ /**
173
+ * FULL outer join (#1289): the union of `.join()` and `.rightJoin()` —
174
+ * every left row, every right record, matched where they meet.
175
+ *
176
+ * ```ts
177
+ * invoices.query().fullOuterJoin<'client', Client>('clientId', { as: 'client' })
178
+ * // → matched rows, plus { client: null, ...invoice } for an unreferenced
179
+ * // invoice, plus { client } for a client no invoice points at.
180
+ * ```
181
+ *
182
+ * The alias is `R | null` and the left fields are `Partial<T>`, because a
183
+ * row can be missing either side — never both. Same reverse index, same
184
+ * ordering and same ref-mode semantics as {@link rightJoin}; the only
185
+ * difference is that the unmatched LEFT rows are emitted (after the
186
+ * right-driven ones) instead of dropped.
187
+ */
188
+ fullOuterJoin<As extends string, R = unknown>(field: QueryField<T, S>, opts: {
189
+ as: As;
190
+ strategy?: JoinStrategy;
191
+ maxRows?: number;
192
+ }): Query<Partial<T> & Record<As, R | null>, S, Q, M>;
193
+ /**
194
+ * The one place a `JoinLeg` is built. `.join()`, `.rightJoin()` and
195
+ * `.fullOuterJoin()` differ ONLY in `direction` and in the type they
196
+ * publish — keeping the plan-time validation (ref declared? dict join?
197
+ * join context?) in a single body is what stops the three from drifting on
198
+ * which errors they raise.
199
+ */
200
+ private withJoinLeg;
201
+ /**
202
+ * Cartesian-product cross-join against `target` collection. Each result row
203
+ * carries the original `T` fields plus `result[as]` populated from every
204
+ * right-side row (or the filtered subset when `on:` is supplied).
205
+ *
206
+ * **⚠️ INNER-join semantics — an empty right subset DROPS the left row.**
207
+ * Each left row is emitted once per matching right row, so when `on:`
208
+ * yields nothing the row vanishes with no error, no warning and no count
209
+ * mismatch. This bites hardest on a reverse FK, where `.join()` (which is
210
+ * forward-only, and already a genuine LEFT outer join) does not apply and
211
+ * `.crossJoin()` is the only tool. To keep the row, return a one-element
212
+ * array holding `null`:
213
+ *
214
+ * ```ts
215
+ * .crossJoin('clients', { as: 'client', on: (b) => byEntity.get(b.entityId) ?? [null] })
216
+ * // ^^^^^^^^
217
+ * // the ONLY thing preserving the row
218
+ * ```
219
+ *
220
+ * **Prefer `outer: true`**, which does exactly this and types the alias as
221
+ * `TTarget | null`:
222
+ *
223
+ * ```ts
224
+ * .crossJoin('clients', { as: 'client', outer: true, on: (b) => byEntity.get(b.entityId) ?? [] })
225
+ * ```
226
+ *
227
+ * The `?? [null]` form remains valid and is what `outer` does internally, but
228
+ * it is invisible intent: it types the alias as non-null while the row can
229
+ * hold null, and a later "simplification" that drops it silently
230
+ * reintroduces the row loss.
231
+ *
232
+ * **Order matters:** `.where().crossJoin()` filters BEFORE expanding (cheaper);
233
+ * `.crossJoin().where('alias.field', ...)` filters AFTER (required when the
234
+ * where clause references the aliased fields).
235
+ *
236
+ * **Cost ceiling:** `CrossJoinTooLargeError` fires before allocation when
237
+ * `leftRows × rightRows` (or the cumulative lateral count) exceeds the limit.
238
+ * Default: 50,000 rows. Override per-clause with `{ maxRows: N }`.
239
+ *
240
+ * **`on:` shapes:**
241
+ * - `on: (left) => TTarget[]` — subset form (most efficient)
242
+ * - `on: (left) => (right) => boolean` — predicate form
243
+ * - `on: { predicate: 'name' }` — MV-safe, hash-tracked form
244
+ * (requires the Query to have been augmented via `_withPredicates`)
245
+ *
246
+ * Requires a JoinContext (constructed via `collection.query()`).
247
+ */
248
+ crossJoin<TTarget = unknown, As extends string = string, TOuter extends boolean = false>(target: string, opts: {
249
+ as: As;
250
+ on?: ((left: T) => unknown[] | ((right: TTarget) => boolean)) | {
251
+ readonly predicate: string;
252
+ };
253
+ maxRows?: number;
254
+ /**
255
+ * Keep the left row when its right side is empty, with `null` under
256
+ * `as`, instead of dropping it (#1130). Widens the alias to
257
+ * `TTarget | null` — which is why it is a type parameter rather than a
258
+ * plain boolean: `outer: false` must not pay for a null the row can
259
+ * never hold.
260
+ */
261
+ outer?: TOuter;
262
+ }): Query<T & {
263
+ [K in As]: TOuter extends true ? TTarget | null : TTarget;
264
+ }, S, Q, M>;
265
+ /**
266
+ * Self cross-join with BOTH sides aliased (#1289).
267
+ *
268
+ * ```ts
269
+ * const pairs = trades.query()
270
+ * .crossJoinWith({ leftAs: 'a', rightAs: 'b', on: (t) => laterThan(t) })
271
+ * .toArray()
272
+ * // → [{ a: Trade, b: Trade }, ...] — no field at the top level
273
+ * ```
274
+ *
275
+ * `.crossJoin('trades', { as: 'other' })` can already pair a collection
276
+ * with itself, but only ASYMMETRICALLY: the left row's fields stay at the
277
+ * top level and only the right side gets a name. Every comparison then
278
+ * reads `r.amount` against `r.other.amount`, which is exactly the shape
279
+ * that makes an accidentally-transposed pair invisible.
280
+ *
281
+ * ⚠️ **The cost is not the join, it is the Via dressing.** Aliasing the
282
+ * left row moves every field off the top level, and the money / i18n /
283
+ * lookup pipeline keys by BARE FIELD NAME — so the plain top-level decode
284
+ * `toArray()` applies cannot see either side. Both aliases are therefore
285
+ * dressed explicitly, through the source's own Via result decode, before
286
+ * the rows are returned. Silently serving raw money under an alias is the
287
+ * failure this method exists to not have; `dressAliases` is where it is
288
+ * prevented and `__tests__/query-outer-join.test.ts` is what proves it.
289
+ *
290
+ * `on:` takes the same subset / predicate shapes as `.crossJoin()`, and the
291
+ * same `maxRows` ceiling applies to the product. The target is always this
292
+ * query's own collection — a cross-join against a DIFFERENT collection is
293
+ * `.crossJoin()`, which needs no left alias to stay unambiguous.
294
+ *
295
+ * The returned `Query` drops this query's schema / queryable / money field
296
+ * parameters. That is not laziness: those parameters name TOP-LEVEL fields,
297
+ * and after `crossJoinWith` there are no top-level fields — only the two
298
+ * aliases. Carrying them would let `where('amount', ...)` type-check on a
299
+ * row where `amount` does not exist.
300
+ */
301
+ crossJoinWith<LeftAs extends string, RightAs extends string>(opts: {
302
+ leftAs: LeftAs;
303
+ rightAs: RightAs;
304
+ on?: ((left: T) => unknown[] | ((right: T) => boolean)) | {
305
+ readonly predicate: string;
306
+ };
307
+ maxRows?: number;
308
+ }): Query<{
309
+ [K in LeftAs]: T;
310
+ } & {
311
+ [K in RightAs]: T;
312
+ }>;
313
+ /**
314
+ * Describe how this plan WOULD run (#1348): the dispatch per clause
315
+ * (`index:hash` vs `scan`, and why), row estimates taken from real index
316
+ * cardinalities, join strategy and side sizes against the row ceiling,
317
+ * whether ordering/pagination lands pre- or post-join, and which
318
+ * cardinality caps are close to tripping. `.text` renders one line per
319
+ * node.
320
+ *
321
+ * ⛔ Purely observational — it probes index buckets and reads snapshot
322
+ * sizes, never executes the plan. A terminal returns the same thing
323
+ * whether or not `explain()` was called. See `query/explain.ts`.
324
+ */
325
+ explain(): QueryExplanation;
326
+ /**
327
+ * Recursive traversal over ONE declared, self-referencing `ref()` field
328
+ * (#1352) — the org-chart / bill-of-materials / parent-client shape that
329
+ * otherwise forces the consumer to hand-roll recursion.
330
+ *
331
+ * ```ts
332
+ * people.query().where('name', '==', 'Dana')
333
+ * .traverse('parentId', { direction: 'up', maxDepth: 10 })
334
+ * // → [{ id: 'dana', record, depth: 0, path: ['dana'] },
335
+ * // { id: 'bea', record, depth: 1, path: ['dana', 'bea'] }, …]
336
+ * ```
337
+ *
338
+ * **A TERMINAL.** It returns rows, not a `Query`, so it composes with
339
+ * `where()` / `orderBy()` / `limit()` on the way IN, not on the way out.
340
+ *
341
+ * **Seeds are this query's matched records** — the clauses choose the roots
342
+ * of the walk, not which nodes the walk may pass through. A traversal from
343
+ * one seed is `ancestorsOf` / `descendantsOf` below.
344
+ *
345
+ * **`maxDepth` is required**, with no default: an unbounded walk over a
346
+ * large collection is a denial of service against your own UI, and a
347
+ * silent default would truncate a result without saying so.
348
+ *
349
+ * **Cycles terminate.** A parent chain can be circular through user error,
350
+ * and an unguarded BFS hangs the tab. The default `{ onCycle: 'stop' }`
351
+ * prunes a node the walk is already standing on; `'throw'` raises
352
+ * `TraversalCycleError` for hierarchies that are supposed to be acyclic.
353
+ *
354
+ * **A node is emitted once**, at its shallowest depth — so a diamond (two
355
+ * seeds converging on one ancestor) yields ONE row for that ancestor,
356
+ * carrying the path of whichever branch reached it first.
357
+ *
358
+ * **Declared refs only.** This is not a general graph engine: the field
359
+ * must carry a `ref()` whose target is this same collection.
360
+ *
361
+ * **Cost.** Every hop reads the vault's already-decrypted in-memory cache
362
+ * (`query()` is eager-mode only), so a depth-5 traversal costs
363
+ * `depth × frontier` Map lookups and ZERO additional decrypts — the
364
+ * AES-GCM work was paid once at `openVault()`. `direction: 'down'` adds one
365
+ * O(n) pass to build the reverse-FK index; `'up'` adds nothing.
366
+ *
367
+ * ⛔ **Not an `explain()` node.** `explain()` describes the plan, and a
368
+ * traversal is a terminal over the plan's result rather than a clause in
369
+ * it — the same reason `.window()` and #1336's post-group ops are absent.
370
+ * `explain()` on the seed query still describes how the SEEDS are found.
371
+ */
372
+ traverse(field: QueryField<T, S>, opts: TraverseOptions): TraversalRow<T>[];
373
+ /**
374
+ * `.traverse()` sugar: every ancestor of one record, that record included
375
+ * at `depth: 0`. See {@link traverse} for the full contract.
376
+ *
377
+ * Refused on a query that already carries clauses — the seed is named
378
+ * explicitly here, so a `where()` would silently do nothing. Use
379
+ * `.traverse()` when the seeds come from a query.
380
+ */
381
+ ancestorsOf(id: string, field: QueryField<T, S>, opts: {
382
+ maxDepth: number;
383
+ onCycle?: CyclePolicy;
384
+ }): TraversalRow<T>[];
385
+ /**
386
+ * `.traverse()` sugar: every descendant of one record, that record included
387
+ * at `depth: 0`. See {@link traverse} for the full contract.
388
+ */
389
+ descendantsOf(id: string, field: QueryField<T, S>, opts: {
390
+ maxDepth: number;
391
+ onCycle?: CyclePolicy;
392
+ }): TraversalRow<T>[];
393
+ private traverseFromId;
394
+ /**
395
+ * The one place a traversal runs. Both entry points share it so they cannot
396
+ * drift on Via decoding or on which source view the walk reads.
397
+ */
398
+ private runTraverse;
399
+ /**
400
+ * Plan-time validation shared by `.traverse()` and its sugar: the field must
401
+ * carry a `ref()`, and that ref must point back at this same collection.
402
+ *
403
+ * The second half is what keeps this from becoming a general graph engine.
404
+ * A ref to ANOTHER collection has no second hop — the target's records do
405
+ * not carry this field — so a two-collection "traversal" is a `.join()`
406
+ * wearing the wrong name, and would walk exactly one level before stopping
407
+ * for reasons the caller could not see.
408
+ */
409
+ private assertSelfRef;
410
+ }
411
+ /**
412
+ * The public Relate surface, named once. The `declare module` block in
413
+ * `./index.ts` merges exactly this into `Query`, so the signatures live in one
414
+ * place and cannot drift from the implementations above.
415
+ *
416
+ * `Pick` rather than the class itself: an interface that extended
417
+ * `RelateMethods` would inherit the `protected` state declarations too, and
418
+ * they collide with `Query`'s own `private` fields.
419
+ */
420
+ export type RelateSurface<T, S extends keyof T = never, Q extends keyof T & string = never, M extends keyof T & string = never> = Pick<RelateMethods<T, S, Q, M>, 'join' | 'joinOn' | 'rightJoin' | 'fullOuterJoin' | 'crossJoin' | 'crossJoinWith' | 'traverse' | 'ancestorsOf' | 'descendantsOf' | 'explain'>;
421
+ /**
422
+ * Expand `leftRel` by cross-joining with `rightSource`. Enforces the cost ceiling
423
+ * BEFORE allocating the expanded relation (full cartesian) or cumulatively
424
+ * (lateral form). Throws `CrossJoinTooLargeError` on breach.
425
+ */
426
+ export declare function applyCrossJoin(leftRel: unknown[], clause: CrossJoinClause, rightSource: JoinableSource): unknown[];
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Partition pruning — the ONE decision function (#1342, ADR 0007).
3
+ *
4
+ * ADR 0007 rules that a partition is a COLLECTION, not a field lifted out of
5
+ * the ciphertext: `listPage(vault, **collection**, cursor, limit)` already
6
+ * takes the collection name in cleartext, so a partition modelled as its own
7
+ * collection buys the pruning for free — no `@noy-db/hub/to` change, no
8
+ * adapter change, no new leak class. What is left for the kernel is deciding
9
+ * WHICH member collections a query has to read at all, and that is this file.
10
+ *
11
+ * ⭐ **SHARED, NOT MIRRORED.** `explain()` and the executor both call
12
+ * {@link resolvePartitionScope}. `explain.ts`'s header warns that dispatch
13
+ * selection is mirrored between it and `candidateRecords`, and #1375 spent a
14
+ * whole issue deleting one of those mirrors by exporting the classifier from
15
+ * `builder.ts`. Partition dispatch would have been a THIRD site. It is not:
16
+ * there is one function, and both callers import it.
17
+ *
18
+ * ⛔ **SOUND IN ONE DIRECTION ONLY, AND THE ASYMMETRY IS THE DESIGN.** A
19
+ * partition wrongly INCLUDED costs a scan nobody needed. A partition wrongly
20
+ * EXCLUDED is silently missing data — no error, no warning, a short answer
21
+ * that looks complete. So narrowing happens off a WHITELIST of provable
22
+ * shapes, never off a blacklist of known-bad ones:
23
+ *
24
+ * - `key == "<string>"` → that one partition
25
+ * - `key in ["<string>", …]` → that set
26
+ * - two of those AND-ed → their intersection
27
+ *
28
+ * and EVERYTHING else degrades to {@link ALL_PARTITIONS} by falling off the
29
+ * end of the whitelist: `or`/`and` groups (a nested clause is not AND-ed with
30
+ * the top level), `!=`, `!in`, `<`/`<=`/`>`/`>=`/`between`, `contains`,
31
+ * `startsWith`, `matches`, `near`, `filter()` callbacks, `wherePredicate()`,
32
+ * `crossJoin`, a clause on any other field, a non-string operand — and, the
33
+ * one that is easy to miss, **any Via-covered clause** (`clause.via`), whose
34
+ * operand is in STORED form rather than in partition-key space. That is the
35
+ * same reason `candidateRecords()` refuses the index for a Via clause, and
36
+ * getting it wrong here is worse than getting it wrong there: an index miss
37
+ * returns the right rows slowly, a partition miss returns the wrong rows fast.
38
+ *
39
+ * An operator added next year that this function has never heard of degrades
40
+ * to "read everything" without anyone editing this file. That is the whole
41
+ * point of the whitelist, and it is why the tests in
42
+ * `__tests__/partitioned-collection.test.ts` cover the FALLBACKS at least as
43
+ * heavily as the fast path.
44
+ *
45
+ * ⚠️ One narrowing this file does NOT do, deliberately: a RANGE on an ordered
46
+ * partition key (`period >= 'FY2026-Q2'`) intersected against declared
47
+ * partition boundaries. It is sound only once partitions carry declared
48
+ * boundaries AND the open/closed distinction is honoured — an OPEN period's
49
+ * upper bound can still move, so any range whose upper end is unbounded or in
50
+ * the future must keep the open partition. Cheap rule, and the first one a
51
+ * range narrowing gets wrong; it waits for a declaration that carries
52
+ * boundaries.
53
+ */
54
+ import type { Clause } from '../predicate.js';
55
+ /**
56
+ * "Read every declared partition." The sound fallback, and the value every
57
+ * shape this file cannot PROVE safe resolves to.
58
+ */
59
+ export declare const ALL_PARTITIONS: "all";
60
+ /**
61
+ * The partitions a query must read: {@link ALL_PARTITIONS}, or the exact
62
+ * subset — which may be EMPTY, when the predicate names a partition value
63
+ * that has never been declared. An empty scope is a real answer, not a
64
+ * degenerate one: the partition key is the collection a record lives in, so
65
+ * "no such partition" means "no such record".
66
+ */
67
+ export type PartitionScope = typeof ALL_PARTITIONS | readonly string[];
68
+ /**
69
+ * Narrow `declared` to the partitions `clauses` can PROVE are needed.
70
+ *
71
+ * `clauses` must be the plan's TOP-LEVEL clause list — those are AND-ed, and
72
+ * an intersection across them is therefore sound. Anything nested inside a
73
+ * `group` is not AND-ed with the top level and is ignored by construction
74
+ * (a `group` never matches the whitelist).
75
+ *
76
+ * The result preserves `declared`'s order, so a caller reading partitions in
77
+ * sequence gets a stable, declaration-ordered walk whether or not it pruned.
78
+ */
79
+ export declare function resolvePartitionScope(clauses: readonly Clause[], key: string, declared: readonly string[]): PartitionScope;
80
+ /**
81
+ * The `explain()` line, in the existing vocabulary: `partitions: 3 of 12
82
+ * scanned`. Shared so the executor's accounting and the explanation cannot
83
+ * drift into disagreeing about what "scanned" counts.
84
+ */
85
+ export declare function describePartitionScope(scope: PartitionScope, declared: readonly string[]): string;
86
+ /** The member partitions a scope resolves to, in declaration order. */
87
+ export declare function partitionsInScope(scope: PartitionScope, declared: readonly string[]): readonly string[];
@@ -0,0 +1,163 @@
1
+ /**
2
+ * #1458 — the **Relate** half of `ScanBuilder`.
3
+ *
4
+ * `join` · plus the two streaming-join privates the iterator calls.
5
+ *
6
+ * ⭐ **`ScanBuilder` gets the same treatment as `Query` because it has the same
7
+ * problem** (ruled 2026-09-06): it is one class carrying Find (`where`,
8
+ * `filter`, the async iterator), Reduce (`aggregate`, `groupBy`) and Relate
9
+ * (`join`) methods, and `sideEffects: false` cannot drop a method. Left
10
+ * unsplit it would have kept `relate/join.ts` and the whole reducer engine in
11
+ * every `/query` bundle no matter what `Query` did — the architecture rule
12
+ * would have been true of `builder.ts` and false of the package.
13
+ *
14
+ * ⚠️ `buildJoinResolvers` and `applyOneJoinStreaming` are called from the
15
+ * ITERATOR, which stays in Find. Both calls sit behind `joins.length === 0`,
16
+ * so a Find-only scan never reaches them — the same guarantee, and the same
17
+ * shape of guarantee, as `internal/hooks.ts` gives the eager executor.
18
+ */
19
+ import { ScanBuilder } from '../scan-builder.js';
20
+ import type { ScanPageProvider } from '../scan-builder.js';
21
+ import type { QueryField } from '../../types.js';
22
+ import type { Clause } from '../predicate.js';
23
+ import type { ViaPipeline } from '../../via/pipeline.js';
24
+ import type { JoinContext, JoinLeg, JoinableSource } from './join.js';
25
+ /** One resolved leg, prepared once per iteration. @internal */
26
+ export interface ScanJoinResolver {
27
+ leg: JoinLeg;
28
+ source: JoinableSource;
29
+ lookupById: ((id: string) => unknown) | null;
30
+ hashByPrimaryKey: ReadonlyMap<string, unknown> | null;
31
+ warnedKeys: Set<string>;
32
+ }
33
+ /** @internal — the mixin whose prototype `./index.ts` copies onto `ScanBuilder`. */
34
+ export declare class ScanRelateMethods<T, S extends keyof T = never, M extends keyof T & string = never> {
35
+ protected readonly pageProvider: ScanPageProvider<T>;
36
+ protected readonly pageSize: number;
37
+ protected readonly clauses: readonly Clause[];
38
+ protected readonly joins: readonly JoinLeg[];
39
+ protected readonly joinContext: JoinContext | undefined;
40
+ protected readonly via: ViaPipeline | undefined;
41
+ /**
42
+ * Resolve a `ref()`-declared foreign key per record as the scan
43
+ * stream flows, attaching the right-side record (or null) under
44
+ * `opts.as`. — streaming joins over `scan()`.
45
+ *
46
+ * ```ts
47
+ * for await (const inv of invoices.scan().join('clientId', { as: 'client' })) {
48
+ * await processInvoice(inv) // inv.client is attached
49
+ * }
50
+ *
51
+ * // Or terminate with .aggregate() for streaming joined aggregation
52
+ * const { total } = await invoices.scan()
53
+ * .where('status', '==', 'open')
54
+ * .join('clientId', { as: 'client' })
55
+ * .aggregate({ total: sum('amount') })
56
+ * ```
57
+ *
58
+ * **The key difference from eager `.join()`:** the LEFT
59
+ * side streams page-by-page from the adapter and is never
60
+ * materialized. Memory ceiling on the left is O(pageSize), not
61
+ * O(rowCount). This is what makes streaming joins suitable for
62
+ * collections that exceed the eager join's 50_000-row ceiling.
63
+ *
64
+ * **Right-side strategy** is auto-selected per leg:
65
+ * - **Indexed** — right source exposes `lookupById`, so each
66
+ * left row costs O(1). This is the common path for
67
+ * Collection right sides, which back `lookupById` with a Map
68
+ * lookup over the in-memory cache. The right collection must
69
+ * be in eager mode (the same constraint as eager join's
70
+ * `querySourceForJoin` from ).
71
+ * - **Hash** — right source has only `snapshot()`. Build a
72
+ * `Map<id, record>` once at iteration start, probe per left
73
+ * row. Same correctness, same per-row cost as the indexed
74
+ * path; the difference is the upfront cost of materializing
75
+ * the right side once.
76
+ *
77
+ * Both strategies hold the right side in memory for the duration
78
+ * of the iteration. The "streaming" property applies to the LEFT
79
+ * side only — true left-and-right streaming joins (where neither
80
+ * side fits in memory) require a sort-merge join planner that's
81
+ * out of scope for.
82
+ *
83
+ * **Ref-mode semantics** match eager `.join()` exactly:
84
+ * - `strict` → throws `DanglingReferenceError` mid-stream
85
+ * when a left record points at a non-existent right id.
86
+ * The throw aborts the async iterator — consumers should
87
+ * wrap the `for await` in try/catch if they want to recover.
88
+ * - `warn` → attaches `null` and emits a one-shot warning
89
+ * per unique dangling pair (deduped via the same warn
90
+ * channel as eager join).
91
+ * - `cascade` → attaches `null` silently. A delete-time mode;
92
+ * dangling refs at read time are mid-flight or pre-existing
93
+ * orphans, not a DSL error.
94
+ *
95
+ * Left records with null/undefined FK values attach `null`
96
+ * regardless of mode — same "no reference at all" policy as
97
+ * eager join and write-time `enforceRefsOnPut`.
98
+ *
99
+ * **Multi-FK chaining** is supported via repeated `.join()`
100
+ * calls: each leg resolves an independent ref. Each leg
101
+ * independently picks its right-side strategy and applies its
102
+ * own ref mode.
103
+ *
104
+ * **Joins are NOT applied** to a `.aggregate()` terminal that
105
+ * doesn't reference joined fields — wait, that's not quite
106
+ * right. The streaming path actually DOES apply joins before
107
+ * `.aggregate()` because the join attaches a field that the
108
+ * spec might reference. Unlike `Query.aggregate()` (which skips
109
+ * joins entirely as a projection-only short-circuit), the
110
+ * streaming aggregation can't know whether the spec touches a
111
+ * joined field, so it always applies joins. Consumers who want
112
+ * unjoined streaming aggregation should leave `.join()` off the
113
+ * chain — the chain is composable for a reason.
114
+ *
115
+ * Every JoinLeg carries `partitionScope: 'all'`, plumbed through but never
116
+ * read. Same seam as the eager join — see {@link JoinLeg.partitionScope}.
117
+ */
118
+ join<As extends string, R = unknown>(field: QueryField<T, S>, opts: {
119
+ as: As;
120
+ }): ScanBuilder<T & Record<As, R | null>, S, M>;
121
+ /**
122
+ * Iterate the scan as an async iterable. Walks the page
123
+ * provider's cursors forward until exhaustion, applying every
124
+ * clause per record — only matching records are yielded.
125
+ *
126
+ * Backward-compatible with the previous async-generator `scan()`
127
+ * return type for `for await … of` consumers.
128
+ */
129
+ /**
130
+ * Per-leg right-side resolution state. Built once at iteration
131
+ * start and reused for every left record. Two strategies:
132
+ *
133
+ * - `lookupById`: present when the right source exposes the
134
+ * hook directly (typical Collection right side). Per-row
135
+ * cost is O(1).
136
+ * - `hashByPrimaryKey`: built from `snapshot()` when no
137
+ * lookupById. Per-row cost is O(1) after the upfront O(N)
138
+ * materialization. Same as eager join's hash strategy.
139
+ *
140
+ * `warnedKeys` is the per-leg dedup set for ref-mode 'warn'. We
141
+ * key on `field→target:refId` so the same dangling pair only
142
+ * warns once per iteration. The dedup is per-iteration, not
143
+ * per-process — a long-running scan that re-iterates would warn
144
+ * again, which is the desired behavior (the data may have
145
+ * changed between iterations).
146
+ */
147
+ private buildJoinResolvers;
148
+ /**
149
+ * Resolve a single join leg for one left record and return the
150
+ * left record with the joined field attached under
151
+ * `leg.as`. Pure function over `(left, resolver)`; never
152
+ * mutates the input.
153
+ *
154
+ * Ref-mode dispatch matches eager `applyJoins` from :
155
+ * - null/undefined FK → attach null silently (always allowed)
156
+ * - dangling FK + strict → throw `DanglingReferenceError`
157
+ * - dangling FK + warn → attach null, warn-once per pair
158
+ * - dangling FK + cascade → attach null silently
159
+ */
160
+ private applyOneJoinStreaming;
161
+ }
162
+ /** The public Relate surface of `ScanBuilder` — merged by `./index.ts`. */
163
+ export type ScanRelateSurface<T, S extends keyof T = never, M extends keyof T & string = never> = Pick<ScanRelateMethods<T, S, M>, 'join'>;