@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 @@
1
+ {"version":3,"sources":["../src/with-formula/materialized-views/with-materialized-view.ts"],"sourcesContent":["import { MaterializedViewConfigError, ValidationError } from '../../kernel/errors.js'\nimport type { MaterializedViewSpec, MaterializedViewStrategy } from './types.js'\nimport { validateProjectionLegs } from './projection-legs.js' // #1140\nimport { describeGroupKey } from '../../kernel/query/reduce/date-trunc.js'\n\n/**\n * Register a materialized view: a declared query whose result is\n * persisted as a queryable collection and kept fresh as sources\n * change. Writes go through the standard `Collection.put` pipeline;\n * refresh-driven deletes route through `Collection._internalDelete` so\n * user `onDelete` guards on the output collection aren't tripped by\n * housekeeping.\n *\n * Three registration modes:\n * - **single-source** — declare `query: (db) => Query<TRow>`; the\n * dependency analyzer derives source collections from the plan.\n * - **UNION** — declare `unionSources: [{ collection, map }, ...]`\n * plus optional `groupBy` + `aggregate`; the executor reads each\n * arm, maps to the unified row shape, concatenates, then groups\n * and aggregates.\n * - **projection** (#810) — declare `projection: { source, joins,\n * map }`; one output row per primary record, enriched with\n * forward FK legs and reverse \"collect\" legs before `map` runs.\n *\n * The three modes are mutually exclusive — exactly one of `query` /\n * `unionSources` / `projection` must be set at registration time.\n *\n * See design-history/2026-05-20-dim14-mv-v2-design.md (single-source v2),\n * design-history/2026-05-21-dim14-mv-multikey-and-union.md (UNION),\n * and design-history/2026-07-25-join-projection-mv-design.md (projection).\n */\nexport function withMaterializedView<TRow extends Record<string, unknown>>(\n spec: MaterializedViewSpec<TRow>,\n): MaterializedViewStrategy {\n if (!spec.name || spec.name.length === 0) {\n throw new ValidationError('withMaterializedView: name is required')\n }\n // Mutual exclusion: exactly one of the three forms must be declared.\n const declaredForms = [spec.query, spec.unionSources, spec.projection]\n .filter((f) => f !== undefined).length\n if (declaredForms > 1) {\n throw new MaterializedViewConfigError(\n 'query, unionSources, and projection are mutually exclusive — pick one',\n )\n }\n if (declaredForms === 0) {\n throw new MaterializedViewConfigError(\n 'strategy must declare exactly one of query, unionSources, or projection',\n )\n }\n if (spec.query !== undefined && typeof spec.query !== 'function') {\n throw new ValidationError('withMaterializedView: query must be a function returning a Query<T>')\n }\n // UNION-form invariants.\n if (spec.unionSources) {\n // A single arm is a deliberate shape: map→group→aggregate over\n // ONE collection with a COMPUTED bucket key (e.g. month sliced from a\n // date field) — something the query form's stored-field groupBy cannot\n // express. The executor and dependency analyzer are arm-count-agnostic.\n if (spec.unionSources.length < 1) {\n throw new MaterializedViewConfigError(\n 'unionSources requires at least 1 source collection',\n )\n }\n const seen = new Set<string>()\n for (const s of spec.unionSources) {\n if (typeof s?.collection !== 'string' || s.collection.length === 0) {\n throw new MaterializedViewConfigError(\n 'each unionSources entry must declare a non-empty `collection` string',\n )\n }\n if (typeof s.map !== 'function') {\n throw new MaterializedViewConfigError(\n `unionSources entry for \"${s.collection}\" is missing a \\`map\\` function`,\n )\n }\n if (seen.has(s.collection)) {\n throw new MaterializedViewConfigError(\n `unionSources must reference distinct collections (duplicate: \"${s.collection}\")`,\n )\n }\n seen.add(s.collection)\n }\n if (Array.isArray(spec.groupBy) && spec.groupBy.length === 0) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": groupBy must not be an empty array — omit it or provide at least one field name`,\n )\n }\n if (spec.aggregate && !spec.groupBy) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": UNION strategy with aggregate requires groupBy — `\n + `use groupBy to declare the bucketing keys, or remove aggregate for a pure dedup MV`,\n )\n }\n // `moneyFields` only has meaning when there's a reducer to money-rewrite —\n // it keys reducer outputs, so declaring it with neither is a no-op config\n // mistake.\n //\n // ⚠️ #1411 widened this: a WINDOW's reducer slots are money-rewritten by\n // the same binding, so `moneyFields` is meaningful for a view that\n // declares a window and no aggregate — which is exactly the pilot's\n // per-row running total. Before the widening this guard refused that view\n // with a message about aggregates it was not trying to use.\n if (spec.moneyFields && !spec.aggregate && !spec.window) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": moneyFields requires aggregate or window — `\n + `moneyFields rewrites sum/min/max reducers over money output fields, `\n + `so it is meaningless without one`,\n )\n }\n // Per-arm joins resolve right-side collections that the union\n // dependency set (built from arm `collection`s alone) does NOT\n // include. The consumer must list those right-side collections in\n // `sources` so writes to them trigger MV refresh.\n // #1411 — declared (`on`) legs name their target literally and fold it in\n // themselves; only ref legs need the consumer to list the right side.\n if (spec.unionSources.some(s => s.join?.some(leg => !('on' in leg))) && (!spec.sources || spec.sources.length === 0)) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": a unionSources arm declares join(s) but `\n + `no \\`sources\\` are listed — declare sources: [...] with the right-side `\n + `(join-target) collection names so writes to them trigger MV refresh`,\n )\n }\n if (spec.predicates) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": predicates are not supported on UNION strategies — `\n + `UNION mode does not use a Query<T> chain, so .wherePredicate() cannot fire. `\n + `Use the query() form, or open an issue if per-arm predicates are needed`,\n )\n }\n }\n // #1411 — window-form invariants. Shared by UNION and projection, since the\n // stage runs at both exits from the grouping tail.\n if (spec.window) {\n if (spec.query) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": window is not supported on the query() form — `\n + `the rows come from a Query, which has its own .window(...).select(...). `\n + `window is for the unionSources / projection forms, whose rows are mapped`,\n )\n }\n if (typeof spec.window.select !== 'object' || spec.window.select === null\n || Object.keys(spec.window.select).length === 0) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": window.select must declare at least one output — `\n + `a window that selects nothing computes nothing, so declaring one is `\n + `more likely a mistake than an intention`,\n )\n }\n // Same rule `derive` has, and the same reason: a group key is the row's\n // identity and feeds rowKey, so writing one from a later stage would\n // silently re-home the row.\n const groupFields = new Set<string>(\n spec.groupBy === undefined\n ? []\n : (Array.isArray(spec.groupBy) ? spec.groupBy : [spec.groupBy]).map(describeGroupKey),\n )\n for (const key of Object.keys(spec.window.select)) {\n if (groupFields.has(key)) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": window.select[\"${key}\"] collides with a groupBy key — `\n + `a group key is the row's identity and feeds rowKey, so a window output `\n + `may not overwrite it. Pick another name for the window column`,\n )\n }\n }\n }\n\n // Projection-form invariants (#810). Shape checks only — the\n // semantic ref() check on collect legs (the `on` field must carry a\n // ref() targeting the projection source) runs at first\n // materialization, parity with join-time ref errors.\n if (spec.projection) {\n const projection = spec.projection\n if (typeof projection.source !== 'string' || projection.source.length === 0) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": projection.source must be a non-empty collection name`,\n )\n }\n if (typeof projection.map !== 'function') {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": projection is missing a \\`map\\` function`,\n )\n }\n if (!Array.isArray(projection.joins) || projection.joins.length < 1) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": projection.joins must declare at least 1 leg — `\n + `a leg-less single-source MV is the query() form's job`,\n )\n }\n const seenAs = new Set<string>()\n for (const leg of projection.joins) {\n const l = leg as { field?: unknown; collect?: unknown; on?: unknown; as?: unknown }\n const isForward = l.field !== undefined\n const isCollect = l.collect !== undefined\n if (isForward && isCollect) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": a projection leg cannot declare both \\`field\\` `\n + `(forward) and \\`collect\\` (reverse) — split it into two legs`,\n )\n }\n if (!isForward && !isCollect) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": each projection leg must declare either \\`field\\` `\n + `(forward FK) or \\`collect\\` (reverse one-to-many)`,\n )\n }\n if (isForward && (typeof l.field !== 'string' || l.field.length === 0)) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": a forward projection leg must declare a non-empty \\`field\\``,\n )\n }\n if (isCollect) {\n if (typeof l.collect !== 'string' || l.collect.length === 0) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": a collect projection leg must declare a non-empty \\`collect\\` collection name`,\n )\n }\n if (typeof l.on !== 'string' || l.on.length === 0) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": collect leg for \"${l.collect}\" must declare a non-empty \\`on\\` FK field`,\n )\n }\n }\n if (typeof l.as !== 'string' || l.as.length === 0) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": each projection leg must declare a non-empty \\`as\\` alias`,\n )\n }\n if (seenAs.has(l.as)) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": projection legs must attach under distinct \\`as\\` aliases (duplicate: \"${l.as}\")`,\n )\n }\n seenAs.add(l.as)\n }\n // #1140 — `from` wiring, checked here with the rest of the leg shape rather\n // than at vault open: it is pure configuration, so the earliest failure is\n // the best one. Owned by `projection-legs.ts` because the executor and the\n // registry both walk the same graph.\n validateProjectionLegs(spec.name, spec.projection)\n // Post-map grouping invariants — same rules as UNION (the mapped\n // stream feeds the same shared groupAndReduce tail).\n if (Array.isArray(spec.groupBy) && spec.groupBy.length === 0) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": groupBy must not be an empty array — omit it or provide at least one field name`,\n )\n }\n if (spec.aggregate && !spec.groupBy) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": projection strategy with aggregate requires groupBy — `\n + `use groupBy to declare the bucketing keys, or remove aggregate for a row-per-primary-record MV`,\n )\n }\n if (spec.moneyFields && !spec.aggregate && !spec.window) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": moneyFields requires aggregate or window — `\n + `moneyFields rewrites sum/min/max reducers over money output fields, `\n + `so it is meaningless without one`,\n )\n }\n if (spec.predicates) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": predicates are not supported on projection strategies — `\n + `projection mode does not use a Query<T> chain, so .wherePredicate() cannot fire. `\n + `Filter inside projection.map (return null to omit) instead`,\n )\n }\n }\n // i18nLocale + i18nFields drive compute-time i18n resolution of group-key\n // i18nText fields before bucketing — UNION mode (resolved on the unified rows)\n // AND query mode (resolved in GroupedReduction.run before groupAndReduce).\n // i18nLocale without i18nFields cannot resolve anything, so reject it early.\n if (spec.i18nLocale !== undefined && spec.i18nFields === undefined) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": i18nLocale requires i18nFields — `\n + `declare the i18nText descriptors of the group-key fields so they can be `\n + `resolved at the mv layer before bucketing.`,\n )\n }\n if (typeof spec.rowKey !== 'function') {\n // Two states, two messages. The original text said \"required\" for BOTH,\n // so passing a field NAME — the shape every other option here takes —\n // reported the key as ABSENT. That collapse cost this author three\n // attempts and produced a probe that measured nothing.\n throw new ValidationError(\n spec.rowKey === undefined\n ? 'withMaterializedView: rowKey is required (no default; see spec § Type surface)'\n : `withMaterializedView: rowKey must be a FUNCTION (row) => string, not a ${typeof spec.rowKey}`\n + ` — it computes each output row's id from the grouped row, so a field NAME is not enough.`\n + ` Pass \\`rowKey: (r) => String(r.${typeof spec.rowKey === 'string' ? String(spec.rowKey) : 'someField'})\\`.`)\n }\n if (spec.refresh !== 'eager' && spec.refresh !== 'lazy' && spec.refresh !== 'manual') {\n throw new ValidationError(\n `withMaterializedView: refresh must be 'eager' | 'lazy' | 'manual', got \"${String(spec.refresh)}\"`,\n )\n }\n return {\n __noydb_strategy: 'materialized-view',\n spec,\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AttestationNotEnabledError
3
- } from "./chunk-7O3Y4PPD.js";
3
+ } from "./chunk-244VXYPG.js";
4
4
 
5
5
  // src/with-audit/attestation/strategy.ts
6
6
  var NO_ATTESTATION = {
@@ -27,4 +27,4 @@ var NO_ATTESTATION = {
27
27
  export {
28
28
  NO_ATTESTATION
29
29
  };
30
- //# sourceMappingURL=chunk-Q7HZX3IF.js.map
30
+ //# sourceMappingURL=chunk-X4773RBR.js.map
@@ -0,0 +1,195 @@
1
+ // src/kernel/query/civil-date.ts
2
+ var CIVIL = /^(\d{4})(?:-(\d{1,2})(?:-(\d{1,2})(?:[T ]\d{1,2}:\d{2}(?::\d{2}(?:\.\d+)?)?)?)?)?$/;
3
+ function daysInMonth(y, m) {
4
+ if (m === 2) return y % 4 === 0 && y % 100 !== 0 || y % 400 === 0 ? 29 : 28;
5
+ return m === 4 || m === 6 || m === 9 || m === 11 ? 30 : 31;
6
+ }
7
+ function civilDateOf(value) {
8
+ if (typeof value !== "string") return void 0;
9
+ const match = CIVIL.exec(value);
10
+ if (match === null) return void 0;
11
+ const y = Number(match[1]);
12
+ const m = match[2] === void 0 ? 1 : Number(match[2]);
13
+ const d = match[3] === void 0 ? 1 : Number(match[3]);
14
+ if (m < 1 || m > 12 || d < 1 || d > daysInMonth(y, m)) return "invalid";
15
+ return { y, m, d };
16
+ }
17
+
18
+ // src/kernel/query/reduce/date-trunc.ts
19
+ var UNITS = ["day", "week", "month", "quarter", "year"];
20
+ var WEEK_STARTS = ["monday", "sunday"];
21
+ function dateTrunc(field, unit, options) {
22
+ if (typeof field !== "string" || field.length === 0) {
23
+ throw new Error("dateTrunc(): field must be a non-empty field name.");
24
+ }
25
+ if (!UNITS.includes(unit)) {
26
+ throw new Error(
27
+ `dateTrunc("${field}"): unknown unit "${String(unit)}". Expected one of ${UNITS.join(", ")}.`
28
+ );
29
+ }
30
+ const timeZone = options?.timeZone;
31
+ if (typeof timeZone !== "string" || timeZone.length === 0) {
32
+ throw new Error(
33
+ `dateTrunc("${field}", "${unit}"): timeZone is required. An accounting period is a local-calendar fact, so there is no safe host-local default \u2014 pass an IANA zone (e.g. { timeZone: 'Europe/Berlin' }), or { timeZone: 'UTC' } to bucket in UTC.`
34
+ );
35
+ }
36
+ try {
37
+ formatterFor(timeZone);
38
+ } catch {
39
+ throw new Error(
40
+ `dateTrunc("${field}", "${unit}"): unknown timeZone "${timeZone}". Expected an IANA zone name.`
41
+ );
42
+ }
43
+ const weekStartsOn = options.weekStartsOn ?? "monday";
44
+ if (!WEEK_STARTS.includes(weekStartsOn)) {
45
+ throw new Error(
46
+ `dateTrunc("${field}", "${unit}"): weekStartsOn must be ${WEEK_STARTS.join(" or ")}.`
47
+ );
48
+ }
49
+ return {
50
+ __dateTrunc: true,
51
+ field,
52
+ unit,
53
+ timeZone,
54
+ weekStartsOn,
55
+ as: options.as ?? `${field.replaceAll(".", "_")}_${unit}`
56
+ };
57
+ }
58
+ function isDateTruncKey(value) {
59
+ return typeof value === "object" && value !== null && value.__dateTrunc === true;
60
+ }
61
+ function groupKeyName(key) {
62
+ return isDateTruncKey(key) ? key.as : key;
63
+ }
64
+ function groupKeySourceField(key) {
65
+ return isDateTruncKey(key) ? key.field : key;
66
+ }
67
+ function describeGroupKey(key) {
68
+ if (!isDateTruncKey(key)) return key;
69
+ return `dateTrunc(${key.field}|${key.unit}|${key.timeZone}|${key.weekStartsOn}|${key.as})`;
70
+ }
71
+ function truncateDate(value, key) {
72
+ if (value === null || value === void 0) return value;
73
+ const { y, m, d } = resolveCivilDate(value, key);
74
+ switch (key.unit) {
75
+ case "day":
76
+ return ymd(y, m, d);
77
+ case "month":
78
+ return ymd(y, m, 1);
79
+ case "quarter":
80
+ return ymd(y, m - (m - 1) % 3, 1);
81
+ case "year":
82
+ return ymd(y, 1, 1);
83
+ case "week": {
84
+ const days = daysFromCivil(y, m, d);
85
+ const sundayIndex = ((days % 7 + 7) % 7 + 4) % 7;
86
+ const back = key.weekStartsOn === "monday" ? (sundayIndex + 6) % 7 : sundayIndex;
87
+ const start = civilFromDays(days - back);
88
+ return ymd(start.y, start.m, start.d);
89
+ }
90
+ }
91
+ }
92
+ function projectDateTruncKeys(rows, keys) {
93
+ return rows.map((row) => {
94
+ const next = { ...row };
95
+ for (const key of keys) {
96
+ next[key.as] = truncateDate(readFieldPath(next, key.field), key);
97
+ }
98
+ return next;
99
+ });
100
+ }
101
+ function readFieldPath(row, path) {
102
+ if (!path.includes(".")) return row[path];
103
+ let cur = row;
104
+ for (const seg of path.split(".")) {
105
+ if (cur === null || cur === void 0 || typeof cur !== "object") return void 0;
106
+ cur = cur[seg];
107
+ }
108
+ return cur;
109
+ }
110
+ function resolveCivilDate(value, key) {
111
+ const civil = civilDateOf(value);
112
+ if (civil === "invalid") {
113
+ throw new Error(
114
+ `dateTrunc("${key.field}", "${key.unit}"): value ${JSON.stringify(value)} is a calendar date shape but names no real day.`
115
+ );
116
+ }
117
+ if (civil !== void 0) return civil;
118
+ const ms = toEpochMs(value);
119
+ if (ms === void 0) {
120
+ throw new Error(
121
+ `dateTrunc("${key.field}", "${key.unit}"): value ${JSON.stringify(value) ?? typeof value} is not a timestamp. Expected a Date, epoch milliseconds, or a parseable date string.`
122
+ );
123
+ }
124
+ return localCivilDate(ms, key.timeZone);
125
+ }
126
+ function toEpochMs(value) {
127
+ if (value instanceof Date) return Number.isNaN(value.getTime()) ? void 0 : value.getTime();
128
+ if (typeof value === "number") return Number.isFinite(value) ? value : void 0;
129
+ if (typeof value === "string") {
130
+ const parsed = Date.parse(value);
131
+ return Number.isNaN(parsed) ? void 0 : parsed;
132
+ }
133
+ return void 0;
134
+ }
135
+ var formatters = /* @__PURE__ */ new Map();
136
+ function formatterFor(timeZone) {
137
+ let f = formatters.get(timeZone);
138
+ if (!f) {
139
+ f = new Intl.DateTimeFormat("en-US", {
140
+ timeZone,
141
+ year: "numeric",
142
+ month: "2-digit",
143
+ day: "2-digit"
144
+ });
145
+ formatters.set(timeZone, f);
146
+ }
147
+ return f;
148
+ }
149
+ function localCivilDate(ms, timeZone) {
150
+ let y = 0;
151
+ let m = 0;
152
+ let d = 0;
153
+ for (const part of formatterFor(timeZone).formatToParts(new Date(ms))) {
154
+ if (part.type === "year") y = Number(part.value);
155
+ else if (part.type === "month") m = Number(part.value);
156
+ else if (part.type === "day") d = Number(part.value);
157
+ }
158
+ return { y, m, d };
159
+ }
160
+ function ymd(y, m, d) {
161
+ return `${String(y).padStart(4, "0")}-${String(m).padStart(2, "0")}-${String(d).padStart(2, "0")}`;
162
+ }
163
+ function daysFromCivil(y, m, d) {
164
+ const yy = m <= 2 ? y - 1 : y;
165
+ const era = Math.floor(yy / 400);
166
+ const yoe = yy - era * 400;
167
+ const doy = Math.floor((153 * (m + (m > 2 ? -3 : 9)) + 2) / 5) + d - 1;
168
+ const doe = yoe * 365 + Math.floor(yoe / 4) - Math.floor(yoe / 100) + doy;
169
+ return era * 146097 + doe - 719468;
170
+ }
171
+ function civilFromDays(z) {
172
+ const shifted = z + 719468;
173
+ const era = Math.floor(shifted / 146097);
174
+ const doe = shifted - era * 146097;
175
+ const yoe = Math.floor(
176
+ (doe - Math.floor(doe / 1460) + Math.floor(doe / 36524) - Math.floor(doe / 146096)) / 365
177
+ );
178
+ const y = yoe + era * 400;
179
+ const doy = doe - (365 * yoe + Math.floor(yoe / 4) - Math.floor(yoe / 100));
180
+ const mp = Math.floor((5 * doy + 2) / 153);
181
+ const d = doy - Math.floor((153 * mp + 2) / 5) + 1;
182
+ const m = mp + (mp < 10 ? 3 : -9);
183
+ return { y: m <= 2 ? y + 1 : y, m, d };
184
+ }
185
+
186
+ export {
187
+ dateTrunc,
188
+ isDateTruncKey,
189
+ groupKeyName,
190
+ groupKeySourceField,
191
+ describeGroupKey,
192
+ truncateDate,
193
+ projectDateTruncKeys
194
+ };
195
+ //# sourceMappingURL=chunk-XBKH4FOC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/kernel/query/civil-date.ts","../src/kernel/query/reduce/date-trunc.ts"],"sourcesContent":["/**\n * Civil-date recognition for `dateTrunc()` (#1410).\n *\n * ## Why this module exists\n *\n * `dateTrunc()` buckets a value by resolving it to an instant and reading the\n * civil calendar date that instant falls on in the declared `timeZone`. That is\n * exactly right for a *timestamp*. It is a **category error** for a value that\n * names no instant.\n *\n * `'2026-01-01'` — the shape `z.string().date()` produces — is a calendar date.\n * ECMA-262 nonetheless resolves the ISO date-only form to **UTC midnight**, and\n * converting that instant into any zone west of UTC moves it back a day. So\n * `dateTrunc(..., 'month', { timeZone: 'America/New_York' })` silently bucketed\n * `'2026-01-01'` into `2025-12` — a wrong year, no error, no warning. Correct at\n * `+07` and UTC purely by accident of sign, which is what made it latent.\n *\n * ## The rule\n *\n * **A string carrying no timezone designator denotes CIVIL time and is used as\n * written. Everything else is an instant and is converted through the zone.**\n *\n * That covers three shapes, all of which are zoneless:\n *\n * | input | denotes | why |\n * |---|---|---|\n * | `'2026-01-01'`, `'2026-01'`, `'2026'` | civil | ISO calendar forms; no time, no zone |\n * | `'2026-01-01T08:30'`, `'2026-01-01 08:30:00.5'` | civil | offsetless date-time |\n * | `'2026-01-01T00:00:00Z'`, `'…+07:00'`, `Date`, epoch ms | instant | carries, or *is*, a fixed point in time |\n *\n * The offsetless date-time is the subtle one and it is included **deliberately**.\n * ECMA-262 parses it as *host-local*, which is the same defect one layer down:\n * the bucket would depend on the machine the query ran on, and this module's\n * whole premise (see `date-trunc.ts`) is that a host-local guess is never\n * acceptable. Reading it as civil makes the result host-independent. The\n * time-of-day is then simply discarded — every `dateTrunc` unit is a day or\n * coarser, so no unit can observe it.\n *\n * ⚠️ **Loose, non-ISO strings are NOT recognised here** — `'01/01/2026'`,\n * RFC-2822, and anything else `Date.parse` accepts by implementation extension\n * stay on the instant path. Their parsing is implementation-defined, so there\n * is no shape this module could claim to recognise correctly; a consumer who\n * wants civil treatment should pass an ISO calendar date.\n *\n * ⚠️ **An out-of-range field is REFUSED, not rolled over.** V8's `Date.parse`\n * accepts `'2026-02-30'` and yields 2 March; bucketing a typo under a\n * wrong-but-plausible key is the failure mode this whole module exists to\n * prevent, so a recognised-shape-but-impossible date throws instead.\n */\n\n/** A calendar date with no instant and no zone. `m` is 1-12. */\nexport interface CivilDate {\n readonly y: number\n readonly m: number\n readonly d: number\n}\n\n/**\n * `YYYY[-M[-D[(T| )HH:MM[:SS[.fff]]]]]` and nothing else — in particular no\n * trailing `Z` and no `±HH:MM`, which are precisely the designators that turn\n * the string into an instant.\n */\nconst CIVIL =\n /^(\\d{4})(?:-(\\d{1,2})(?:-(\\d{1,2})(?:[T ]\\d{1,2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?)?)?)?$/\n\n/** Days in `m` of `y`, proleptic Gregorian. */\nfunction daysInMonth(y: number, m: number): number {\n if (m === 2) return (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0 ? 29 : 28\n return m === 4 || m === 6 || m === 9 || m === 11 ? 30 : 31\n}\n\n/**\n * What a value denotes:\n * - a {@link CivilDate} — a zoneless calendar shape, use it as written;\n * - `'invalid'` — a recognised calendar shape naming no real day (see the\n * out-of-range note above); the caller refuses it with its own context;\n * - `undefined` — an instant, or an unrecognised shape: convert through the\n * declared zone exactly as before.\n */\nexport function civilDateOf(value: unknown): CivilDate | 'invalid' | undefined {\n if (typeof value !== 'string') return undefined\n const match = CIVIL.exec(value)\n if (match === null) return undefined\n const y = Number(match[1])\n const m = match[2] === undefined ? 1 : Number(match[2])\n const d = match[3] === undefined ? 1 : Number(match[3])\n if (m < 1 || m > 12 || d < 1 || d > daysInMonth(y, m)) return 'invalid'\n return { y, m, d }\n}\n","/**\n * Calendar bucketing for group keys — `dateTrunc()` (#1350).\n *\n * ```ts\n * invoices.query()\n * .groupBy(dateTrunc('issuedAt', 'month', { timeZone: 'Europe/Berlin' }))\n * .aggregate({ total: sum('amount') })\n * .run()\n * // → [ { issuedAt_month: '2026-09-01', total: 5250 }, … ]\n * ```\n *\n * ## The timezone is a REQUIRED parameter, never a host-local guess\n *\n * An accounting period is a local-calendar fact: \"September\" means the\n * September of some jurisdiction's calendar, and the same instant belongs to\n * different months depending on which. A host-local default would make the\n * same query produce different rollups on a laptop in Berlin and a CI runner\n * in UTC — silently, with no error and a plausible-looking number. So\n * `timeZone` has no default: omit it and the descriptor is refused at\n * construction, which is also where an unknown zone is caught.\n *\n * ## The bucket value is the local calendar date of the bucket START\n *\n * Every unit produces `'YYYY-MM-DD'`: `'2026-09-01'` for September 2026,\n * `'2026-07-01'` for Q3, `'2026-01-01'` for the year, `'2026-08-31'` for the\n * ISO week containing 3 September. One shape for all five units, lexically\n * sortable, and free of the week-numbering ambiguity that `'2026-W36'` would\n * drag in (ISO week-years disagree with calendar years at the boundary, and\n * ISO week numbers are undefined for a sunday-start week).\n *\n * ## Week start\n *\n * `weekStartsOn` defaults to `'monday'` (ISO-8601). `'sunday'` is the other\n * accepted value. It is only consulted for `unit: 'week'`, but it is part of\n * the descriptor's identity either way, so it folds into the queryHash.\n *\n * ## DST\n *\n * No arithmetic is ever done on a timestamp. The instant is resolved to a\n * local civil date through `Intl.DateTimeFormat` (the platform's own tz\n * database), and every truncation from there is pure civil-calendar\n * arithmetic. A 23-hour or 25-hour local day therefore needs no special case:\n * both ends of it format to the same local date.\n *\n * ## A ZONELESS value is a civil date, and the timeZone does not apply to it\n *\n * `'2026-01-01'` — what `z.string().date()` produces — names a calendar day,\n * not an instant. It is bucketed as written, in every zone. Applying a zone to\n * it is a category error, and an expensive one: ECMA-262 resolves the ISO\n * date-only form to UTC midnight, so before #1410 that value bucketed into\n * **2025-12** for `America/New_York` — a wrong year, silently. The same holds\n * for an offsetless date-time, which ECMA-262 would otherwise read as\n * *host*-local. A `Date`, epoch millis, or a string carrying `Z` or an offset\n * IS an instant and still converts through `timeZone`. See `civil-date.ts`.\n *\n * Portability: `Intl` is a language global, so this file stays inside hub's\n * no-Node-built-ins boundary and adds no dependency.\n */\nimport { civilDateOf } from '../civil-date.js'\n\n/** Calendar units `dateTrunc()` can bucket into. */\nexport type DateTruncUnit = 'day' | 'week' | 'month' | 'quarter' | 'year'\n\n/** Accepted week-start conventions. Default is `'monday'` (ISO-8601). */\nexport type WeekStart = 'monday' | 'sunday'\n\nconst UNITS: readonly DateTruncUnit[] = ['day', 'week', 'month', 'quarter', 'year']\nconst WEEK_STARTS: readonly WeekStart[] = ['monday', 'sunday']\n\n/**\n * A derived group key: \"bucket `field` to the start of its `unit`, in\n * `timeZone`\". Opaque to consumers — build it with {@link dateTrunc}.\n */\nexport interface DateTruncKey {\n readonly __dateTrunc: true\n /** Source field (a `readPath` path — dots address nested values). */\n readonly field: string\n readonly unit: DateTruncUnit\n /** IANA zone name. Always explicit; validated at construction. */\n readonly timeZone: string\n readonly weekStartsOn: WeekStart\n /** Output key the bucket is stamped under on each result row. */\n readonly as: string\n}\n\n/** Either a plain field name or a derived calendar key. */\nexport type GroupKey = string | DateTruncKey\n\nexport interface DateTruncOptions {\n /**\n * IANA timezone the calendar is read in — REQUIRED. See the module note:\n * there is no safe default, so there is no default.\n *\n * It applies to values that ARE instants. A zoneless calendar string\n * (`'2026-01-01'`, `'2026-01-01T08:30'`) has no instant to convert and is\n * bucketed as written regardless of what is passed here (#1410).\n */\n timeZone: string\n /** Week-start convention for `unit: 'week'`. Default `'monday'`. */\n weekStartsOn?: WeekStart\n /**\n * Output key. Defaults to `<field>_<unit>` with dots flattened to\n * underscores, so a nested source path cannot produce an output key that\n * `readPath` would then re-interpret as a path.\n */\n as?: string\n}\n\n/**\n * Declare a calendar-bucketed group key. Composable with plain field names in\n * a multi-key `.groupBy(...)`.\n */\nexport function dateTrunc(\n field: string,\n unit: DateTruncUnit,\n options: DateTruncOptions,\n): DateTruncKey {\n if (typeof field !== 'string' || field.length === 0) {\n throw new Error('dateTrunc(): field must be a non-empty field name.')\n }\n if (!UNITS.includes(unit)) {\n throw new Error(\n `dateTrunc(\"${field}\"): unknown unit \"${String(unit)}\". Expected one of ${UNITS.join(', ')}.`,\n )\n }\n const timeZone = options?.timeZone\n if (typeof timeZone !== 'string' || timeZone.length === 0) {\n throw new Error(\n `dateTrunc(\"${field}\", \"${unit}\"): timeZone is required. An accounting period is a ` +\n `local-calendar fact, so there is no safe host-local default — pass an IANA zone ` +\n `(e.g. { timeZone: 'Europe/Berlin' }), or { timeZone: 'UTC' } to bucket in UTC.`,\n )\n }\n try {\n formatterFor(timeZone)\n } catch {\n throw new Error(\n `dateTrunc(\"${field}\", \"${unit}\"): unknown timeZone \"${timeZone}\". Expected an IANA zone name.`,\n )\n }\n const weekStartsOn = options.weekStartsOn ?? 'monday'\n if (!WEEK_STARTS.includes(weekStartsOn)) {\n throw new Error(\n `dateTrunc(\"${field}\", \"${unit}\"): weekStartsOn must be ${WEEK_STARTS.join(' or ')}.`,\n )\n }\n return {\n __dateTrunc: true,\n field,\n unit,\n timeZone,\n weekStartsOn,\n as: options.as ?? `${field.replaceAll('.', '_')}_${unit}`,\n }\n}\n\n/** Runtime discriminator — a `DateTruncKey` vs a plain field name. */\nexport function isDateTruncKey(value: unknown): value is DateTruncKey {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { __dateTrunc?: unknown }).__dateTrunc === true\n )\n}\n\n/** Output key a group key stamps on the result row. */\nexport function groupKeyName(key: GroupKey): string {\n return isDateTruncKey(key) ? key.as : key\n}\n\n/**\n * Source field a group key READS. Differs from {@link groupKeyName} only for a\n * derived key — guards that ask \"is this field stored?\" want this one.\n */\nexport function groupKeySourceField(key: GroupKey): string {\n return isDateTruncKey(key) ? key.field : key\n}\n\n/**\n * Canonical, stable description of a group key for hashing. Every parameter\n * that changes which bucket a row lands in appears here, so declaring,\n * removing, or re-parameterising a derived key bumps an MV's `queryHash`.\n * Pipe-separated so a description can never be confused with the\n * comma-separated field list it sits inside.\n */\nexport function describeGroupKey(key: GroupKey): string {\n if (!isDateTruncKey(key)) return key\n return `dateTrunc(${key.field}|${key.unit}|${key.timeZone}|${key.weekStartsOn}|${key.as})`\n}\n\n/**\n * Truncate one value to its bucket. `null` / `undefined` pass through\n * unchanged so the existing null-vs-undefined bucket semantics of\n * `groupAndReduce` still apply. Anything else that is not a timestamp is\n * REFUSED rather than bucketed under a wrong-but-plausible key.\n */\nexport function truncateDate(value: unknown, key: DateTruncKey): string | null | undefined {\n if (value === null || value === undefined) return value\n const { y, m, d } = resolveCivilDate(value, key)\n switch (key.unit) {\n case 'day':\n return ymd(y, m, d)\n case 'month':\n return ymd(y, m, 1)\n case 'quarter':\n return ymd(y, m - ((m - 1) % 3), 1)\n case 'year':\n return ymd(y, 1, 1)\n case 'week': {\n const days = daysFromCivil(y, m, d)\n // 1970-01-01 (day 0) was a Thursday; +4 shifts to a sunday-indexed week.\n const sundayIndex = (((days % 7) + 7) % 7 + 4) % 7\n const back = key.weekStartsOn === 'monday' ? (sundayIndex + 6) % 7 : sundayIndex\n const start = civilFromDays(days - back)\n return ymd(start.y, start.m, start.d)\n }\n }\n}\n\n/**\n * Stamp each derived key's bucket onto a shallow copy of every row, so the\n * downstream grouping pipeline sees an ordinary stored field. Input rows are\n * never mutated.\n */\nexport function projectDateTruncKeys<R>(\n rows: readonly R[],\n keys: readonly DateTruncKey[],\n): R[] {\n return rows.map((row) => {\n const next = { ...(row as Record<string, unknown>) }\n for (const key of keys) {\n next[key.as] = truncateDate(readFieldPath(next, key.field), key)\n }\n return next as R\n })\n}\n\n// ─── internals ──────────────────────────────────────────────────────────────\n\n/**\n * Local `readPath`. Duplicating six lines from `predicate.ts` keeps this\n * module importable from the MV executor without dragging the query\n * predicate evaluator in behind it.\n */\nfunction readFieldPath(row: Record<string, unknown>, path: string): unknown {\n if (!path.includes('.')) return row[path]\n let cur: unknown = row\n for (const seg of path.split('.')) {\n if (cur === null || cur === undefined || typeof cur !== 'object') return undefined\n cur = (cur as Record<string, unknown>)[seg]\n }\n return cur\n}\n\n/**\n * The civil date a value buckets on. Two paths, and which one a value takes is\n * a property of the VALUE, never of the descriptor (#1410):\n *\n * - a zoneless calendar string names no instant, so there is nothing to\n * convert — it is its own civil date, and `key.timeZone` is not applicable\n * to it. This is what stops `'2026-01-01'` bucketing into 2025 west of UTC;\n * - anything else IS an instant, and the calendar it falls on is read in\n * `key.timeZone`, exactly as before.\n *\n * See `civil-date.ts` for which shapes are zoneless and why.\n */\nfunction resolveCivilDate(value: unknown, key: DateTruncKey): { y: number; m: number; d: number } {\n const civil = civilDateOf(value)\n if (civil === 'invalid') {\n throw new Error(\n `dateTrunc(\"${key.field}\", \"${key.unit}\"): value ${JSON.stringify(value)} is a calendar ` +\n `date shape but names no real day.`,\n )\n }\n if (civil !== undefined) return civil\n const ms = toEpochMs(value)\n if (ms === undefined) {\n throw new Error(\n `dateTrunc(\"${key.field}\", \"${key.unit}\"): value ${JSON.stringify(value) ?? typeof value} ` +\n `is not a timestamp. Expected a Date, epoch milliseconds, or a parseable date string.`,\n )\n }\n return localCivilDate(ms, key.timeZone)\n}\n\nfunction toEpochMs(value: unknown): number | undefined {\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? undefined : value.getTime()\n if (typeof value === 'number') return Number.isFinite(value) ? value : undefined\n if (typeof value === 'string') {\n const parsed = Date.parse(value)\n return Number.isNaN(parsed) ? undefined : parsed\n }\n return undefined\n}\n\nconst formatters = new Map<string, Intl.DateTimeFormat>()\nfunction formatterFor(timeZone: string): Intl.DateTimeFormat {\n let f = formatters.get(timeZone)\n if (!f) {\n f = new Intl.DateTimeFormat('en-US', {\n timeZone,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n })\n formatters.set(timeZone, f)\n }\n return f\n}\n\n/** The civil (wall-clock) calendar date an instant falls on, in `timeZone`. */\nfunction localCivilDate(ms: number, timeZone: string): { y: number; m: number; d: number } {\n let y = 0\n let m = 0\n let d = 0\n for (const part of formatterFor(timeZone).formatToParts(new Date(ms))) {\n if (part.type === 'year') y = Number(part.value)\n else if (part.type === 'month') m = Number(part.value)\n else if (part.type === 'day') d = Number(part.value)\n }\n return { y, m, d }\n}\n\nfunction ymd(y: number, m: number, d: number): string {\n return `${String(y).padStart(4, '0')}-${String(m).padStart(2, '0')}-${String(d).padStart(2, '0')}`\n}\n\n/** Days since 1970-01-01 for a civil date (Hinnant's algorithm; `m` is 1-12). */\nfunction daysFromCivil(y: number, m: number, d: number): number {\n const yy = m <= 2 ? y - 1 : y\n const era = Math.floor(yy / 400)\n const yoe = yy - era * 400\n const doy = Math.floor((153 * (m + (m > 2 ? -3 : 9)) + 2) / 5) + d - 1\n const doe = yoe * 365 + Math.floor(yoe / 4) - Math.floor(yoe / 100) + doy\n return era * 146097 + doe - 719468\n}\n\n/** Inverse of {@link daysFromCivil}. */\nfunction civilFromDays(z: number): { y: number; m: number; d: number } {\n const shifted = z + 719468\n const era = Math.floor(shifted / 146097)\n const doe = shifted - era * 146097\n const yoe = Math.floor(\n (doe - Math.floor(doe / 1460) + Math.floor(doe / 36524) - Math.floor(doe / 146096)) / 365,\n )\n const y = yoe + era * 400\n const doy = doe - (365 * yoe + Math.floor(yoe / 4) - Math.floor(yoe / 100))\n const mp = Math.floor((5 * doy + 2) / 153)\n const d = doy - Math.floor((153 * mp + 2) / 5) + 1\n const m = mp + (mp < 10 ? 3 : -9)\n return { y: m <= 2 ? y + 1 : y, m, d }\n}\n"],"mappings":"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","names":[]}
@@ -4,13 +4,13 @@ import {
4
4
  import {
5
5
  base64ToBuffer,
6
6
  bufferToBase64
7
- } from "./chunk-SL3JAAKN.js";
7
+ } from "./chunk-UYB234ZR.js";
8
8
  import {
9
9
  SessionExpiredError,
10
10
  SessionNotFoundError,
11
11
  SessionPolicyError,
12
12
  ValidationError
13
- } from "./chunk-7O3Y4PPD.js";
13
+ } from "./chunk-244VXYPG.js";
14
14
 
15
15
  // src/with-party/session/session.ts
16
16
  var subtle = globalThis.crypto.subtle;
@@ -364,4 +364,4 @@ export {
364
364
  clearDevUnlock,
365
365
  isDevUnlockActive
366
366
  };
367
- //# sourceMappingURL=chunk-ANSIZYEG.js.map
367
+ //# sourceMappingURL=chunk-YNIUIERI.js.map