@noy-db/hub 0.7.0-pre.9 → 0.7.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 (441) hide show
  1. package/CHANGELOG.md +1319 -0
  2. package/README.md +7 -6
  3. package/dist/api-TXFOVOXX.js +19 -0
  4. package/dist/as/index.js +14 -14
  5. package/dist/at/index.js +9 -10
  6. package/dist/attestation/index.js +18 -19
  7. package/dist/attestation/index.js.map +1 -1
  8. package/dist/{backup-QZQEP5RO.js → backup-IJTB4S4M.js} +14 -15
  9. package/dist/{backup-QZQEP5RO.js.map → backup-IJTB4S4M.js.map} +1 -1
  10. package/dist/blobs/index.js +13 -14
  11. package/dist/blobs/index.js.map +1 -1
  12. package/dist/broker/index.js +12 -13
  13. package/dist/broker/index.js.map +1 -1
  14. package/dist/by/index.js +2 -3
  15. package/dist/cargo/index.js +33 -34
  16. package/dist/{chunk-5UKIZIO3.js → chunk-2577DKXB.js} +2 -2
  17. package/dist/chunk-2C3AQB46.js +1652 -0
  18. package/dist/chunk-2C3AQB46.js.map +1 -0
  19. package/dist/{chunk-LUVGSKXE.js → chunk-2N4GY74U.js} +6 -6
  20. package/dist/{chunk-I5LSKXT6.js → chunk-2Y4IMKA6.js} +4 -4
  21. package/dist/{chunk-7XT7KZTN.js → chunk-3RCJJBNR.js} +10 -10
  22. package/dist/{chunk-GM4IM7TC.js → chunk-453F654R.js} +2 -2
  23. package/dist/{chunk-JUBWUJY5.js → chunk-4GVM6QZA.js} +2 -2
  24. package/dist/{chunk-2DGBRE4K.js → chunk-4OZNXTO4.js} +2 -2
  25. package/dist/{chunk-P2RJAVMR.js → chunk-5VCRVKOZ.js} +4 -4
  26. package/dist/{chunk-RCONOOVF.js → chunk-5WDXHNSW.js} +5 -5
  27. package/dist/chunk-66TQOPFM.js +37 -0
  28. package/dist/chunk-66TQOPFM.js.map +1 -0
  29. package/dist/{chunk-Q2OAAREU.js → chunk-6GMZ7HEE.js} +6 -6
  30. package/dist/{chunk-6L5IMNJX.js → chunk-6GOE5PGN.js} +168 -1328
  31. package/dist/chunk-6GOE5PGN.js.map +1 -0
  32. package/dist/{chunk-TQGT5BZE.js → chunk-6I2RQCET.js} +4 -4
  33. package/dist/{chunk-UL7TLJ54.js → chunk-6X6SEMEE.js} +6 -4
  34. package/dist/{chunk-UL7TLJ54.js.map → chunk-6X6SEMEE.js.map} +1 -1
  35. package/dist/{chunk-P7KJME6C.js → chunk-6YXCPL4T.js} +2 -2
  36. package/dist/{chunk-DOPZWTMJ.js → chunk-77K4PG6P.js} +8 -8
  37. package/dist/{chunk-LAI7ENPW.js → chunk-7MG2LHO5.js} +3 -3
  38. package/dist/{chunk-N4CHCXDL.js → chunk-7MG7SJT7.js} +1 -1
  39. package/dist/{chunk-N4CHCXDL.js.map → chunk-7MG7SJT7.js.map} +1 -1
  40. package/dist/{chunk-SW4TOSJL.js → chunk-7O3Y4PPD.js} +1 -1
  41. package/dist/chunk-7O3Y4PPD.js.map +1 -0
  42. package/dist/{chunk-HOIWW2LV.js → chunk-7V4TP3AF.js} +4 -4
  43. package/dist/{chunk-GKOJR53Y.js → chunk-ANATMFIO.js} +5 -5
  44. package/dist/{chunk-MU74BYOD.js → chunk-ANSIZYEG.js} +3 -3
  45. package/dist/{chunk-IS5LFHV2.js → chunk-AO42KJO6.js} +7 -7
  46. package/dist/{chunk-RPX2H2OL.js → chunk-BLN54W3L.js} +3 -3
  47. package/dist/{chunk-HS3LEVT4.js → chunk-BM5TWITZ.js} +7 -7
  48. package/dist/{chunk-JRWLUWDM.js → chunk-BOET4NA4.js} +3 -3
  49. package/dist/{chunk-XGXVPCYW.js → chunk-BOWNCWZT.js} +3 -3
  50. package/dist/{chunk-5EC7X5QA.js → chunk-BSFNRLK2.js} +5 -5
  51. package/dist/{chunk-65ZYRK7O.js → chunk-BUE2D7PX.js} +26 -3
  52. package/dist/chunk-BUE2D7PX.js.map +1 -0
  53. package/dist/{chunk-UTFY6W6X.js → chunk-BZ3534YM.js} +2 -2
  54. package/dist/chunk-CARABLSQ.js +176 -0
  55. package/dist/chunk-CARABLSQ.js.map +1 -0
  56. package/dist/{chunk-HLFLJCDX.js → chunk-CHJBLCOG.js} +7 -7
  57. package/dist/{chunk-OLUTCM23.js → chunk-CPWQB3N5.js} +7 -7
  58. package/dist/{chunk-3GIA3HJ2.js → chunk-DGOZ4UZD.js} +2 -2
  59. package/dist/{chunk-FPN5D4JX.js → chunk-ELNXJMGB.js} +6 -6
  60. package/dist/{chunk-NMDMSHBF.js → chunk-EQEYOJBM.js} +3 -3
  61. package/dist/{chunk-RHTPGS56.js → chunk-EYBQEIUY.js} +3 -3
  62. package/dist/{chunk-Q2ZN5DWZ.js → chunk-FAHMLERK.js} +2 -2
  63. package/dist/chunk-FFWI7UH7.js +53 -0
  64. package/dist/chunk-FFWI7UH7.js.map +1 -0
  65. package/dist/{chunk-MENI33ZV.js → chunk-FMZY5Q6L.js} +3 -3
  66. package/dist/{chunk-FZWAGG5T.js → chunk-FXBIP2WD.js} +6 -6
  67. package/dist/{chunk-OHGCRKWA.js → chunk-G56KBWFY.js} +18 -8
  68. package/dist/{chunk-OHGCRKWA.js.map → chunk-G56KBWFY.js.map} +1 -1
  69. package/dist/{chunk-K432FT7T.js → chunk-GPEQUXHL.js} +4 -4
  70. package/dist/{chunk-DNMTN46H.js → chunk-GY4WYNNG.js} +2 -2
  71. package/dist/{chunk-OQDHIAR2.js → chunk-HDOU6I2Y.js} +80 -8
  72. package/dist/chunk-HDOU6I2Y.js.map +1 -0
  73. package/dist/{chunk-MQPHKJ74.js → chunk-J6FXAEUG.js} +12 -12
  74. package/dist/{chunk-PV7XXAXK.js → chunk-JBDFMYKQ.js} +2 -2
  75. package/dist/{chunk-IZTU6RKH.js → chunk-JMGDHKQF.js} +2 -2
  76. package/dist/{chunk-AHIIBDNH.js → chunk-K6LHRFBL.js} +7 -7
  77. package/dist/{chunk-FN26SFGH.js → chunk-K7NTTA6P.js} +2 -2
  78. package/dist/{chunk-MV2OEK3K.js → chunk-KG7TZKZG.js} +5 -5
  79. package/dist/{chunk-5NKHCJU5.js → chunk-KJIMGIWO.js} +8 -8
  80. package/dist/{chunk-ZB2K3FV7.js → chunk-KTFRCC5C.js} +2 -2
  81. package/dist/{chunk-X6YRP5EC.js → chunk-KUJDV5QH.js} +5 -5
  82. package/dist/{chunk-PCIBCL26.js → chunk-KUX3OB6D.js} +7 -5
  83. package/dist/{chunk-PCIBCL26.js.map → chunk-KUX3OB6D.js.map} +1 -1
  84. package/dist/{chunk-OKCQNMO6.js → chunk-L742JPKZ.js} +6 -6
  85. package/dist/{chunk-P22XPNFW.js → chunk-L7CIOOBW.js} +2 -2
  86. package/dist/{chunk-QOHGWFAW.js → chunk-LWBCUYZW.js} +2 -2
  87. package/dist/{chunk-357ECVLE.js → chunk-MUM7IANK.js} +3 -3
  88. package/dist/{chunk-JFSUYGNE.js → chunk-MVMXZYXT.js} +2 -2
  89. package/dist/{chunk-3SWP2FYA.js → chunk-NA2NIJZI.js} +8 -8
  90. package/dist/{chunk-MOQ6OGKS.js → chunk-NKHRDYOR.js} +4 -4
  91. package/dist/{chunk-FKQCC4C5.js → chunk-NQKIUNW5.js} +2 -2
  92. package/dist/{chunk-SWFIXQF5.js → chunk-PT43Y56J.js} +6 -6
  93. package/dist/{chunk-MTTPHBIE.js → chunk-Q2PU57HC.js} +2 -2
  94. package/dist/{chunk-FLRLZ4XZ.js → chunk-Q7HZX3IF.js} +2 -2
  95. package/dist/{chunk-75WNTBZL.js → chunk-QIBVIOXO.js} +3 -3
  96. package/dist/{chunk-KQIDBIZL.js → chunk-QIZPZMUI.js} +2 -2
  97. package/dist/{chunk-VT4DTCK5.js → chunk-REDOOY2Q.js} +3 -3
  98. package/dist/chunk-REDOOY2Q.js.map +1 -0
  99. package/dist/{chunk-KZTPL7NL.js → chunk-RMF67KCG.js} +2 -2
  100. package/dist/{chunk-OEJ4R52I.js → chunk-RMS3NEA3.js} +2 -2
  101. package/dist/{chunk-VTTDPGEK.js → chunk-RRNRNANG.js} +9 -9
  102. package/dist/chunk-RTBJ5IOO.js +87 -0
  103. package/dist/chunk-RTBJ5IOO.js.map +1 -0
  104. package/dist/chunk-RXLYKVTF.js +17 -0
  105. package/dist/chunk-RXLYKVTF.js.map +1 -0
  106. package/dist/{chunk-XKA6UH5V.js → chunk-SFAWCTEM.js} +2 -2
  107. package/dist/{chunk-FYT3DXPN.js → chunk-SKGMN35F.js} +2 -2
  108. package/dist/{chunk-USKHHOIV.js → chunk-SL3JAAKN.js} +2 -2
  109. package/dist/chunk-SMH6SRX7.js +87 -0
  110. package/dist/chunk-SMH6SRX7.js.map +1 -0
  111. package/dist/{chunk-QJLOWGOU.js → chunk-SPXXX5E4.js} +12 -82
  112. package/dist/chunk-SPXXX5E4.js.map +1 -0
  113. package/dist/{chunk-JILOSL4O.js → chunk-SPYWXKJN.js} +3 -3
  114. package/dist/{chunk-4RUFYGWG.js → chunk-SZJ3DLZA.js} +2 -2
  115. package/dist/chunk-TFMM5DBB.js +20 -0
  116. package/dist/chunk-TFMM5DBB.js.map +1 -0
  117. package/dist/{chunk-O3SNM66K.js → chunk-TFR7DSOV.js} +2 -2
  118. package/dist/{chunk-DIVY2CJZ.js → chunk-TRGTKX5E.js} +3 -3
  119. package/dist/{chunk-JY4U6CYV.js → chunk-TUFM4UZP.js} +2 -2
  120. package/dist/{chunk-FRIVOR5N.js → chunk-U4FOQDY4.js} +5 -172
  121. package/dist/chunk-U4FOQDY4.js.map +1 -0
  122. package/dist/{chunk-DZPMKY3J.js → chunk-UGTBXF5U.js} +3 -3
  123. package/dist/{chunk-THNJ3IKU.js → chunk-ULUMAZ5S.js} +2 -2
  124. package/dist/{chunk-YHIAWECL.js → chunk-UXVWEX5L.js} +2 -2
  125. package/dist/{chunk-IAHDSFFA.js → chunk-UXWB3FPF.js} +10 -10
  126. package/dist/{chunk-NO272T7Q.js → chunk-V4PXLYWM.js} +2 -31
  127. package/dist/chunk-V4PXLYWM.js.map +1 -0
  128. package/dist/{chunk-GHADG5QZ.js → chunk-VTFVLCUH.js} +2 -2
  129. package/dist/{chunk-U3RMWOXY.js → chunk-VXANTWBJ.js} +3 -3
  130. package/dist/{chunk-5W5CEHLA.js → chunk-VXGSWL6L.js} +6 -6
  131. package/dist/{chunk-KHKKD62N.js → chunk-VYYM3MEN.js} +2 -16
  132. package/dist/chunk-VYYM3MEN.js.map +1 -0
  133. package/dist/{chunk-7YVSWPZB.js → chunk-WEQEYLCS.js} +7 -7
  134. package/dist/{chunk-TAJZ7GXO.js → chunk-X2DLENDQ.js} +3 -3
  135. package/dist/{chunk-2E2LT37H.js → chunk-XLMEZIAJ.js} +2 -2
  136. package/dist/{chunk-2MQ2D5OZ.js → chunk-XTXOCYOJ.js} +5 -5
  137. package/dist/{chunk-CWFH36SI.js → chunk-YSRUYAVU.js} +2 -2
  138. package/dist/{chunk-ZQGRZN5L.js → chunk-YYP7WSEB.js} +2 -2
  139. package/dist/{chunk-4U52PMEL.js → chunk-ZN4FD4PE.js} +4 -4
  140. package/dist/{chunk-AW4KTQA4.js → chunk-ZORTV6NH.js} +2 -2
  141. package/dist/{chunk-H5GVPOB4.js → chunk-ZVO4QVPD.js} +5 -5
  142. package/dist/classified/index.js +5 -6
  143. package/dist/{classified-marker-R37XW5PC.js → classified-marker-LI2SF2E4.js} +3 -5
  144. package/dist/{classified-marker-R37XW5PC.js.map → classified-marker-LI2SF2E4.js.map} +1 -1
  145. package/dist/collection-facade-4GRREZ6C.js +45 -0
  146. package/dist/computed-VPOKQK4N.js +10 -0
  147. package/dist/consent/index.js +9 -10
  148. package/dist/consent/index.js.map +1 -1
  149. package/dist/cover/index.js +9 -10
  150. package/dist/crdt/index.js +0 -1
  151. package/dist/crdt/index.js.map +1 -1
  152. package/dist/custody/index.js +12 -13
  153. package/dist/{dead-filter-GRT6RAML.js → dead-filter-TSWZQRR5.js} +2 -3
  154. package/dist/{dead-filter-GRT6RAML.js.map → dead-filter-TSWZQRR5.js.map} +1 -1
  155. package/dist/debug/index.js +1 -2
  156. package/dist/debug/index.js.map +1 -1
  157. package/dist/{delegation-6QRAYSK6.js → delegation-OVIFFPG4.js} +11 -12
  158. package/dist/{delegation-6QRAYSK6.js.map → delegation-OVIFFPG4.js.map} +1 -1
  159. package/dist/derivations/index.js +30 -16
  160. package/dist/derive-6O5SWQKN.js +21 -0
  161. package/dist/directory/index.js +10 -11
  162. package/dist/dispatch-S73TK3IY.js +302 -0
  163. package/dist/dispatch-S73TK3IY.js.map +1 -0
  164. package/dist/{dispatch-QCF7KPIP.js → dispatch-WC6X2M6C.js} +5 -7
  165. package/dist/{dispatch-QCF7KPIP.js.map → dispatch-WC6X2M6C.js.map} +1 -1
  166. package/dist/{enclave-OXZY3NOP.js → enclave-KJOTOH7X.js} +9 -10
  167. package/dist/executor-5NIMLSKZ.js +8 -0
  168. package/dist/executor-AQVXV5GZ.js +8 -0
  169. package/dist/executor-PUAO6AKJ.js +29 -0
  170. package/dist/export-accessible-72EQNBMR.js +22 -0
  171. package/dist/extract-partition-PUYNU3UF.js +37 -0
  172. package/dist/{fanout-sidecar-KGQCUJ7P.js → fanout-sidecar-WUFXNYP4.js} +9 -10
  173. package/dist/{fanout-sidecar-KGQCUJ7P.js.map → fanout-sidecar-WUFXNYP4.js.map} +1 -1
  174. package/dist/{fence-watcher-ZVSMLKQD.js → fence-watcher-U2PW6JU5.js} +1 -3
  175. package/dist/{fence-watcher-ZVSMLKQD.js.map → fence-watcher-U2PW6JU5.js.map} +1 -1
  176. package/dist/find-2ABFCZX4.js +10 -0
  177. package/dist/forget/index.js +9 -10
  178. package/dist/forget/index.js.map +1 -1
  179. package/dist/guards/index.js +4 -5
  180. package/dist/history/index.js +13 -14
  181. package/dist/history/index.js.map +1 -1
  182. package/dist/i18n/index.js +14 -15
  183. package/dist/i18n/index.js.map +1 -1
  184. package/dist/index.d.ts +20 -4
  185. package/dist/index.js +122 -115
  186. package/dist/index.js.map +1 -1
  187. package/dist/indexing/index.js +2 -3
  188. package/dist/indexing/index.js.map +1 -1
  189. package/dist/introspection/index.js +13 -13
  190. package/dist/issue-SIDORTSZ.js +18 -0
  191. package/dist/{json-schema-I22JCYCG.js → json-schema-V3M5MUCM.js} +1 -3
  192. package/dist/{json-schema-I22JCYCG.js.map → json-schema-V3M5MUCM.js.map} +1 -1
  193. package/dist/kernel/collection-config.d.ts +34 -0
  194. package/dist/kernel/collection.d.ts +11 -6
  195. package/dist/kernel/errors.d.ts +28 -0
  196. package/dist/kernel/match-pairs.d.ts +30 -0
  197. package/dist/kernel/types.d.ts +39 -0
  198. package/dist/lazy/index.js +3 -3
  199. package/dist/{ledger-ZAFULLAF.js → ledger-F33ZVMTK.js} +11 -12
  200. package/dist/liberate-LCDPNAG2.js +24 -0
  201. package/dist/link-set-FKNWAYKS.js +30 -0
  202. package/dist/{managed-secret-7OH7HKXV.js → managed-secret-PQYKSR6T.js} +10 -11
  203. package/dist/materialized-views/index.js +21 -21
  204. package/dist/{migrate-cek-QHZ75E6E.js → migrate-cek-5ENH64AA.js} +2 -3
  205. package/dist/{migrate-cek-QHZ75E6E.js.map → migrate-cek-5ENH64AA.js.map} +1 -1
  206. package/dist/money/index.js +4 -5
  207. package/dist/noydb-DUXZPKSN.js +90 -0
  208. package/dist/overlay-views/index.js +4 -5
  209. package/dist/periods/index.js +12 -13
  210. package/dist/pod/index.js +64 -60
  211. package/dist/{pod-handle-BLOI4IFY.js → pod-handle-Q736KYON.js} +10 -11
  212. package/dist/{pod-handle-BLOI4IFY.js.map → pod-handle-Q736KYON.js.map} +1 -1
  213. package/dist/policy/index.js +10 -11
  214. package/dist/port/to/index.d.ts +40 -0
  215. package/dist/portability/index.js +8 -9
  216. package/dist/portability/index.js.map +1 -1
  217. package/dist/{post-register-R33EKJQR.js → post-register-LNE2FE2A.js} +6 -7
  218. package/dist/{post-register-R33EKJQR.js.map → post-register-LNE2FE2A.js.map} +1 -1
  219. package/dist/{purge-scope-FGNNLWHD.js → purge-scope-4HEFPDOW.js} +1 -3
  220. package/dist/{purge-scope-FGNNLWHD.js.map → purge-scope-4HEFPDOW.js.map} +1 -1
  221. package/dist/query/index.js +3 -4
  222. package/dist/{read-only-facade-CHCKSEPD.js → read-only-facade-BIGO37U3.js} +1 -2
  223. package/dist/reduce/index.js +4 -5
  224. package/dist/reduce/index.js.map +1 -1
  225. package/dist/register-I2DZXGAR.js +31 -0
  226. package/dist/registry-23WF3TGH.js +8 -0
  227. package/dist/registry-4AYVUNXK.js +8 -0
  228. package/dist/registry-VSSQPIGF.js +18 -0
  229. package/dist/registry-YLEWMGAC.js +32 -0
  230. package/dist/request-withdrawal-KFQHEZ25.js +30 -0
  231. package/dist/{reveal-PI6ADRQU.js → reveal-67RDQRIN.js} +6 -7
  232. package/dist/{reveal-PI6ADRQU.js.map → reveal-67RDQRIN.js.map} +1 -1
  233. package/dist/revoke-DQDZAZZM.js +23 -0
  234. package/dist/satellites/index.js +1 -2
  235. package/dist/schema-update/index.js +2 -3
  236. package/dist/sealed-record/index.js +12 -13
  237. package/dist/sealed-record/index.js.map +1 -1
  238. package/dist/search/index.js +4 -5
  239. package/dist/{seed-CG7JMJNY.js → seed-G42JYN56.js} +12 -13
  240. package/dist/{seed-CG7JMJNY.js.map → seed-G42JYN56.js.map} +1 -1
  241. package/dist/sequence/index.js +9 -10
  242. package/dist/session/index.js +9 -10
  243. package/dist/session/index.js.map +1 -1
  244. package/dist/shadow/index.js +2 -3
  245. package/dist/shadow/index.js.map +1 -1
  246. package/dist/share-link/index.js +0 -1
  247. package/dist/share-link/index.js.map +1 -1
  248. package/dist/signer-WAMDZHEN.js +24 -0
  249. package/dist/snapshots/index.js +10 -11
  250. package/dist/snapshots/index.js.map +1 -1
  251. package/dist/{stale-HZR7745Y.js → stale-DDL7WQEZ.js} +10 -11
  252. package/dist/storage-FLR73HHF.js +22 -0
  253. package/dist/store/index.js +0 -1
  254. package/dist/{store-coordination-provider-MYIHSZXT.js → store-coordination-provider-MEQ2MJQG.js} +10 -11
  255. package/dist/{store-coordination-provider-MYIHSZXT.js.map → store-coordination-provider-MEQ2MJQG.js.map} +1 -1
  256. package/dist/sync/index.js +10 -11
  257. package/dist/sync/index.js.map +1 -1
  258. package/dist/team/index.js +15 -16
  259. package/dist/tiers/index.js +11 -12
  260. package/dist/to/index.js +2 -3
  261. package/dist/to/index.js.map +1 -1
  262. package/dist/transactions/index.js +3 -4
  263. package/dist/transactions/index.js.map +1 -1
  264. package/dist/{ulid-VQW6ERQN.js → ulid-4MKXG325.js} +1 -2
  265. package/dist/util/index.js +1 -2
  266. package/dist/util/index.js.map +1 -1
  267. package/dist/{vault-diff-FE5J35NJ.js → vault-diff-C6WUJFNP.js} +1 -2
  268. package/dist/vault-head/index.js +8 -9
  269. package/dist/vault-head/index.js.map +1 -1
  270. package/dist/{verify-R6CCBUA3.js → verify-KOV2G5D6.js} +5 -6
  271. package/dist/{verify-R6CCBUA3.js.map → verify-KOV2G5D6.js.map} +1 -1
  272. package/dist/walk-3UQBRMDV.js +21 -0
  273. package/dist/with-formula/derivations/dispatch.d.ts +16 -1
  274. package/dist/with-formula/derivations/registry.d.ts +20 -0
  275. package/dist/with-formula/derivations/trigger-match.d.ts +104 -0
  276. package/dist/with-formula/derivations/types.d.ts +61 -0
  277. package/dist/with-shape/introspection/behaviors.d.ts +7 -0
  278. package/dist/with-shape/introspection/describe.d.ts +10 -1
  279. package/dist/with-shape/introspection/field-meta.d.ts +86 -0
  280. package/dist/withdraw-accessible-EL5GXZBS.js +27 -0
  281. package/package.json +8 -3
  282. package/dist/api-GJQF7OAJ.js +0 -20
  283. package/dist/chunk-65ZYRK7O.js.map +0 -1
  284. package/dist/chunk-6L5IMNJX.js.map +0 -1
  285. package/dist/chunk-FRIVOR5N.js.map +0 -1
  286. package/dist/chunk-J6FXVDKC.js +0 -81
  287. package/dist/chunk-J6FXVDKC.js.map +0 -1
  288. package/dist/chunk-KHKKD62N.js.map +0 -1
  289. package/dist/chunk-NO272T7Q.js.map +0 -1
  290. package/dist/chunk-OQDHIAR2.js.map +0 -1
  291. package/dist/chunk-PZ5AY32C.js +0 -10
  292. package/dist/chunk-QJLOWGOU.js.map +0 -1
  293. package/dist/chunk-SW4TOSJL.js.map +0 -1
  294. package/dist/chunk-VT4DTCK5.js.map +0 -1
  295. package/dist/chunk-XJP66QEN.js +0 -344
  296. package/dist/chunk-XJP66QEN.js.map +0 -1
  297. package/dist/collection-facade-OPJ3EC4L.js +0 -45
  298. package/dist/computed-HW6IG5UH.js +0 -11
  299. package/dist/derive-AAIXSQIE.js +0 -22
  300. package/dist/dispatch-DR3XITEC.js +0 -194
  301. package/dist/dispatch-DR3XITEC.js.map +0 -1
  302. package/dist/executor-67NA4KPO.js +0 -29
  303. package/dist/executor-7JDP7UBK.js +0 -9
  304. package/dist/executor-CRH5OB4V.js +0 -9
  305. package/dist/export-accessible-K4GJAU7U.js +0 -23
  306. package/dist/extract-partition-YJFL5OKK.js +0 -38
  307. package/dist/find-SVZHMEQI.js +0 -11
  308. package/dist/issue-64N6OG7U.js +0 -19
  309. package/dist/liberate-XL6NSGOL.js +0 -25
  310. package/dist/link-set-LQI2IJX6.js +0 -31
  311. package/dist/noydb-SWUGPFBK.js +0 -86
  312. package/dist/register-AYBQNTM3.js +0 -32
  313. package/dist/registry-CQWWOBO4.js +0 -9
  314. package/dist/registry-JCZ4BNLV.js +0 -18
  315. package/dist/registry-JFFENZ44.js +0 -9
  316. package/dist/registry-ZA4HACYR.js +0 -19
  317. package/dist/request-withdrawal-7IKUIAEB.js +0 -31
  318. package/dist/revoke-PUJKRYJF.js +0 -24
  319. package/dist/signer-5TA7FUC3.js +0 -25
  320. package/dist/storage-J2QHNJCB.js +0 -23
  321. package/dist/walk-3PA4ZOKS.js +0 -21
  322. package/dist/withdraw-accessible-62VI4W7D.js +0 -28
  323. package/dist/withdraw-accessible-62VI4W7D.js.map +0 -1
  324. package/dist/zod-HAJM7LMS.js +0 -14763
  325. package/dist/zod-HAJM7LMS.js.map +0 -1
  326. /package/dist/{api-GJQF7OAJ.js.map → api-TXFOVOXX.js.map} +0 -0
  327. /package/dist/{chunk-5UKIZIO3.js.map → chunk-2577DKXB.js.map} +0 -0
  328. /package/dist/{chunk-LUVGSKXE.js.map → chunk-2N4GY74U.js.map} +0 -0
  329. /package/dist/{chunk-I5LSKXT6.js.map → chunk-2Y4IMKA6.js.map} +0 -0
  330. /package/dist/{chunk-7XT7KZTN.js.map → chunk-3RCJJBNR.js.map} +0 -0
  331. /package/dist/{chunk-GM4IM7TC.js.map → chunk-453F654R.js.map} +0 -0
  332. /package/dist/{chunk-JUBWUJY5.js.map → chunk-4GVM6QZA.js.map} +0 -0
  333. /package/dist/{chunk-2DGBRE4K.js.map → chunk-4OZNXTO4.js.map} +0 -0
  334. /package/dist/{chunk-P2RJAVMR.js.map → chunk-5VCRVKOZ.js.map} +0 -0
  335. /package/dist/{chunk-RCONOOVF.js.map → chunk-5WDXHNSW.js.map} +0 -0
  336. /package/dist/{chunk-Q2OAAREU.js.map → chunk-6GMZ7HEE.js.map} +0 -0
  337. /package/dist/{chunk-TQGT5BZE.js.map → chunk-6I2RQCET.js.map} +0 -0
  338. /package/dist/{chunk-P7KJME6C.js.map → chunk-6YXCPL4T.js.map} +0 -0
  339. /package/dist/{chunk-DOPZWTMJ.js.map → chunk-77K4PG6P.js.map} +0 -0
  340. /package/dist/{chunk-LAI7ENPW.js.map → chunk-7MG2LHO5.js.map} +0 -0
  341. /package/dist/{chunk-HOIWW2LV.js.map → chunk-7V4TP3AF.js.map} +0 -0
  342. /package/dist/{chunk-GKOJR53Y.js.map → chunk-ANATMFIO.js.map} +0 -0
  343. /package/dist/{chunk-MU74BYOD.js.map → chunk-ANSIZYEG.js.map} +0 -0
  344. /package/dist/{chunk-IS5LFHV2.js.map → chunk-AO42KJO6.js.map} +0 -0
  345. /package/dist/{chunk-RPX2H2OL.js.map → chunk-BLN54W3L.js.map} +0 -0
  346. /package/dist/{chunk-HS3LEVT4.js.map → chunk-BM5TWITZ.js.map} +0 -0
  347. /package/dist/{chunk-JRWLUWDM.js.map → chunk-BOET4NA4.js.map} +0 -0
  348. /package/dist/{chunk-XGXVPCYW.js.map → chunk-BOWNCWZT.js.map} +0 -0
  349. /package/dist/{chunk-5EC7X5QA.js.map → chunk-BSFNRLK2.js.map} +0 -0
  350. /package/dist/{chunk-UTFY6W6X.js.map → chunk-BZ3534YM.js.map} +0 -0
  351. /package/dist/{chunk-HLFLJCDX.js.map → chunk-CHJBLCOG.js.map} +0 -0
  352. /package/dist/{chunk-OLUTCM23.js.map → chunk-CPWQB3N5.js.map} +0 -0
  353. /package/dist/{chunk-3GIA3HJ2.js.map → chunk-DGOZ4UZD.js.map} +0 -0
  354. /package/dist/{chunk-FPN5D4JX.js.map → chunk-ELNXJMGB.js.map} +0 -0
  355. /package/dist/{chunk-NMDMSHBF.js.map → chunk-EQEYOJBM.js.map} +0 -0
  356. /package/dist/{chunk-RHTPGS56.js.map → chunk-EYBQEIUY.js.map} +0 -0
  357. /package/dist/{chunk-Q2ZN5DWZ.js.map → chunk-FAHMLERK.js.map} +0 -0
  358. /package/dist/{chunk-MENI33ZV.js.map → chunk-FMZY5Q6L.js.map} +0 -0
  359. /package/dist/{chunk-FZWAGG5T.js.map → chunk-FXBIP2WD.js.map} +0 -0
  360. /package/dist/{chunk-K432FT7T.js.map → chunk-GPEQUXHL.js.map} +0 -0
  361. /package/dist/{chunk-DNMTN46H.js.map → chunk-GY4WYNNG.js.map} +0 -0
  362. /package/dist/{chunk-MQPHKJ74.js.map → chunk-J6FXAEUG.js.map} +0 -0
  363. /package/dist/{chunk-PV7XXAXK.js.map → chunk-JBDFMYKQ.js.map} +0 -0
  364. /package/dist/{chunk-IZTU6RKH.js.map → chunk-JMGDHKQF.js.map} +0 -0
  365. /package/dist/{chunk-AHIIBDNH.js.map → chunk-K6LHRFBL.js.map} +0 -0
  366. /package/dist/{chunk-FN26SFGH.js.map → chunk-K7NTTA6P.js.map} +0 -0
  367. /package/dist/{chunk-MV2OEK3K.js.map → chunk-KG7TZKZG.js.map} +0 -0
  368. /package/dist/{chunk-5NKHCJU5.js.map → chunk-KJIMGIWO.js.map} +0 -0
  369. /package/dist/{chunk-ZB2K3FV7.js.map → chunk-KTFRCC5C.js.map} +0 -0
  370. /package/dist/{chunk-X6YRP5EC.js.map → chunk-KUJDV5QH.js.map} +0 -0
  371. /package/dist/{chunk-OKCQNMO6.js.map → chunk-L742JPKZ.js.map} +0 -0
  372. /package/dist/{chunk-P22XPNFW.js.map → chunk-L7CIOOBW.js.map} +0 -0
  373. /package/dist/{chunk-QOHGWFAW.js.map → chunk-LWBCUYZW.js.map} +0 -0
  374. /package/dist/{chunk-357ECVLE.js.map → chunk-MUM7IANK.js.map} +0 -0
  375. /package/dist/{chunk-JFSUYGNE.js.map → chunk-MVMXZYXT.js.map} +0 -0
  376. /package/dist/{chunk-3SWP2FYA.js.map → chunk-NA2NIJZI.js.map} +0 -0
  377. /package/dist/{chunk-MOQ6OGKS.js.map → chunk-NKHRDYOR.js.map} +0 -0
  378. /package/dist/{chunk-FKQCC4C5.js.map → chunk-NQKIUNW5.js.map} +0 -0
  379. /package/dist/{chunk-SWFIXQF5.js.map → chunk-PT43Y56J.js.map} +0 -0
  380. /package/dist/{chunk-MTTPHBIE.js.map → chunk-Q2PU57HC.js.map} +0 -0
  381. /package/dist/{chunk-FLRLZ4XZ.js.map → chunk-Q7HZX3IF.js.map} +0 -0
  382. /package/dist/{chunk-75WNTBZL.js.map → chunk-QIBVIOXO.js.map} +0 -0
  383. /package/dist/{chunk-KQIDBIZL.js.map → chunk-QIZPZMUI.js.map} +0 -0
  384. /package/dist/{chunk-KZTPL7NL.js.map → chunk-RMF67KCG.js.map} +0 -0
  385. /package/dist/{chunk-OEJ4R52I.js.map → chunk-RMS3NEA3.js.map} +0 -0
  386. /package/dist/{chunk-VTTDPGEK.js.map → chunk-RRNRNANG.js.map} +0 -0
  387. /package/dist/{chunk-XKA6UH5V.js.map → chunk-SFAWCTEM.js.map} +0 -0
  388. /package/dist/{chunk-FYT3DXPN.js.map → chunk-SKGMN35F.js.map} +0 -0
  389. /package/dist/{chunk-USKHHOIV.js.map → chunk-SL3JAAKN.js.map} +0 -0
  390. /package/dist/{chunk-JILOSL4O.js.map → chunk-SPYWXKJN.js.map} +0 -0
  391. /package/dist/{chunk-4RUFYGWG.js.map → chunk-SZJ3DLZA.js.map} +0 -0
  392. /package/dist/{chunk-O3SNM66K.js.map → chunk-TFR7DSOV.js.map} +0 -0
  393. /package/dist/{chunk-DIVY2CJZ.js.map → chunk-TRGTKX5E.js.map} +0 -0
  394. /package/dist/{chunk-JY4U6CYV.js.map → chunk-TUFM4UZP.js.map} +0 -0
  395. /package/dist/{chunk-DZPMKY3J.js.map → chunk-UGTBXF5U.js.map} +0 -0
  396. /package/dist/{chunk-THNJ3IKU.js.map → chunk-ULUMAZ5S.js.map} +0 -0
  397. /package/dist/{chunk-YHIAWECL.js.map → chunk-UXVWEX5L.js.map} +0 -0
  398. /package/dist/{chunk-IAHDSFFA.js.map → chunk-UXWB3FPF.js.map} +0 -0
  399. /package/dist/{chunk-GHADG5QZ.js.map → chunk-VTFVLCUH.js.map} +0 -0
  400. /package/dist/{chunk-U3RMWOXY.js.map → chunk-VXANTWBJ.js.map} +0 -0
  401. /package/dist/{chunk-5W5CEHLA.js.map → chunk-VXGSWL6L.js.map} +0 -0
  402. /package/dist/{chunk-7YVSWPZB.js.map → chunk-WEQEYLCS.js.map} +0 -0
  403. /package/dist/{chunk-TAJZ7GXO.js.map → chunk-X2DLENDQ.js.map} +0 -0
  404. /package/dist/{chunk-2E2LT37H.js.map → chunk-XLMEZIAJ.js.map} +0 -0
  405. /package/dist/{chunk-2MQ2D5OZ.js.map → chunk-XTXOCYOJ.js.map} +0 -0
  406. /package/dist/{chunk-CWFH36SI.js.map → chunk-YSRUYAVU.js.map} +0 -0
  407. /package/dist/{chunk-ZQGRZN5L.js.map → chunk-YYP7WSEB.js.map} +0 -0
  408. /package/dist/{chunk-4U52PMEL.js.map → chunk-ZN4FD4PE.js.map} +0 -0
  409. /package/dist/{chunk-AW4KTQA4.js.map → chunk-ZORTV6NH.js.map} +0 -0
  410. /package/dist/{chunk-H5GVPOB4.js.map → chunk-ZVO4QVPD.js.map} +0 -0
  411. /package/dist/{chunk-PZ5AY32C.js.map → collection-facade-4GRREZ6C.js.map} +0 -0
  412. /package/dist/{collection-facade-OPJ3EC4L.js.map → computed-VPOKQK4N.js.map} +0 -0
  413. /package/dist/{computed-HW6IG5UH.js.map → derive-6O5SWQKN.js.map} +0 -0
  414. /package/dist/{derive-AAIXSQIE.js.map → enclave-KJOTOH7X.js.map} +0 -0
  415. /package/dist/{enclave-OXZY3NOP.js.map → executor-5NIMLSKZ.js.map} +0 -0
  416. /package/dist/{executor-67NA4KPO.js.map → executor-AQVXV5GZ.js.map} +0 -0
  417. /package/dist/{executor-7JDP7UBK.js.map → executor-PUAO6AKJ.js.map} +0 -0
  418. /package/dist/{executor-CRH5OB4V.js.map → export-accessible-72EQNBMR.js.map} +0 -0
  419. /package/dist/{export-accessible-K4GJAU7U.js.map → extract-partition-PUYNU3UF.js.map} +0 -0
  420. /package/dist/{extract-partition-YJFL5OKK.js.map → find-2ABFCZX4.js.map} +0 -0
  421. /package/dist/{find-SVZHMEQI.js.map → issue-SIDORTSZ.js.map} +0 -0
  422. /package/dist/{issue-64N6OG7U.js.map → ledger-F33ZVMTK.js.map} +0 -0
  423. /package/dist/{ledger-ZAFULLAF.js.map → liberate-LCDPNAG2.js.map} +0 -0
  424. /package/dist/{liberate-XL6NSGOL.js.map → link-set-FKNWAYKS.js.map} +0 -0
  425. /package/dist/{link-set-LQI2IJX6.js.map → managed-secret-PQYKSR6T.js.map} +0 -0
  426. /package/dist/{managed-secret-7OH7HKXV.js.map → noydb-DUXZPKSN.js.map} +0 -0
  427. /package/dist/{noydb-SWUGPFBK.js.map → read-only-facade-BIGO37U3.js.map} +0 -0
  428. /package/dist/{read-only-facade-CHCKSEPD.js.map → register-I2DZXGAR.js.map} +0 -0
  429. /package/dist/{register-AYBQNTM3.js.map → registry-23WF3TGH.js.map} +0 -0
  430. /package/dist/{registry-CQWWOBO4.js.map → registry-4AYVUNXK.js.map} +0 -0
  431. /package/dist/{registry-JCZ4BNLV.js.map → registry-VSSQPIGF.js.map} +0 -0
  432. /package/dist/{registry-JFFENZ44.js.map → registry-YLEWMGAC.js.map} +0 -0
  433. /package/dist/{registry-ZA4HACYR.js.map → request-withdrawal-KFQHEZ25.js.map} +0 -0
  434. /package/dist/{request-withdrawal-7IKUIAEB.js.map → revoke-DQDZAZZM.js.map} +0 -0
  435. /package/dist/{revoke-PUJKRYJF.js.map → signer-WAMDZHEN.js.map} +0 -0
  436. /package/dist/{signer-5TA7FUC3.js.map → stale-DDL7WQEZ.js.map} +0 -0
  437. /package/dist/{stale-HZR7745Y.js.map → storage-FLR73HHF.js.map} +0 -0
  438. /package/dist/{storage-J2QHNJCB.js.map → ulid-4MKXG325.js.map} +0 -0
  439. /package/dist/{ulid-VQW6ERQN.js.map → vault-diff-C6WUJFNP.js.map} +0 -0
  440. /package/dist/{vault-diff-FE5J35NJ.js.map → walk-3UQBRMDV.js.map} +0 -0
  441. /package/dist/{walk-3PA4ZOKS.js.map → withdraw-accessible-EL5GXZBS.js.map} +0 -0
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  envelopePayloadHash
3
- } from "./chunk-JRWLUWDM.js";
3
+ } from "./chunk-BOET4NA4.js";
4
4
  import {
5
5
  NOYDB_FORMAT_VERSION
6
- } from "./chunk-N4CHCXDL.js";
6
+ } from "./chunk-7MG7SJT7.js";
7
7
  import {
8
8
  DictKeyMissingError,
9
9
  PermissionDeniedError
10
- } from "./chunk-SW4TOSJL.js";
10
+ } from "./chunk-7O3Y4PPD.js";
11
11
 
12
12
  // src/via/lookup/handle.ts
13
13
  function isDeleteMarker(envelope) {
@@ -392,4 +392,4 @@ export {
392
392
  dictCollectionName,
393
393
  LookupHandle
394
394
  };
395
- //# sourceMappingURL=chunk-TQGT5BZE.js.map
395
+ //# sourceMappingURL=chunk-6I2RQCET.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  validateProjectionLegs
3
- } from "./chunk-75WNTBZL.js";
3
+ } from "./chunk-QIBVIOXO.js";
4
4
  import {
5
5
  MaterializedViewConfigError,
6
6
  ValidationError
7
- } from "./chunk-SW4TOSJL.js";
7
+ } from "./chunk-7O3Y4PPD.js";
8
8
 
9
9
  // src/with-formula/materialized-views/with-materialized-view.ts
10
10
  function withMaterializedView(spec) {
@@ -165,7 +165,9 @@ function withMaterializedView(spec) {
165
165
  );
166
166
  }
167
167
  if (typeof spec.rowKey !== "function") {
168
- throw new ValidationError("withMaterializedView: rowKey is required (no default; see spec \xA7 Type surface)");
168
+ throw new ValidationError(
169
+ spec.rowKey === void 0 ? "withMaterializedView: rowKey is required (no default; see spec \xA7 Type surface)" : `withMaterializedView: rowKey must be a FUNCTION (row) => string, not a ${typeof spec.rowKey} \u2014 it computes each output row's id from the grouped row, so a field NAME is not enough. Pass \`rowKey: (r) => String(r.${typeof spec.rowKey === "string" ? String(spec.rowKey) : "someField"})\`.`
170
+ );
169
171
  }
170
172
  if (spec.refresh !== "eager" && spec.refresh !== "lazy" && spec.refresh !== "manual") {
171
173
  throw new ValidationError(
@@ -181,4 +183,4 @@ function withMaterializedView(spec) {
181
183
  export {
182
184
  withMaterializedView
183
185
  };
184
- //# sourceMappingURL=chunk-UL7TLJ54.js.map
186
+ //# sourceMappingURL=chunk-6X6SEMEE.js.map
@@ -1 +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\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 an aggregate to\n // money-rewrite — it keys reducer outputs, so declaring it without\n // `aggregate` is a no-op config mistake.\n if (spec.moneyFields && !spec.aggregate) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": moneyFields requires aggregate — `\n + `moneyFields rewrites sum/min/max reducers over money output fields, `\n + `so it is meaningless without an aggregate spec`,\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 if (spec.unionSources.some(s => s.join && s.join.length > 0) && (!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 // 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) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": moneyFields requires aggregate — `\n + `moneyFields rewrites sum/min/max reducers over money output fields, `\n + `so it is meaningless without an aggregate spec`,\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 throw new ValidationError('withMaterializedView: rowKey is required (no default; see spec § Type surface)')\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
+ {"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\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 an aggregate to\n // money-rewrite — it keys reducer outputs, so declaring it without\n // `aggregate` is a no-op config mistake.\n if (spec.moneyFields && !spec.aggregate) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": moneyFields requires aggregate — `\n + `moneyFields rewrites sum/min/max reducers over money output fields, `\n + `so it is meaningless without an aggregate spec`,\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 if (spec.unionSources.some(s => s.join && s.join.length > 0) && (!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 // 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) {\n throw new MaterializedViewConfigError(\n `withMaterializedView \"${spec.name}\": moneyFields requires aggregate — `\n + `moneyFields rewrites sum/min/max reducers over money output fields, `\n + `so it is meaningless without an aggregate spec`,\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
  SealedRecordNotEnabledError
3
- } from "./chunk-SW4TOSJL.js";
3
+ } from "./chunk-7O3Y4PPD.js";
4
4
 
5
5
  // src/with-audit/sealed-record/strategy.ts
6
6
  var NO_SEALED_RECORD = {
@@ -18,4 +18,4 @@ var NO_SEALED_RECORD = {
18
18
  export {
19
19
  NO_SEALED_RECORD
20
20
  };
21
- //# sourceMappingURL=chunk-P7KJME6C.js.map
21
+ //# sourceMappingURL=chunk-6YXCPL4T.js.map
@@ -2,19 +2,19 @@ import {
2
2
  buildRecordEnvelope,
3
3
  isDeleteMarker,
4
4
  isTombstone
5
- } from "./chunk-4RUFYGWG.js";
5
+ } from "./chunk-SZJ3DLZA.js";
6
6
  import {
7
7
  blindedEqual,
8
8
  openVdigPayload,
9
9
  sealVdigPayload
10
- } from "./chunk-XGXVPCYW.js";
10
+ } from "./chunk-BOWNCWZT.js";
11
11
  import {
12
12
  dualReadSealedSlot,
13
13
  parseSealedSlot
14
- } from "./chunk-CWFH36SI.js";
14
+ } from "./chunk-YSRUYAVU.js";
15
15
  import {
16
16
  mintBidxTag
17
- } from "./chunk-KZTPL7NL.js";
17
+ } from "./chunk-RMF67KCG.js";
18
18
  import {
19
19
  VDIG_ITERATIONS,
20
20
  normalizeForVerify,
@@ -35,11 +35,11 @@ import {
35
35
  generateSalt,
36
36
  unwrapCek,
37
37
  wrapCek
38
- } from "./chunk-USKHHOIV.js";
38
+ } from "./chunk-SL3JAAKN.js";
39
39
  import {
40
40
  NOYDB_FORMAT_VERSION,
41
41
  SealedHandle
42
- } from "./chunk-N4CHCXDL.js";
42
+ } from "./chunk-7MG7SJT7.js";
43
43
  import {
44
44
  ClassifiedConfigError,
45
45
  ClassifiedRotationError,
@@ -48,7 +48,7 @@ import {
48
48
  SchemaValidationError,
49
49
  TamperedError,
50
50
  ValidationError
51
- } from "./chunk-SW4TOSJL.js";
51
+ } from "./chunk-7O3Y4PPD.js";
52
52
 
53
53
  // src/kernel/enclave/record-aad.ts
54
54
  var SCHEME = "noydb-aad/2";
@@ -1364,4 +1364,4 @@ export {
1364
1364
  issueChallenge,
1365
1365
  verifyBrokerProof
1366
1366
  };
1367
- //# sourceMappingURL=chunk-DOPZWTMJ.js.map
1367
+ //# sourceMappingURL=chunk-77K4PG6P.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  applyJoins,
3
3
  splitAroundJoins
4
- } from "./chunk-AW4KTQA4.js";
4
+ } from "./chunk-ZORTV6NH.js";
5
5
  import {
6
6
  NO_REDUCE
7
7
  } from "./chunk-YMUFFJCO.js";
@@ -19,7 +19,7 @@ import {
19
19
  DanglingReferenceError,
20
20
  FieldNotQueryableError,
21
21
  RefNotDeclaredError
22
- } from "./chunk-SW4TOSJL.js";
22
+ } from "./chunk-7O3Y4PPD.js";
23
23
 
24
24
  // src/kernel/query/live.ts
25
25
  function buildLiveQuery(recompute, upstreams) {
@@ -1613,4 +1613,4 @@ export {
1613
1613
  executePlan,
1614
1614
  ScanBuilder
1615
1615
  };
1616
- //# sourceMappingURL=chunk-LAI7ENPW.js.map
1616
+ //# sourceMappingURL=chunk-7MG2LHO5.js.map
@@ -31,4 +31,4 @@ export {
31
31
  SealedHandle,
32
32
  createStore
33
33
  };
34
- //# sourceMappingURL=chunk-N4CHCXDL.js.map
34
+ //# sourceMappingURL=chunk-7MG7SJT7.js.map