@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.
- package/CHANGELOG.md +105 -14
- package/LICENSE +202 -21
- package/NOTICE +1 -0
- package/README.md +27 -10
- package/codemods/0.8.0-pre.json +61 -0
- package/dist/api-GVYEKSJE.js +19 -0
- package/dist/as/index.js +11 -11
- package/dist/at/index.js +9 -9
- package/dist/attestation/index.js +20 -20
- package/dist/{backup-IJTB4S4M.js → backup-7TFRVFLH.js} +21 -15
- package/dist/backup-7TFRVFLH.js.map +1 -0
- package/dist/blobs/index.js +13 -13
- package/dist/broker/index.js +12 -12
- package/dist/by/index.js +2 -2
- package/dist/cargo/index.js +39 -36
- package/dist/{chunk-7O3Y4PPD.js → chunk-244VXYPG.js} +140 -16
- package/dist/chunk-244VXYPG.js.map +1 -0
- package/dist/{chunk-BUE2D7PX.js → chunk-32YV3TJT.js} +2 -2
- package/dist/{chunk-3RCJJBNR.js → chunk-3ELRMVJK.js} +12 -12
- package/dist/{chunk-6GMZ7HEE.js → chunk-3F7GLNAE.js} +6 -6
- package/dist/{chunk-2Y4IMKA6.js → chunk-3H5KLDZN.js} +4 -4
- package/dist/{chunk-VTFVLCUH.js → chunk-3JWHAR6E.js} +2 -2
- package/dist/{chunk-YMUFFJCO.js → chunk-3TDUWVWB.js} +5 -2
- package/dist/chunk-3TDUWVWB.js.map +1 -0
- package/dist/{chunk-JBDFMYKQ.js → chunk-4AF3TUMP.js} +2 -2
- package/dist/{chunk-ZORTV6NH.js → chunk-4I522ERM.js} +88 -4
- package/dist/chunk-4I522ERM.js.map +1 -0
- package/dist/{chunk-MUM7IANK.js → chunk-4MXI3ODD.js} +4 -4
- package/dist/chunk-4MXI3ODD.js.map +1 -0
- package/dist/{chunk-BLN54W3L.js → chunk-5FDLC6G7.js} +56 -3
- package/dist/chunk-5FDLC6G7.js.map +1 -0
- package/dist/chunk-5O7D6ZTW.js +53 -0
- package/dist/chunk-5O7D6ZTW.js.map +1 -0
- package/dist/{chunk-J6FXAEUG.js → chunk-6B3VNR4P.js} +12 -12
- package/dist/{chunk-TUFM4UZP.js → chunk-6K7DPM7D.js} +2 -2
- package/dist/{chunk-K6LHRFBL.js → chunk-6LMQ5R26.js} +7 -7
- package/dist/{chunk-SPXXX5E4.js → chunk-6LNL42F5.js} +94 -32
- package/dist/chunk-6LNL42F5.js.map +1 -0
- package/dist/{chunk-XLMEZIAJ.js → chunk-6OWXYZK2.js} +2 -2
- package/dist/{chunk-BOWNCWZT.js → chunk-6QSQQLSE.js} +3 -3
- package/dist/chunk-7JE7BDYJ.js +1558 -0
- package/dist/chunk-7JE7BDYJ.js.map +1 -0
- package/dist/{chunk-KG7TZKZG.js → chunk-7VCXZDA4.js} +5 -5
- package/dist/chunk-7VCXZDA4.js.map +1 -0
- package/dist/{chunk-NQKIUNW5.js → chunk-A6IJU4TK.js} +2 -2
- package/dist/{chunk-BM5TWITZ.js → chunk-ANWPSTZU.js} +38 -9
- package/dist/chunk-ANWPSTZU.js.map +1 -0
- package/dist/{chunk-QIZPZMUI.js → chunk-AOWGXU6D.js} +2 -2
- package/dist/{chunk-CUZLNGD5.js → chunk-B2YY6WDD.js} +1 -1
- package/dist/chunk-B2YY6WDD.js.map +1 -0
- package/dist/{chunk-SFAWCTEM.js → chunk-B57AFBY2.js} +2 -2
- package/dist/{chunk-GPEQUXHL.js → chunk-B6SJIBQK.js} +4 -4
- package/dist/chunk-BJ2IXQ5Q.js +100 -0
- package/dist/chunk-BJ2IXQ5Q.js.map +1 -0
- package/dist/{chunk-Q2PU57HC.js → chunk-BK2HHQGN.js} +2 -2
- package/dist/chunk-BKT776R5.js +1 -0
- package/dist/{chunk-KUX3OB6D.js → chunk-BP6DARYA.js} +33 -5
- package/dist/chunk-BP6DARYA.js.map +1 -0
- package/dist/{chunk-FXBIP2WD.js → chunk-BUDAGWL5.js} +6 -6
- package/dist/chunk-CF5UU4S7.js +757 -0
- package/dist/chunk-CF5UU4S7.js.map +1 -0
- package/dist/{chunk-BOET4NA4.js → chunk-CKNGS5MH.js} +3 -3
- package/dist/chunk-CY2CYVWZ.js +41 -0
- package/dist/chunk-CY2CYVWZ.js.map +1 -0
- package/dist/{chunk-2577DKXB.js → chunk-DC5QVPV7.js} +2 -2
- package/dist/chunk-DC5QVPV7.js.map +1 -0
- package/dist/{chunk-YSRUYAVU.js → chunk-DE4DH2RZ.js} +2 -2
- package/dist/{chunk-6I2RQCET.js → chunk-DF73H4UN.js} +4 -4
- package/dist/{chunk-4GVM6QZA.js → chunk-ENAG3IY7.js} +2 -2
- package/dist/chunk-ENAG3IY7.js.map +1 -0
- package/dist/{chunk-K7NTTA6P.js → chunk-EOVMT6TB.js} +2 -2
- package/dist/chunk-F24ZZTHQ.js +193 -0
- package/dist/chunk-F24ZZTHQ.js.map +1 -0
- package/dist/chunk-F2TDU7MQ.js +456 -0
- package/dist/chunk-F2TDU7MQ.js.map +1 -0
- package/dist/chunk-F6NCB7KT.js +13 -0
- package/dist/chunk-F6NCB7KT.js.map +1 -0
- package/dist/{chunk-SPYWXKJN.js → chunk-F7XGHL5O.js} +3 -3
- package/dist/chunk-F7XGHL5O.js.map +1 -0
- package/dist/{chunk-XTXOCYOJ.js → chunk-FCKWQE2H.js} +5 -5
- package/dist/{chunk-U4FOQDY4.js → chunk-FH2L2E34.js} +4 -4
- package/dist/chunk-FH2L2E34.js.map +1 -0
- package/dist/{chunk-4OZNXTO4.js → chunk-FN5EBVTQ.js} +2 -2
- package/dist/chunk-FQ54DWUQ.js +270 -0
- package/dist/chunk-FQ54DWUQ.js.map +1 -0
- package/dist/{chunk-NKHRDYOR.js → chunk-FQ5VRHIB.js} +4 -4
- package/dist/{chunk-FAHMLERK.js → chunk-FW22ZCXT.js} +2 -2
- package/dist/chunk-FXQBGFOX.js +524 -0
- package/dist/chunk-FXQBGFOX.js.map +1 -0
- package/dist/{chunk-AO42KJO6.js → chunk-GF5BZ7D4.js} +45 -9
- package/dist/chunk-GF5BZ7D4.js.map +1 -0
- package/dist/{chunk-TRGTKX5E.js → chunk-GHLTDZRS.js} +5 -3
- package/dist/{chunk-TRGTKX5E.js.map → chunk-GHLTDZRS.js.map} +1 -1
- package/dist/{chunk-5WDXHNSW.js → chunk-HBPPGWUM.js} +5 -5
- package/dist/chunk-HBPPGWUM.js.map +1 -0
- package/dist/{chunk-KTFRCC5C.js → chunk-HBRLNOHL.js} +82 -8
- package/dist/chunk-HBRLNOHL.js.map +1 -0
- package/dist/chunk-HLEK5VAN.js +275 -0
- package/dist/chunk-HLEK5VAN.js.map +1 -0
- package/dist/{chunk-RMS3NEA3.js → chunk-HT2AHGQI.js} +2 -2
- package/dist/{chunk-CHJBLCOG.js → chunk-HVSCEIYL.js} +7 -7
- package/dist/{chunk-UXWB3FPF.js → chunk-I3JDRCMW.js} +150 -22
- package/dist/chunk-I3JDRCMW.js.map +1 -0
- package/dist/{chunk-GY4WYNNG.js → chunk-ID6Z6E66.js} +2 -2
- package/dist/{chunk-EYBQEIUY.js → chunk-IEX7NK2K.js} +3 -3
- package/dist/{chunk-KUJDV5QH.js → chunk-ISZQJBML.js} +5 -5
- package/dist/{chunk-LWBCUYZW.js → chunk-IT22PWKV.js} +2 -2
- package/dist/{chunk-EQEYOJBM.js → chunk-IUWCVHQ7.js} +3 -3
- package/dist/chunk-IUWCVHQ7.js.map +1 -0
- package/dist/{chunk-7V4TP3AF.js → chunk-J6UOHJY5.js} +4 -4
- package/dist/{chunk-JMGDHKQF.js → chunk-JCN44NCY.js} +2 -2
- package/dist/{chunk-CARABLSQ.js → chunk-K6W7BVZ6.js} +3 -3
- package/dist/{chunk-77K4PG6P.js → chunk-KJFW62P4.js} +29 -11
- package/dist/chunk-KJFW62P4.js.map +1 -0
- package/dist/{chunk-453F654R.js → chunk-L7DOS3TE.js} +2 -2
- package/dist/chunk-LGNDFRYC.js +23 -0
- package/dist/chunk-LGNDFRYC.js.map +1 -0
- package/dist/{chunk-WEQEYLCS.js → chunk-LGRLME4M.js} +7 -7
- package/dist/{chunk-RMF67KCG.js → chunk-LQ4ZHOKP.js} +2 -2
- package/dist/{chunk-ZVO4QVPD.js → chunk-M522UYZ2.js} +5 -5
- package/dist/{chunk-G56KBWFY.js → chunk-M7NI3IWE.js} +45 -12
- package/dist/chunk-M7NI3IWE.js.map +1 -0
- package/dist/chunk-MDWKM2XC.js +293 -0
- package/dist/chunk-MDWKM2XC.js.map +1 -0
- package/dist/chunk-MKXXMNJH.js +204 -0
- package/dist/chunk-MKXXMNJH.js.map +1 -0
- package/dist/{chunk-SKGMN35F.js → chunk-MLPHLJIQ.js} +3 -3
- package/dist/chunk-MLPHLJIQ.js.map +1 -0
- package/dist/{chunk-2N4GY74U.js → chunk-MTL7MXGR.js} +6 -6
- package/dist/{chunk-TFR7DSOV.js → chunk-MVZ2TPVP.js} +2 -2
- package/dist/{chunk-CPWQB3N5.js → chunk-N5DNADLQ.js} +7 -7
- package/dist/{chunk-ELNXJMGB.js → chunk-NNARWO72.js} +6 -6
- package/dist/{chunk-PT43Y56J.js → chunk-NRT6QZQB.js} +102 -16
- package/dist/chunk-NRT6QZQB.js.map +1 -0
- package/dist/{chunk-QIBVIOXO.js → chunk-NWHBJQAL.js} +99 -8
- package/dist/chunk-NWHBJQAL.js.map +1 -0
- package/dist/chunk-NYMLINRP.js +28 -0
- package/dist/chunk-NYMLINRP.js.map +1 -0
- package/dist/{chunk-7MG7SJT7.js → chunk-ODVPTDPK.js} +1 -1
- package/dist/chunk-ODVPTDPK.js.map +1 -0
- package/dist/chunk-ORDURZBU.js +461 -0
- package/dist/chunk-ORDURZBU.js.map +1 -0
- package/dist/{chunk-6YXCPL4T.js → chunk-PDCG6PR5.js} +2 -2
- package/dist/{chunk-REDOOY2Q.js → chunk-PSIV7CJV.js} +2 -2
- package/dist/{chunk-NA2NIJZI.js → chunk-QBBUZ3I3.js} +126 -19
- package/dist/chunk-QBBUZ3I3.js.map +1 -0
- package/dist/{chunk-5VCRVKOZ.js → chunk-QOOUUR4A.js} +6 -4
- package/dist/{chunk-5VCRVKOZ.js.map → chunk-QOOUUR4A.js.map} +1 -1
- package/dist/{chunk-ANATMFIO.js → chunk-QWFHIOD2.js} +5 -5
- package/dist/{chunk-X2DLENDQ.js → chunk-QWGU66MP.js} +3 -3
- package/dist/chunk-RHVMZSUU.js +7 -0
- package/dist/chunk-RHVMZSUU.js.map +1 -0
- package/dist/{chunk-BSFNRLK2.js → chunk-S57HTZ6X.js} +5 -5
- package/dist/{chunk-SZJ3DLZA.js → chunk-SEE332EV.js} +2 -2
- package/dist/{chunk-YYP7WSEB.js → chunk-SI3V7D4G.js} +2 -2
- package/dist/{chunk-UGTBXF5U.js → chunk-SOIQ4MM4.js} +3 -3
- package/dist/chunk-SUZKW6UR.js +25 -0
- package/dist/chunk-SUZKW6UR.js.map +1 -0
- package/dist/{chunk-VXGSWL6L.js → chunk-SYVZW77S.js} +6 -6
- package/dist/{chunk-6GOE5PGN.js → chunk-T2LBQ5DV.js} +883 -227
- package/dist/chunk-T2LBQ5DV.js.map +1 -0
- package/dist/chunk-T52GX4SA.js +215 -0
- package/dist/chunk-T52GX4SA.js.map +1 -0
- package/dist/{chunk-MVMXZYXT.js → chunk-TKUOEU2F.js} +2 -2
- package/dist/chunk-TOPYQ6GA.js +31 -0
- package/dist/chunk-TOPYQ6GA.js.map +1 -0
- package/dist/{chunk-SMH6SRX7.js → chunk-TROR3ALR.js} +2 -2
- package/dist/{chunk-2C3AQB46.js → chunk-UD5EVGZ7.js} +42 -389
- package/dist/chunk-UD5EVGZ7.js.map +1 -0
- package/dist/{chunk-KJIMGIWO.js → chunk-UPD5NWI5.js} +65 -17
- package/dist/chunk-UPD5NWI5.js.map +1 -0
- package/dist/{chunk-SL3JAAKN.js → chunk-UYB234ZR.js} +30 -2
- package/dist/chunk-UYB234ZR.js.map +1 -0
- package/dist/chunk-VHM7HCKB.js +220 -0
- package/dist/chunk-VHM7HCKB.js.map +1 -0
- package/dist/{chunk-DGOZ4UZD.js → chunk-VNNRUGMM.js} +2 -2
- package/dist/{chunk-HDOU6I2Y.js → chunk-VNPEWFPD.js} +4 -4
- package/dist/{chunk-L7CIOOBW.js → chunk-WNJ4AVGE.js} +2 -2
- package/dist/{chunk-FMZY5Q6L.js → chunk-WX5ADGTZ.js} +3 -3
- package/dist/{chunk-VXANTWBJ.js → chunk-WY2XXTET.js} +92 -6
- package/dist/{chunk-VXANTWBJ.js.map → chunk-WY2XXTET.js.map} +1 -1
- package/dist/{chunk-6X6SEMEE.js → chunk-X25NWUZB.js} +33 -8
- package/dist/chunk-X25NWUZB.js.map +1 -0
- package/dist/{chunk-Q7HZX3IF.js → chunk-X4773RBR.js} +2 -2
- package/dist/chunk-XBKH4FOC.js +195 -0
- package/dist/chunk-XBKH4FOC.js.map +1 -0
- package/dist/{chunk-ANSIZYEG.js → chunk-YNIUIERI.js} +3 -3
- package/dist/chunk-YSK2CU2Q.js +936 -0
- package/dist/chunk-YSK2CU2Q.js.map +1 -0
- package/dist/{chunk-UXVWEX5L.js → chunk-Z5HTYMMQ.js} +6 -2
- package/dist/chunk-Z5HTYMMQ.js.map +1 -0
- package/dist/{chunk-RRNRNANG.js → chunk-ZE4CHIED.js} +66 -75
- package/dist/chunk-ZE4CHIED.js.map +1 -0
- package/dist/chunk-ZSX4S5XB.js +1289 -0
- package/dist/chunk-ZSX4S5XB.js.map +1 -0
- package/dist/{chunk-BZ3534YM.js → chunk-ZUVBC32X.js} +2 -2
- package/dist/{chunk-L742JPKZ.js → chunk-ZXABPVM6.js} +6 -6
- package/dist/classified/index.js +5 -5
- package/dist/{classified-marker-LI2SF2E4.js → classified-marker-W3USLL5M.js} +3 -3
- package/dist/collection-facade-QU6IJBN3.js +48 -0
- package/dist/{computed-VPOKQK4N.js → computed-TPFBX7U4.js} +3 -3
- package/dist/consent/index.js +9 -9
- package/dist/cover/index.js +10 -10
- package/dist/coverage/index.js +306 -0
- package/dist/coverage/index.js.map +1 -0
- package/dist/custody/index.js +12 -12
- package/dist/{dead-filter-TSWZQRR5.js → dead-filter-U2UYKSZL.js} +2 -2
- package/dist/debug/index.js +1 -1
- package/dist/{delegation-OVIFFPG4.js → delegation-S3AEPW2T.js} +11 -11
- package/dist/derivations/index.js +25 -22
- package/dist/derive-OX7F6TGG.js +21 -0
- package/dist/directory/index.js +10 -10
- package/dist/{dispatch-WC6X2M6C.js → dispatch-3CQDJV5Q.js} +5 -5
- package/dist/{dispatch-S73TK3IY.js → dispatch-RH4LHKBH.js} +21 -21
- package/dist/{enclave-KJOTOH7X.js → enclave-27SMF6GF.js} +15 -9
- package/dist/executor-B6SRO2QS.js +36 -0
- package/dist/executor-BI5CHWRY.js +8 -0
- package/dist/executor-RBKM5W5K.js +8 -0
- package/dist/export-accessible-VMA3YM5V.js +22 -0
- package/dist/extract-partition-NF7PXGPP.js +37 -0
- package/dist/{fanout-sidecar-WUFXNYP4.js → fanout-sidecar-OT6RYLOL.js} +9 -9
- package/dist/find-LZMP26KF.js +10 -0
- package/dist/forget/index.js +9 -9
- package/dist/guards/index.js +4 -4
- package/dist/history/index.js +13 -13
- package/dist/i18n/index.js +14 -14
- package/dist/index.d.ts +29 -6
- package/dist/index.js +999 -191
- package/dist/index.js.map +1 -1
- package/dist/indexing/index.js +13 -5
- package/dist/indexing/index.js.map +1 -1
- package/dist/introspection/index.js +11 -11
- package/dist/issue-IHARXWW5.js +18 -0
- package/dist/ivf-flat-UZ6DQDLS.js +314 -0
- package/dist/ivf-flat-UZ6DQDLS.js.map +1 -0
- package/dist/{json-schema-V3M5MUCM.js → json-schema-3SHX72CC.js} +2 -1
- package/dist/json-schema-3SHX72CC.js.map +1 -0
- package/dist/kernel/collection-config.d.ts +4 -20
- package/dist/kernel/collection.d.ts +29 -8
- package/dist/kernel/enclave/crypto.d.ts +16 -0
- package/dist/kernel/enclave/index.d.ts +1 -1
- package/dist/kernel/enclave/record-keys/record-codec.d.ts +25 -0
- package/dist/kernel/errors.d.ts +227 -36
- package/dist/kernel/generation-map.d.ts +48 -0
- package/dist/kernel/memory-store.d.ts +35 -7
- package/dist/kernel/noydb.d.ts +6 -1
- package/dist/kernel/present-cache.d.ts +58 -0
- package/dist/kernel/query/all.d.ts +7 -0
- package/dist/kernel/query/builder.d.ts +601 -270
- package/dist/kernel/query/civil-date.d.ts +64 -0
- package/dist/kernel/query/cursor.d.ts +40 -0
- package/dist/kernel/query/distinct-key.d.ts +98 -0
- package/dist/kernel/query/hydration.d.ts +76 -0
- package/dist/kernel/query/index.d.ts +31 -15
- package/dist/kernel/query/internal/core.d.ts +30 -0
- package/dist/kernel/query/internal/hooks.d.ts +22 -0
- package/dist/kernel/query/internal/maintenance.d.ts +43 -0
- package/dist/kernel/query/live/incremental.d.ts +314 -0
- package/dist/kernel/query/live/index.d.ts +22 -0
- package/dist/kernel/query/live/install.d.ts +2 -0
- package/dist/kernel/query/{live.d.ts → live/live.d.ts} +39 -9
- package/dist/kernel/query/live/methods.d.ts +107 -0
- package/dist/kernel/query/predicate.d.ts +119 -1
- package/dist/kernel/query/reduce/date-trunc.d.ts +75 -0
- package/dist/kernel/query/reduce/index.d.ts +36 -0
- package/dist/kernel/query/reduce/install.d.ts +2 -0
- package/dist/kernel/query/reduce/methods.d.ts +259 -0
- package/dist/kernel/query/reduce/scan-methods.d.ts +121 -0
- package/dist/kernel/query/relate/explain.d.ts +199 -0
- package/dist/kernel/query/relate/index.d.ts +48 -0
- package/dist/kernel/query/relate/install.d.ts +2 -0
- package/dist/kernel/query/relate/join-on.d.ts +126 -0
- package/dist/kernel/query/relate/join-reduce.d.ts +16 -0
- package/dist/kernel/query/relate/join.d.ts +452 -0
- package/dist/kernel/query/relate/methods.d.ts +426 -0
- package/dist/kernel/query/relate/partition.d.ts +87 -0
- package/dist/kernel/query/relate/scan-methods.d.ts +163 -0
- package/dist/kernel/query/relate/traverse.d.ts +109 -0
- package/dist/kernel/query/scan-builder.d.ts +79 -176
- package/dist/kernel/query/sort-key.d.ts +52 -0
- package/dist/kernel/tx-write-gate.d.ts +77 -0
- package/dist/kernel/types.d.ts +71 -3
- package/dist/kernel/validation.d.ts +27 -10
- package/dist/kernel/vault.d.ts +9 -4
- package/dist/kernel/via/compose.d.ts +3 -0
- package/dist/kernel/via/index.d.ts +56 -0
- package/dist/kernel/via/pipeline.d.ts +48 -0
- package/dist/{ledger-F33ZVMTK.js → ledger-KZPCMVZY.js} +11 -11
- package/dist/liberate-GRLCZMW4.js +24 -0
- package/dist/link-set-JCMJ7ULP.js +30 -0
- package/dist/{managed-secret-PQYKSR6T.js → managed-secret-S3MQ6SH6.js} +10 -10
- package/dist/materialized-views/index.js +30 -23
- package/dist/{migrate-cek-5ENH64AA.js → migrate-cek-V7GKJZ7O.js} +2 -2
- package/dist/money/index.js +5 -5
- package/dist/noydb-SWQJ3MZS.js +97 -0
- package/dist/overlay-views/index.js +4 -4
- package/dist/periods/index.js +12 -12
- package/dist/pod/index.js +75 -68
- package/dist/{pod-handle-Q736KYON.js → pod-handle-WGDFB4C2.js} +9 -9
- package/dist/policy/index.js +10 -10
- package/dist/port/with/blob-strategy.d.ts +9 -0
- package/dist/port/with/collection-options.d.ts +5 -0
- package/dist/port/with/coverage-strategy.d.ts +83 -0
- package/dist/port/with/service-bus.d.ts +46 -0
- package/dist/port/with/strategies.d.ts +2 -0
- package/dist/portability/index.js +8 -8
- package/dist/{post-register-LNE2FE2A.js → post-register-SLSXIPBV.js} +6 -6
- package/dist/query/all/index.js +31 -0
- package/dist/query/index.js +20 -32
- package/dist/query/live/index.js +21 -0
- package/dist/query/live/index.js.map +1 -0
- package/dist/query/reduce/index.js +33 -0
- package/dist/query/reduce/index.js.map +1 -0
- package/dist/query/relate/index.js +56 -0
- package/dist/query/relate/index.js.map +1 -0
- package/dist/reduce/index.js +72 -18
- package/dist/reduce/index.js.map +1 -1
- package/dist/register-F3OYE7MJ.js +31 -0
- package/dist/registry-CILQFXFK.js +8 -0
- package/dist/registry-XNNYQVKV.js +8 -0
- package/dist/registry-YCDZV3VW.js +35 -0
- package/dist/registry-ZGYS33TE.js +24 -0
- package/dist/request-withdrawal-Z5NC6TXT.js +30 -0
- package/dist/{reveal-67RDQRIN.js → reveal-4BCKPEC2.js} +6 -6
- package/dist/revoke-ZL62WC2D.js +23 -0
- package/dist/satellites/index.js +1 -1
- package/dist/schema-update/index.js +2 -2
- package/dist/sealed-record/index.js +12 -12
- package/dist/search/index.js +11 -5
- package/dist/{seed-G42JYN56.js → seed-4JS2RJ4A.js} +12 -12
- package/dist/sequence/index.js +9 -9
- package/dist/session/index.js +9 -9
- package/dist/shadow/index.js +2 -2
- package/dist/signer-MBZZMXTC.js +24 -0
- package/dist/snapshots/index.js +10 -10
- package/dist/{stale-DDL7WQEZ.js → stale-TJ3DYZMQ.js} +10 -10
- package/dist/storage-SVMKRGCW.js +22 -0
- package/dist/{store-coordination-provider-MEQ2MJQG.js → store-coordination-provider-2O2VUHKW.js} +10 -10
- package/dist/sync/index.js +10 -10
- package/dist/team/index.js +17 -15
- package/dist/tiers/index.js +13 -11
- package/dist/to/index.js +2 -2
- package/dist/transactions/index.js +3 -3
- package/dist/util/index.js +1 -1
- package/dist/vault-head/index.js +8 -8
- package/dist/{verify-KOV2G5D6.js → verify-RVT67IMH.js} +5 -5
- package/dist/via/blob/index.d.ts +1 -0
- package/dist/via/geo/binding.d.ts +31 -0
- package/dist/via/geo/descriptor.d.ts +54 -0
- package/dist/via/geo/geohash.d.ts +95 -0
- package/dist/via/geo/index.d.ts +13 -0
- package/dist/via/geo/where.d.ts +50 -0
- package/dist/via/i18n/core.d.ts +1 -1
- package/dist/via/lookup/registry.d.ts +1 -1
- package/dist/via/lookup/snapshot.d.ts +3 -3
- package/dist/walk-HJ42EISE.js +21 -0
- package/dist/walk-HJ42EISE.js.map +1 -0
- package/dist/with-audit/coverage/accounting.d.ts +112 -0
- package/dist/with-audit/coverage/active.d.ts +29 -0
- package/dist/with-audit/coverage/index.d.ts +61 -0
- package/dist/with-audit/coverage/sketch.d.ts +75 -0
- package/dist/with-audit/periods/periods.d.ts +55 -7
- package/dist/with-audit/periods/reserved-collections.d.ts +3 -0
- package/dist/with-audit/periods/vault-facade.d.ts +17 -0
- package/dist/with-audit/tiers/index.d.ts +51 -0
- package/dist/with-audit/tiers/strategy.d.ts +8 -0
- package/dist/with-cargo/floor.d.ts +2 -2
- package/dist/with-commit/tx/invariants.d.ts +1 -1
- package/dist/with-commit/tx/transaction.d.ts +13 -3
- package/dist/with-formula/materialized-views/dependency-analyzer.d.ts +4 -3
- package/dist/with-formula/materialized-views/emit-memo.d.ts +40 -0
- package/dist/with-formula/materialized-views/executor.d.ts +8 -0
- package/dist/with-formula/materialized-views/index.d.ts +1 -1
- package/dist/with-formula/materialized-views/registry.d.ts +15 -0
- package/dist/with-formula/materialized-views/types.d.ts +106 -14
- package/dist/with-formula/materialized-views/window-stage.d.ts +11 -0
- package/dist/with-formula/overlay-views/types.d.ts +1 -1
- package/dist/with-formula/overlay-views/virtual-collection.d.ts +13 -4
- package/dist/with-lookup/embeddings/chunks.d.ts +79 -0
- package/dist/with-lookup/embeddings/descriptor.d.ts +21 -0
- package/dist/with-lookup/embeddings/index.d.ts +3 -0
- package/dist/with-lookup/embeddings/ivf-flat.d.ts +93 -0
- package/dist/with-lookup/embeddings/vector-index.d.ts +73 -0
- package/dist/with-lookup/embeddings/vector-set.d.ts +94 -1
- package/dist/with-lookup/embeddings/with-vector-index.d.ts +67 -0
- package/dist/with-lookup/indexing/collection-facade.d.ts +85 -2
- package/dist/with-lookup/indexing/compound-indexes.d.ts +129 -0
- package/dist/with-lookup/indexing/eager-indexes.d.ts +170 -1
- package/dist/with-lookup/indexing/index-snapshot.d.ts +62 -0
- package/dist/with-lookup/indexing/lazy-builder.d.ts +33 -0
- package/dist/with-lookup/indexing/persisted-field-indexes.d.ts +104 -0
- package/dist/with-lookup/indexing/persisted-indexes.d.ts +12 -0
- package/dist/with-lookup/indexing/sorted-indexes.d.ts +117 -0
- package/dist/with-lookup/indexing/unique-constraints.d.ts +106 -23
- package/dist/with-lookup/reduce/active.d.ts +2 -24
- package/dist/with-lookup/reduce/group-core.d.ts +43 -0
- package/dist/with-lookup/reduce/groupby.d.ts +195 -36
- package/dist/with-lookup/reduce/incremental-group.d.ts +153 -0
- package/dist/with-lookup/reduce/index.d.ts +26 -5
- package/dist/with-lookup/reduce/reducers.d.ts +255 -1
- package/dist/with-lookup/reduce/reduction.d.ts +44 -13
- package/dist/with-lookup/reduce/strategy.d.ts +43 -3
- package/dist/with-lookup/reduce/window.d.ts +262 -0
- package/dist/with-lookup/search/collection-facade.d.ts +44 -8
- package/dist/with-lookup/search/index-store.d.ts +5 -3
- package/dist/with-lookup/search/index.d.ts +4 -2
- package/dist/with-lookup/search/inverted-index.d.ts +38 -2
- package/dist/with-lookup/search/persisted-index-store.d.ts +5 -2
- package/dist/with-lookup/search/phrase.d.ts +28 -0
- package/dist/with-lookup/search/retrieve-types.d.ts +57 -1
- package/dist/with-lookup/search/serialize.d.ts +29 -3
- package/dist/with-lookup/search/strategy.d.ts +2 -6
- package/dist/with-party/directory/cover/index.d.ts +1 -1
- package/dist/with-party/directory/cover/storage.d.ts +1 -1
- package/dist/with-party/directory/cover/types.d.ts +1 -1
- package/dist/with-party/directory/index.d.ts +1 -1
- package/dist/with-party/directory/types.d.ts +1 -1
- package/dist/with-party/directory/user-envelope/api.d.ts +1 -1
- package/dist/with-party/policy/engine.d.ts +1 -1
- package/dist/with-party/policy/index.d.ts +1 -1
- package/dist/with-party/policy/presets.d.ts +1 -1
- package/dist/with-party/team/authenticators.d.ts +91 -1
- package/dist/with-party/team/index.d.ts +3 -2
- package/dist/with-party/team/keyring.d.ts +13 -6
- package/dist/with-party/team/managed-secret.d.ts +1 -1
- package/dist/with-party/team/noydb-facade.d.ts +12 -3
- package/dist/with-party/team/wrapped-deks.d.ts +4 -4
- package/dist/with-pod/format.d.ts +1 -1
- package/dist/with-pod/pod.d.ts +5 -5
- package/dist/with-shape/blobs/blob-compaction.d.ts +16 -0
- package/dist/with-shape/blobs/blob-set.d.ts +21 -2
- package/dist/with-shape/blobs/legacy-sweep.d.ts +35 -0
- package/dist/with-shape/introspection/describe.d.ts +6 -0
- package/dist/with-shape/introspection/field-meta.d.ts +18 -0
- package/dist/with-shape/introspection/types.d.ts +57 -1
- package/dist/with-shape/links/vault-facade.d.ts +1 -1
- package/dist/with-store/partitioned/index.d.ts +337 -0
- package/dist/with-sync/change-broadcast.d.ts +153 -0
- package/dist/withdraw-accessible-5NZUPAVA.js +27 -0
- package/dist/withdraw-accessible-5NZUPAVA.js.map +1 -0
- package/package.json +37 -10
- package/dist/api-TXFOVOXX.js +0 -19
- package/dist/backup-IJTB4S4M.js.map +0 -1
- package/dist/chunk-2577DKXB.js.map +0 -1
- package/dist/chunk-2C3AQB46.js.map +0 -1
- package/dist/chunk-4GVM6QZA.js.map +0 -1
- package/dist/chunk-5WDXHNSW.js.map +0 -1
- package/dist/chunk-6GOE5PGN.js.map +0 -1
- package/dist/chunk-6X6SEMEE.js.map +0 -1
- package/dist/chunk-77K4PG6P.js.map +0 -1
- package/dist/chunk-7MG2LHO5.js +0 -1616
- package/dist/chunk-7MG2LHO5.js.map +0 -1
- package/dist/chunk-7MG7SJT7.js.map +0 -1
- package/dist/chunk-7O3Y4PPD.js.map +0 -1
- package/dist/chunk-AO42KJO6.js.map +0 -1
- package/dist/chunk-ATL3ZVXT.js +0 -151
- package/dist/chunk-ATL3ZVXT.js.map +0 -1
- package/dist/chunk-BLN54W3L.js.map +0 -1
- package/dist/chunk-BM5TWITZ.js.map +0 -1
- package/dist/chunk-CUZLNGD5.js.map +0 -1
- package/dist/chunk-EQEYOJBM.js.map +0 -1
- package/dist/chunk-G56KBWFY.js.map +0 -1
- package/dist/chunk-I3ISCYT7.js +0 -159
- package/dist/chunk-I3ISCYT7.js.map +0 -1
- package/dist/chunk-KG7TZKZG.js.map +0 -1
- package/dist/chunk-KJIMGIWO.js.map +0 -1
- package/dist/chunk-KTFRCC5C.js.map +0 -1
- package/dist/chunk-KUX3OB6D.js.map +0 -1
- package/dist/chunk-MUM7IANK.js.map +0 -1
- package/dist/chunk-NA2NIJZI.js.map +0 -1
- package/dist/chunk-NSITFOCJ.js +0 -99
- package/dist/chunk-NSITFOCJ.js.map +0 -1
- package/dist/chunk-PT43Y56J.js.map +0 -1
- package/dist/chunk-QIBVIOXO.js.map +0 -1
- package/dist/chunk-RRNRNANG.js.map +0 -1
- package/dist/chunk-RTBJ5IOO.js +0 -87
- package/dist/chunk-RTBJ5IOO.js.map +0 -1
- package/dist/chunk-SKGMN35F.js.map +0 -1
- package/dist/chunk-SL3JAAKN.js.map +0 -1
- package/dist/chunk-SPXXX5E4.js.map +0 -1
- package/dist/chunk-SPYWXKJN.js.map +0 -1
- package/dist/chunk-U4FOQDY4.js.map +0 -1
- package/dist/chunk-UXVWEX5L.js.map +0 -1
- package/dist/chunk-UXWB3FPF.js.map +0 -1
- package/dist/chunk-YMUFFJCO.js.map +0 -1
- package/dist/chunk-ZN4FD4PE.js +0 -364
- package/dist/chunk-ZN4FD4PE.js.map +0 -1
- package/dist/chunk-ZORTV6NH.js.map +0 -1
- package/dist/collection-facade-4GRREZ6C.js +0 -45
- package/dist/derive-6O5SWQKN.js +0 -21
- package/dist/executor-5NIMLSKZ.js +0 -8
- package/dist/executor-AQVXV5GZ.js +0 -8
- package/dist/executor-PUAO6AKJ.js +0 -29
- package/dist/export-accessible-72EQNBMR.js +0 -22
- package/dist/extract-partition-PUYNU3UF.js +0 -37
- package/dist/find-2ABFCZX4.js +0 -10
- package/dist/issue-SIDORTSZ.js +0 -18
- package/dist/json-schema-V3M5MUCM.js.map +0 -1
- package/dist/kernel/query/join.d.ts +0 -232
- package/dist/liberate-LCDPNAG2.js +0 -24
- package/dist/link-set-FKNWAYKS.js +0 -30
- package/dist/noydb-DUXZPKSN.js +0 -90
- package/dist/register-I2DZXGAR.js +0 -31
- package/dist/registry-23WF3TGH.js +0 -8
- package/dist/registry-4AYVUNXK.js +0 -8
- package/dist/registry-VSSQPIGF.js +0 -18
- package/dist/registry-YLEWMGAC.js +0 -32
- package/dist/request-withdrawal-KFQHEZ25.js +0 -30
- package/dist/revoke-DQDZAZZM.js +0 -23
- package/dist/signer-WAMDZHEN.js +0 -24
- package/dist/storage-FLR73HHF.js +0 -22
- package/dist/walk-3UQBRMDV.js +0 -21
- package/dist/withdraw-accessible-EL5GXZBS.js +0 -27
- /package/dist/{api-TXFOVOXX.js.map → api-GVYEKSJE.js.map} +0 -0
- /package/dist/{chunk-BUE2D7PX.js.map → chunk-32YV3TJT.js.map} +0 -0
- /package/dist/{chunk-3RCJJBNR.js.map → chunk-3ELRMVJK.js.map} +0 -0
- /package/dist/{chunk-6GMZ7HEE.js.map → chunk-3F7GLNAE.js.map} +0 -0
- /package/dist/{chunk-2Y4IMKA6.js.map → chunk-3H5KLDZN.js.map} +0 -0
- /package/dist/{chunk-VTFVLCUH.js.map → chunk-3JWHAR6E.js.map} +0 -0
- /package/dist/{chunk-JBDFMYKQ.js.map → chunk-4AF3TUMP.js.map} +0 -0
- /package/dist/{chunk-J6FXAEUG.js.map → chunk-6B3VNR4P.js.map} +0 -0
- /package/dist/{chunk-TUFM4UZP.js.map → chunk-6K7DPM7D.js.map} +0 -0
- /package/dist/{chunk-K6LHRFBL.js.map → chunk-6LMQ5R26.js.map} +0 -0
- /package/dist/{chunk-XLMEZIAJ.js.map → chunk-6OWXYZK2.js.map} +0 -0
- /package/dist/{chunk-BOWNCWZT.js.map → chunk-6QSQQLSE.js.map} +0 -0
- /package/dist/{chunk-NQKIUNW5.js.map → chunk-A6IJU4TK.js.map} +0 -0
- /package/dist/{chunk-QIZPZMUI.js.map → chunk-AOWGXU6D.js.map} +0 -0
- /package/dist/{chunk-SFAWCTEM.js.map → chunk-B57AFBY2.js.map} +0 -0
- /package/dist/{chunk-GPEQUXHL.js.map → chunk-B6SJIBQK.js.map} +0 -0
- /package/dist/{chunk-Q2PU57HC.js.map → chunk-BK2HHQGN.js.map} +0 -0
- /package/dist/{collection-facade-4GRREZ6C.js.map → chunk-BKT776R5.js.map} +0 -0
- /package/dist/{chunk-FXBIP2WD.js.map → chunk-BUDAGWL5.js.map} +0 -0
- /package/dist/{chunk-BOET4NA4.js.map → chunk-CKNGS5MH.js.map} +0 -0
- /package/dist/{chunk-YSRUYAVU.js.map → chunk-DE4DH2RZ.js.map} +0 -0
- /package/dist/{chunk-6I2RQCET.js.map → chunk-DF73H4UN.js.map} +0 -0
- /package/dist/{chunk-K7NTTA6P.js.map → chunk-EOVMT6TB.js.map} +0 -0
- /package/dist/{chunk-XTXOCYOJ.js.map → chunk-FCKWQE2H.js.map} +0 -0
- /package/dist/{chunk-4OZNXTO4.js.map → chunk-FN5EBVTQ.js.map} +0 -0
- /package/dist/{chunk-NKHRDYOR.js.map → chunk-FQ5VRHIB.js.map} +0 -0
- /package/dist/{chunk-FAHMLERK.js.map → chunk-FW22ZCXT.js.map} +0 -0
- /package/dist/{chunk-RMS3NEA3.js.map → chunk-HT2AHGQI.js.map} +0 -0
- /package/dist/{chunk-CHJBLCOG.js.map → chunk-HVSCEIYL.js.map} +0 -0
- /package/dist/{chunk-GY4WYNNG.js.map → chunk-ID6Z6E66.js.map} +0 -0
- /package/dist/{chunk-EYBQEIUY.js.map → chunk-IEX7NK2K.js.map} +0 -0
- /package/dist/{chunk-KUJDV5QH.js.map → chunk-ISZQJBML.js.map} +0 -0
- /package/dist/{chunk-LWBCUYZW.js.map → chunk-IT22PWKV.js.map} +0 -0
- /package/dist/{chunk-7V4TP3AF.js.map → chunk-J6UOHJY5.js.map} +0 -0
- /package/dist/{chunk-JMGDHKQF.js.map → chunk-JCN44NCY.js.map} +0 -0
- /package/dist/{chunk-CARABLSQ.js.map → chunk-K6W7BVZ6.js.map} +0 -0
- /package/dist/{chunk-453F654R.js.map → chunk-L7DOS3TE.js.map} +0 -0
- /package/dist/{chunk-WEQEYLCS.js.map → chunk-LGRLME4M.js.map} +0 -0
- /package/dist/{chunk-RMF67KCG.js.map → chunk-LQ4ZHOKP.js.map} +0 -0
- /package/dist/{chunk-ZVO4QVPD.js.map → chunk-M522UYZ2.js.map} +0 -0
- /package/dist/{chunk-2N4GY74U.js.map → chunk-MTL7MXGR.js.map} +0 -0
- /package/dist/{chunk-TFR7DSOV.js.map → chunk-MVZ2TPVP.js.map} +0 -0
- /package/dist/{chunk-CPWQB3N5.js.map → chunk-N5DNADLQ.js.map} +0 -0
- /package/dist/{chunk-ELNXJMGB.js.map → chunk-NNARWO72.js.map} +0 -0
- /package/dist/{chunk-6YXCPL4T.js.map → chunk-PDCG6PR5.js.map} +0 -0
- /package/dist/{chunk-REDOOY2Q.js.map → chunk-PSIV7CJV.js.map} +0 -0
- /package/dist/{chunk-ANATMFIO.js.map → chunk-QWFHIOD2.js.map} +0 -0
- /package/dist/{chunk-X2DLENDQ.js.map → chunk-QWGU66MP.js.map} +0 -0
- /package/dist/{chunk-BSFNRLK2.js.map → chunk-S57HTZ6X.js.map} +0 -0
- /package/dist/{chunk-SZJ3DLZA.js.map → chunk-SEE332EV.js.map} +0 -0
- /package/dist/{chunk-YYP7WSEB.js.map → chunk-SI3V7D4G.js.map} +0 -0
- /package/dist/{chunk-UGTBXF5U.js.map → chunk-SOIQ4MM4.js.map} +0 -0
- /package/dist/{chunk-VXGSWL6L.js.map → chunk-SYVZW77S.js.map} +0 -0
- /package/dist/{chunk-MVMXZYXT.js.map → chunk-TKUOEU2F.js.map} +0 -0
- /package/dist/{chunk-SMH6SRX7.js.map → chunk-TROR3ALR.js.map} +0 -0
- /package/dist/{chunk-DGOZ4UZD.js.map → chunk-VNNRUGMM.js.map} +0 -0
- /package/dist/{chunk-HDOU6I2Y.js.map → chunk-VNPEWFPD.js.map} +0 -0
- /package/dist/{chunk-L7CIOOBW.js.map → chunk-WNJ4AVGE.js.map} +0 -0
- /package/dist/{chunk-FMZY5Q6L.js.map → chunk-WX5ADGTZ.js.map} +0 -0
- /package/dist/{chunk-Q7HZX3IF.js.map → chunk-X4773RBR.js.map} +0 -0
- /package/dist/{chunk-ANSIZYEG.js.map → chunk-YNIUIERI.js.map} +0 -0
- /package/dist/{chunk-BZ3534YM.js.map → chunk-ZUVBC32X.js.map} +0 -0
- /package/dist/{chunk-L742JPKZ.js.map → chunk-ZXABPVM6.js.map} +0 -0
- /package/dist/{classified-marker-LI2SF2E4.js.map → classified-marker-W3USLL5M.js.map} +0 -0
- /package/dist/{computed-VPOKQK4N.js.map → collection-facade-QU6IJBN3.js.map} +0 -0
- /package/dist/{derive-6O5SWQKN.js.map → computed-TPFBX7U4.js.map} +0 -0
- /package/dist/{dead-filter-TSWZQRR5.js.map → dead-filter-U2UYKSZL.js.map} +0 -0
- /package/dist/{delegation-OVIFFPG4.js.map → delegation-S3AEPW2T.js.map} +0 -0
- /package/dist/{enclave-KJOTOH7X.js.map → derive-OX7F6TGG.js.map} +0 -0
- /package/dist/{dispatch-WC6X2M6C.js.map → dispatch-3CQDJV5Q.js.map} +0 -0
- /package/dist/{dispatch-S73TK3IY.js.map → dispatch-RH4LHKBH.js.map} +0 -0
- /package/dist/{executor-5NIMLSKZ.js.map → enclave-27SMF6GF.js.map} +0 -0
- /package/dist/{executor-AQVXV5GZ.js.map → executor-B6SRO2QS.js.map} +0 -0
- /package/dist/{executor-PUAO6AKJ.js.map → executor-BI5CHWRY.js.map} +0 -0
- /package/dist/{export-accessible-72EQNBMR.js.map → executor-RBKM5W5K.js.map} +0 -0
- /package/dist/{extract-partition-PUYNU3UF.js.map → export-accessible-VMA3YM5V.js.map} +0 -0
- /package/dist/{find-2ABFCZX4.js.map → extract-partition-NF7PXGPP.js.map} +0 -0
- /package/dist/{fanout-sidecar-WUFXNYP4.js.map → fanout-sidecar-OT6RYLOL.js.map} +0 -0
- /package/dist/{issue-SIDORTSZ.js.map → find-LZMP26KF.js.map} +0 -0
- /package/dist/{ledger-F33ZVMTK.js.map → issue-IHARXWW5.js.map} +0 -0
- /package/dist/{liberate-LCDPNAG2.js.map → ledger-KZPCMVZY.js.map} +0 -0
- /package/dist/{link-set-FKNWAYKS.js.map → liberate-GRLCZMW4.js.map} +0 -0
- /package/dist/{managed-secret-PQYKSR6T.js.map → link-set-JCMJ7ULP.js.map} +0 -0
- /package/dist/{noydb-DUXZPKSN.js.map → managed-secret-S3MQ6SH6.js.map} +0 -0
- /package/dist/{migrate-cek-5ENH64AA.js.map → migrate-cek-V7GKJZ7O.js.map} +0 -0
- /package/dist/{register-I2DZXGAR.js.map → noydb-SWQJ3MZS.js.map} +0 -0
- /package/dist/{pod-handle-Q736KYON.js.map → pod-handle-WGDFB4C2.js.map} +0 -0
- /package/dist/{post-register-LNE2FE2A.js.map → post-register-SLSXIPBV.js.map} +0 -0
- /package/dist/{registry-23WF3TGH.js.map → query/all/index.js.map} +0 -0
- /package/dist/{registry-4AYVUNXK.js.map → register-F3OYE7MJ.js.map} +0 -0
- /package/dist/{registry-VSSQPIGF.js.map → registry-CILQFXFK.js.map} +0 -0
- /package/dist/{registry-YLEWMGAC.js.map → registry-XNNYQVKV.js.map} +0 -0
- /package/dist/{request-withdrawal-KFQHEZ25.js.map → registry-YCDZV3VW.js.map} +0 -0
- /package/dist/{revoke-DQDZAZZM.js.map → registry-ZGYS33TE.js.map} +0 -0
- /package/dist/{signer-WAMDZHEN.js.map → request-withdrawal-Z5NC6TXT.js.map} +0 -0
- /package/dist/{reveal-67RDQRIN.js.map → reveal-4BCKPEC2.js.map} +0 -0
- /package/dist/{stale-DDL7WQEZ.js.map → revoke-ZL62WC2D.js.map} +0 -0
- /package/dist/{seed-G42JYN56.js.map → seed-4JS2RJ4A.js.map} +0 -0
- /package/dist/{storage-FLR73HHF.js.map → signer-MBZZMXTC.js.map} +0 -0
- /package/dist/{walk-3UQBRMDV.js.map → stale-TJ3DYZMQ.js.map} +0 -0
- /package/dist/{withdraw-accessible-EL5GXZBS.js.map → storage-SVMKRGCW.js.map} +0 -0
- /package/dist/{store-coordination-provider-MEQ2MJQG.js.map → store-coordination-provider-2O2VUHKW.js.map} +0 -0
- /package/dist/{verify-KOV2G5D6.js.map → verify-RVT67IMH.js.map} +0 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/** Calendar units `dateTrunc()` can bucket into. */
|
|
2
|
+
export type DateTruncUnit = 'day' | 'week' | 'month' | 'quarter' | 'year';
|
|
3
|
+
/** Accepted week-start conventions. Default is `'monday'` (ISO-8601). */
|
|
4
|
+
export type WeekStart = 'monday' | 'sunday';
|
|
5
|
+
/**
|
|
6
|
+
* A derived group key: "bucket `field` to the start of its `unit`, in
|
|
7
|
+
* `timeZone`". Opaque to consumers — build it with {@link dateTrunc}.
|
|
8
|
+
*/
|
|
9
|
+
export interface DateTruncKey {
|
|
10
|
+
readonly __dateTrunc: true;
|
|
11
|
+
/** Source field (a `readPath` path — dots address nested values). */
|
|
12
|
+
readonly field: string;
|
|
13
|
+
readonly unit: DateTruncUnit;
|
|
14
|
+
/** IANA zone name. Always explicit; validated at construction. */
|
|
15
|
+
readonly timeZone: string;
|
|
16
|
+
readonly weekStartsOn: WeekStart;
|
|
17
|
+
/** Output key the bucket is stamped under on each result row. */
|
|
18
|
+
readonly as: string;
|
|
19
|
+
}
|
|
20
|
+
/** Either a plain field name or a derived calendar key. */
|
|
21
|
+
export type GroupKey = string | DateTruncKey;
|
|
22
|
+
export interface DateTruncOptions {
|
|
23
|
+
/**
|
|
24
|
+
* IANA timezone the calendar is read in — REQUIRED. See the module note:
|
|
25
|
+
* there is no safe default, so there is no default.
|
|
26
|
+
*
|
|
27
|
+
* It applies to values that ARE instants. A zoneless calendar string
|
|
28
|
+
* (`'2026-01-01'`, `'2026-01-01T08:30'`) has no instant to convert and is
|
|
29
|
+
* bucketed as written regardless of what is passed here (#1410).
|
|
30
|
+
*/
|
|
31
|
+
timeZone: string;
|
|
32
|
+
/** Week-start convention for `unit: 'week'`. Default `'monday'`. */
|
|
33
|
+
weekStartsOn?: WeekStart;
|
|
34
|
+
/**
|
|
35
|
+
* Output key. Defaults to `<field>_<unit>` with dots flattened to
|
|
36
|
+
* underscores, so a nested source path cannot produce an output key that
|
|
37
|
+
* `readPath` would then re-interpret as a path.
|
|
38
|
+
*/
|
|
39
|
+
as?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Declare a calendar-bucketed group key. Composable with plain field names in
|
|
43
|
+
* a multi-key `.groupBy(...)`.
|
|
44
|
+
*/
|
|
45
|
+
export declare function dateTrunc(field: string, unit: DateTruncUnit, options: DateTruncOptions): DateTruncKey;
|
|
46
|
+
/** Runtime discriminator — a `DateTruncKey` vs a plain field name. */
|
|
47
|
+
export declare function isDateTruncKey(value: unknown): value is DateTruncKey;
|
|
48
|
+
/** Output key a group key stamps on the result row. */
|
|
49
|
+
export declare function groupKeyName(key: GroupKey): string;
|
|
50
|
+
/**
|
|
51
|
+
* Source field a group key READS. Differs from {@link groupKeyName} only for a
|
|
52
|
+
* derived key — guards that ask "is this field stored?" want this one.
|
|
53
|
+
*/
|
|
54
|
+
export declare function groupKeySourceField(key: GroupKey): string;
|
|
55
|
+
/**
|
|
56
|
+
* Canonical, stable description of a group key for hashing. Every parameter
|
|
57
|
+
* that changes which bucket a row lands in appears here, so declaring,
|
|
58
|
+
* removing, or re-parameterising a derived key bumps an MV's `queryHash`.
|
|
59
|
+
* Pipe-separated so a description can never be confused with the
|
|
60
|
+
* comma-separated field list it sits inside.
|
|
61
|
+
*/
|
|
62
|
+
export declare function describeGroupKey(key: GroupKey): string;
|
|
63
|
+
/**
|
|
64
|
+
* Truncate one value to its bucket. `null` / `undefined` pass through
|
|
65
|
+
* unchanged so the existing null-vs-undefined bucket semantics of
|
|
66
|
+
* `groupAndReduce` still apply. Anything else that is not a timestamp is
|
|
67
|
+
* REFUSED rather than bucketed under a wrong-but-plausible key.
|
|
68
|
+
*/
|
|
69
|
+
export declare function truncateDate(value: unknown, key: DateTruncKey): string | null | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* Stamp each derived key's bucket onto a shallow copy of every row, so the
|
|
72
|
+
* downstream grouping pipeline sees an ordinary stored field. Input rows are
|
|
73
|
+
* never mutated.
|
|
74
|
+
*/
|
|
75
|
+
export declare function projectDateTruncKeys<R>(rows: readonly R[], keys: readonly DateTruncKey[]): R[];
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@noy-db/hub/query/reduce` — **the Reduce group of the query DSL.**
|
|
3
|
+
*
|
|
4
|
+
* ```ts
|
|
5
|
+
* import '@noy-db/hub/query/reduce' // once, in your app's entry
|
|
6
|
+
*
|
|
7
|
+
* invoices.query()
|
|
8
|
+
* .where('status', '==', 'paid')
|
|
9
|
+
* .groupBy(dateTrunc('date', 'month'))
|
|
10
|
+
* .aggregate({ total: sum('amount') })
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* ⭐ **Imported for its side effect** — it patches `aggregate`, `groupBy`,
|
|
14
|
+
* `window` and `distinct` onto `Query.prototype` AND onto
|
|
15
|
+
* `ScanBuilder.prototype`, and merges their types into both. See
|
|
16
|
+
* `../relate/index.ts` for the full note on `package.json`'s `sideEffects`.
|
|
17
|
+
*
|
|
18
|
+
* ⚠️ **The methods, not the ENGINE.** `withReduce()` (`@noy-db/hub/reduce`) is
|
|
19
|
+
* still the strategy that makes them do anything: without it the chain
|
|
20
|
+
* compiles, the method exists, and the call throws the "aggregate is not
|
|
21
|
+
* enabled" error from `NO_REDUCE`. Two different opt-ins, deliberately — one
|
|
22
|
+
* decides whether the code ships, the other whether the service is on.
|
|
23
|
+
*/
|
|
24
|
+
import type { ReduceSurface } from './methods.js';
|
|
25
|
+
import type { ScanReduceSurface } from './scan-methods.js';
|
|
26
|
+
declare module '../builder.js' {
|
|
27
|
+
interface Query<T, S extends keyof T = never, Q extends keyof T & string = never, M extends keyof T & string = never> extends ReduceSurface<T, S, Q, M> {
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
declare module '../scan-builder.js' {
|
|
31
|
+
interface ScanBuilder<T, S extends keyof T = never, M extends keyof T & string = never> extends ScanReduceSurface<T, S, M> {
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export { dateTrunc, isDateTruncKey, truncateDate } from './date-trunc.js';
|
|
35
|
+
export type { DateTruncKey, DateTruncUnit, DateTruncOptions, WeekStart, GroupKey } from './date-trunc.js';
|
|
36
|
+
export { GroupCardinalityError } from '../../errors.js';
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1458 — **Reduce**: a fold over a result set.
|
|
3
|
+
*
|
|
4
|
+
* `aggregate` · `groupBy` · `window` · `distinct`
|
|
5
|
+
*
|
|
6
|
+
* Bodies moved out of `kernel/query/builder.ts` unchanged; see
|
|
7
|
+
* `../relate/methods.ts` for why `this.plan` still resolves.
|
|
8
|
+
*
|
|
9
|
+
* ⚠️ This group depends on TWO others, and both edges are real rather than
|
|
10
|
+
* tidyable:
|
|
11
|
+
* - **Live**, for `incrementalMaintainer` — a live reduction maintains its
|
|
12
|
+
* state through Live's maintainer (see `../internal/maintenance.ts`);
|
|
13
|
+
* - **Relate**, for `reduceViaFor` / `refuseAliasReduceVia` — a reducer over
|
|
14
|
+
* a JOIN ALIAS has to resolve the right side's Via pipeline, and refusing
|
|
15
|
+
* it correctly is #1338's whole subject.
|
|
16
|
+
* Neither is a layering accident: both are what "reduce over a joined, live
|
|
17
|
+
* result" means.
|
|
18
|
+
*/
|
|
19
|
+
import type { DeclaredPredicate, InternalSource, QueryPlan } from '../builder.js';
|
|
20
|
+
import type { QueryField } from '../../types.js';
|
|
21
|
+
import type { ViaPipeline } from '../../via/pipeline.js';
|
|
22
|
+
import type { JoinContext } from '../relate/join.js';
|
|
23
|
+
import type { DateTruncKey } from './date-trunc.js';
|
|
24
|
+
import type { LiveMaintainer, GroupMaintenanceSource } from '../live/incremental.js';
|
|
25
|
+
import type { ReduceSpec, ReduceResult, Reduction } from '../../../with-lookup/reduce/reduction.js';
|
|
26
|
+
import type { ReducerBuilder } from '../../../with-lookup/reduce/reducers.js';
|
|
27
|
+
import type { GroupedQuery, GroupedQueryN } from '../../../with-lookup/reduce/groupby.js';
|
|
28
|
+
import type { ReduceStrategy, WindowSpec, WindowedQuery } from '../../../with-lookup/reduce/strategy.js';
|
|
29
|
+
/** @internal — the mixin whose prototype `./index.ts` copies onto `Query`. */
|
|
30
|
+
export declare class ReduceMethods<T, S extends keyof T = never, Q extends keyof T & string = never, M extends keyof T & string = never> {
|
|
31
|
+
protected readonly source: InternalSource;
|
|
32
|
+
protected readonly plan: QueryPlan;
|
|
33
|
+
protected readonly joinContext: JoinContext | undefined;
|
|
34
|
+
protected readonly reduceStrategy: ReduceStrategy;
|
|
35
|
+
protected readonly predicates: ReadonlyMap<string, DeclaredPredicate> | undefined;
|
|
36
|
+
protected matchedRecords: (terminal: string, forceJoins?: boolean) => readonly unknown[];
|
|
37
|
+
protected decodeVia: (records: readonly unknown[], locale?: string) => unknown[];
|
|
38
|
+
protected aliasVia: () => ReadonlyMap<string, ViaPipeline> | undefined;
|
|
39
|
+
protected incrementalMaintainer: (mode: 'rows' | 'records') => LiveMaintainer | undefined;
|
|
40
|
+
protected groupMaintenance: (derived: readonly DateTruncKey[]) => GroupMaintenanceSource | undefined;
|
|
41
|
+
toArray: (opts?: {
|
|
42
|
+
locale?: string;
|
|
43
|
+
}) => T[];
|
|
44
|
+
/**
|
|
45
|
+
* The right-side change streams a joined query has to merge (#1338), deduped
|
|
46
|
+
* by target the way `live()` does — a chain joining the same collection
|
|
47
|
+
* twice must not double-fire. Extracted so a joined REDUCTION and a joined
|
|
48
|
+
* live query cannot disagree on what "the sources of this result" means.
|
|
49
|
+
*/
|
|
50
|
+
private rightSideUpstreams;
|
|
51
|
+
/**
|
|
52
|
+
* Every alias this plan can produce, pipeline or not (#1338).
|
|
53
|
+
*
|
|
54
|
+
* `aliasVia()` above holds only the aliases whose collection compiles a Via
|
|
55
|
+
* pipeline; refusal has to know about ALL of them, or an aliased reducer
|
|
56
|
+
* over a plain right-side collection stays silent.
|
|
57
|
+
*/
|
|
58
|
+
private aliasNames;
|
|
59
|
+
/** Is `field` rooted at an alias this plan produces? */
|
|
60
|
+
private addressesAlias;
|
|
61
|
+
/**
|
|
62
|
+
* The distinct values of `field` across the match set (#1347) — the
|
|
63
|
+
* declarative form of `new Set(q.toArray().map(r => r[field]))`, which is
|
|
64
|
+
* what consumers write today and which is wrong in two ways this is not.
|
|
65
|
+
*
|
|
66
|
+
* **Distinctness is decided on the canonical index key, not on the value
|
|
67
|
+
* you get back.** For a Via-covered field that is the difference between a
|
|
68
|
+
* right answer and a plausible one: money stores a scaled integer, and a
|
|
69
|
+
* row written before the field was declared can spell it non-canonically
|
|
70
|
+
* (`'0100'` for `'100'`). Deduping the stored strings reports two values
|
|
71
|
+
* where there is one; deduping the FORMATTED strings makes the answer
|
|
72
|
+
* depend on a locale this layer does not have (`'10.00'` vs `'10,00'`).
|
|
73
|
+
* See `distinct-key.ts`. The values RETURNED are the decoded ones, so they
|
|
74
|
+
* match what `toArray()` hands back for the same field.
|
|
75
|
+
*
|
|
76
|
+
* **Nullish values are excluded** — `null`/`undefined`/missing is the
|
|
77
|
+
* absence of a value, not a distinct one. That is also the only choice
|
|
78
|
+
* under which the index-backed and scanned paths can agree, since the hash
|
|
79
|
+
* index does not hold nullish keys; see `distinctKeyOf`.
|
|
80
|
+
*
|
|
81
|
+
* Same match set as `count()`: where/filter apply, orderBy/limit/offset do
|
|
82
|
+
* not. Values come back in first-encountered order.
|
|
83
|
+
*
|
|
84
|
+
* ⭐ INDEX-BACKED when the field carries a hash index AND the plan narrows
|
|
85
|
+
* nothing — the buckets ARE the distinct key set, so the answer costs
|
|
86
|
+
* O(distinct values) instead of O(records) and never decrypts a snapshot.
|
|
87
|
+
* The guard is deliberately all-or-nothing: with a where clause the whole
|
|
88
|
+
* collection's buckets are not the answer, and intersecting a candidate id
|
|
89
|
+
* set with every bucket would cost more than the scan it replaced.
|
|
90
|
+
*
|
|
91
|
+
* ⛔ THE RETURN TYPE IS `(T & Record<F, unknown>)[F][]`, NOT
|
|
92
|
+
* `F extends keyof T ? T[F][] : unknown[]` — and it must stay that way. The
|
|
93
|
+
* conditional form reads better and type-checks at every call site, but a
|
|
94
|
+
* DEFERRED conditional over `T` makes TypeScript give up relating
|
|
95
|
+
* `Query<T>` to `Query<unknown>`, which makes `Collection<T>` invariant in
|
|
96
|
+
* `T`, which breaks `vault.ts`'s `Map<string, Collection<unknown>>` cache
|
|
97
|
+
* with four errors that name neither this method nor this file. The
|
|
98
|
+
* intersection form resolves to the same thing (`T[F]` for a literal key,
|
|
99
|
+
* `unknown` for a `string`-typed one) and stays covariant.
|
|
100
|
+
*/
|
|
101
|
+
distinct<F extends QueryField<T, S>>(field: F): (T & Record<F, unknown>)[F][];
|
|
102
|
+
/**
|
|
103
|
+
* Reduce the matching records through a named set of reducers.
|
|
104
|
+
* the aggregation terminal.
|
|
105
|
+
*
|
|
106
|
+
* ```ts
|
|
107
|
+
* const { total, n, avgAmount } = invoices.query()
|
|
108
|
+
* .where('status', '==', 'open')
|
|
109
|
+
* .aggregate({
|
|
110
|
+
* total: sum('amount'),
|
|
111
|
+
* n: count(),
|
|
112
|
+
* avgAmount: avg('amount'),
|
|
113
|
+
* })
|
|
114
|
+
* .run()
|
|
115
|
+
* ```
|
|
116
|
+
*
|
|
117
|
+
* Returns an `Reduction<R>` wrapper with two terminals:
|
|
118
|
+
* - `.run(): R` — synchronous one-shot reduction
|
|
119
|
+
* - `.live(): LiveReduction<R>` — reactive primitive that
|
|
120
|
+
* re-runs the reduction whenever the source notifies of a
|
|
121
|
+
* change. Always call `live.stop()` when finished.
|
|
122
|
+
*
|
|
123
|
+
* The reducer spec is bound here once and reused by both
|
|
124
|
+
* terminals — this is why `.aggregate()` returns a wrapper instead
|
|
125
|
+
* of being a direct terminal. Consumers who only need the static
|
|
126
|
+
* value read `.run()`; consumers wiring a reactive UI read
|
|
127
|
+
* `.live()`.
|
|
128
|
+
*
|
|
129
|
+
* Joins are NOT applied by default — the same logic as `.count()`. A leg is
|
|
130
|
+
* projection-only, so running one just to throw the alias away would be
|
|
131
|
+
* wasteful. ⭐ **The exception is a reducer that ADDRESSES an alias**
|
|
132
|
+
* (#1338): then the joined relation IS what is being reduced, so the legs
|
|
133
|
+
* run and the reducer is rewritten by the right collection's own Via
|
|
134
|
+
* pipeline — money stays exact, and the right side's `queryable: 'none'`
|
|
135
|
+
* posture refuses a field it would refuse locally. A live joined
|
|
136
|
+
* aggregation also merges every right-side change stream, so it does not
|
|
137
|
+
* quietly stop updating when the right side moves.
|
|
138
|
+
*
|
|
139
|
+
* Every reducer factory accepts an optional `{ seed }` parameter
|
|
140
|
+
* that is plumbed through the protocol but unused by the
|
|
141
|
+
* executor — that's constraint #2. When partition-aware
|
|
142
|
+
* aggregation lands, the seed will carry running state across
|
|
143
|
+
* partition boundaries without an API break.
|
|
144
|
+
*
|
|
145
|
+
* KNOWN GAP (sealed fields, bare-spec form): `where`/`orderBy`/`groupBy`
|
|
146
|
+
* refuse a `sensitive` field at compile time, but a reducer over a sensitive
|
|
147
|
+
* field in the BARE-SPEC form (e.g. `aggregate({ x: sum('ssn') })`) is NOT
|
|
148
|
+
* refused — the reducer factories (`sum`/`min`/`max`/…) are standalone
|
|
149
|
+
* `(field: string)` functions with no collection-type context. This form is
|
|
150
|
+
* preserved as-is for backward compatibility.
|
|
151
|
+
*
|
|
152
|
+
* The BUILDER form closes this gap: `aggregate(b => ({ x: b.sum('field') }))`
|
|
153
|
+
* types the builder's field parameter as `QueryField<T, S>`, refusing any
|
|
154
|
+
* `sensitive` field at compile time. Use the builder form for new code that
|
|
155
|
+
* aggregates over a collection with sensitive fields.
|
|
156
|
+
*
|
|
157
|
+
*/
|
|
158
|
+
aggregate<Spec extends ReduceSpec>(spec: Spec): Reduction<ReduceResult<Spec>>;
|
|
159
|
+
aggregate<Spec extends ReduceSpec>(build: (b: ReducerBuilder<T, S, M>) => Spec): Reduction<ReduceResult<Spec>>;
|
|
160
|
+
/**
|
|
161
|
+
* Partition matching records into buckets keyed by a field, then
|
|
162
|
+
* terminate with `.aggregate(spec)` to compute per-bucket
|
|
163
|
+
* reducers..
|
|
164
|
+
*
|
|
165
|
+
* ```ts
|
|
166
|
+
* const byClient = invoices.query()
|
|
167
|
+
* .where('status', '==', 'open')
|
|
168
|
+
* .groupBy('clientId')
|
|
169
|
+
* .aggregate({ total: sum('amount'), n: count() })
|
|
170
|
+
* .run()
|
|
171
|
+
* // → [ { clientId: 'c1', total: 5250, n: 3 }, … ]
|
|
172
|
+
* ```
|
|
173
|
+
*
|
|
174
|
+
* Result rows carry the group key value under the grouping field
|
|
175
|
+
* name plus every reducer output from the spec. Buckets are
|
|
176
|
+
* emitted in first-seen order — consumers who want a specific
|
|
177
|
+
* ordering should `.sort()` downstream.
|
|
178
|
+
*
|
|
179
|
+
* **Cardinality caps:** a one-shot warning fires at 10_000
|
|
180
|
+
* distinct groups; `GroupCardinalityError` throws at 100_000.
|
|
181
|
+
* Grouping on a high-uniqueness field like `id` or `createdAt` is
|
|
182
|
+
* almost always a query mistake — the error message names the
|
|
183
|
+
* field and observed cardinality and suggests narrowing with
|
|
184
|
+
* `.where()` first.
|
|
185
|
+
*
|
|
186
|
+
* **Null / undefined keys:** records with a missing or explicitly
|
|
187
|
+
* `null` group field get their own buckets. `Map`-based
|
|
188
|
+
* partitioning distinguishes `undefined` from `null`, so the two
|
|
189
|
+
* cases do NOT merge. Consumers who want them merged should
|
|
190
|
+
* coalesce upstream with `.filter()`.
|
|
191
|
+
*
|
|
192
|
+
* **Joins are not applied unless the GROUP KEY addresses an alias** (#1338).
|
|
193
|
+
* For a left-side key the old rationale still holds — a leg is
|
|
194
|
+
* projection-only, so running one inside a grouping pipeline would be
|
|
195
|
+
* wasteful and could trigger `DanglingReferenceError` in strict mode for a
|
|
196
|
+
* call whose intent is purely to bucket-and-reduce. For an aliased key
|
|
197
|
+
* (`groupBy('client.region')`, the accounting-report shape) the legs run and
|
|
198
|
+
* the buckets are the joined relation's: the key is stamped under its DOTTED
|
|
199
|
+
* path (`row['client.region']`), and a left row whose right side is absent
|
|
200
|
+
* reads `undefined` and lands in the undefined bucket — the same bucket a
|
|
201
|
+
* missing left-side key gets, and still distinct from an explicit `null`.
|
|
202
|
+
*
|
|
203
|
+
* ⚠️ The decision is taken from the KEY, because the reducer spec arrives a
|
|
204
|
+
* call later. A reducer over an alias under a LEFT key is therefore REFUSED
|
|
205
|
+
* rather than folded as `undefined` — group by the alias, or aggregate
|
|
206
|
+
* without grouping.
|
|
207
|
+
*
|
|
208
|
+
* **Filter clauses (`.filter(fn)`):** grouped queries still
|
|
209
|
+
* support filter clauses in the underlying plan — they run in
|
|
210
|
+
* the same candidate/filter pipeline that `.aggregate()` uses.
|
|
211
|
+
* The performance caveat is the same: filter clauses cost O(N)
|
|
212
|
+
* per record and can't be index-accelerated.
|
|
213
|
+
*/
|
|
214
|
+
groupBy<F extends QueryField<T, S>>(field: F): GroupedQuery<T, F, S, M>;
|
|
215
|
+
groupBy<F extends readonly [QueryField<T, S>, QueryField<T, S>, ...QueryField<T, S>[]]>(...fields: F): GroupedQueryN<T, F, S, M>;
|
|
216
|
+
groupBy(key: DateTruncKey): GroupedQuery<T, string, S, M>;
|
|
217
|
+
groupBy(...keys: readonly [
|
|
218
|
+
QueryField<T, S> | DateTruncKey,
|
|
219
|
+
QueryField<T, S> | DateTruncKey,
|
|
220
|
+
...(QueryField<T, S> | DateTruncKey)[]
|
|
221
|
+
]): GroupedQueryN<T, readonly string[], S, M>;
|
|
222
|
+
/**
|
|
223
|
+
* SQL window functions over the query's result rows (#1349) — terminate with
|
|
224
|
+
* `.select(spec)`.
|
|
225
|
+
*
|
|
226
|
+
* ```ts
|
|
227
|
+
* invoices.query()
|
|
228
|
+
* .where('status', '==', 'open')
|
|
229
|
+
* .window({ partitionBy: 'clientId', orderBy: 'date' })
|
|
230
|
+
* .select({ balance: runningSum('amount'), prev: lag('amount', 1), n: rowNumber() })
|
|
231
|
+
* .run()
|
|
232
|
+
* ```
|
|
233
|
+
*
|
|
234
|
+
* ⭐ Distinguished from `.groupBy()` by ARITY, not by capability: grouping
|
|
235
|
+
* emits one row per bucket and drops the source rows; a window keeps EVERY
|
|
236
|
+
* row and attaches per-row values computed over its partition.
|
|
237
|
+
*
|
|
238
|
+
* **The record set is `toArray()`'s** — the full pipeline, including joins,
|
|
239
|
+
* `orderBy`, `offset`/`limit` and the Via decode. That differs deliberately
|
|
240
|
+
* from `.groupBy()`, which reads the candidate/filter pipeline only: a
|
|
241
|
+
* window returns ROWS, so the query's own ordering and paging are exactly
|
|
242
|
+
* what decides which rows there are and how they are presented. `orderBy`
|
|
243
|
+
* inside the window decides only how a partition is WALKED.
|
|
244
|
+
*
|
|
245
|
+
* **Frame:** `rows unbounded preceding → current row`, and only that in v1.
|
|
246
|
+
*
|
|
247
|
+
* `partitionBy` / `orderBy` accept a `dateTrunc()` key (#1350) alongside
|
|
248
|
+
* plain field names; the derived bucket is used for partitioning and is not
|
|
249
|
+
* stamped on the output row. A sealed (`sensitive`) field is refused at
|
|
250
|
+
* compile time, same as `.groupBy()`.
|
|
251
|
+
*
|
|
252
|
+
* ⛔ **Not an `explain()` node.** `explain()` is a terminal on `Query`;
|
|
253
|
+
* `.window()` leaves `Query` for `WindowedQuery`, so there is nothing past
|
|
254
|
+
* here to add a node to — the same reason #1336's post-group ops are absent.
|
|
255
|
+
*/
|
|
256
|
+
window(spec: WindowSpec<QueryField<T, S>>): WindowedQuery<T>;
|
|
257
|
+
}
|
|
258
|
+
/** The public Reduce surface — merged into `Query` by `./index.ts`. */
|
|
259
|
+
export type ReduceSurface<T, S extends keyof T = never, Q extends keyof T & string = never, M extends keyof T & string = never> = Pick<ReduceMethods<T, S, Q, M>, 'aggregate' | 'groupBy' | 'window' | 'distinct'>;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1458 — the **Reduce** half of `ScanBuilder`.
|
|
3
|
+
*
|
|
4
|
+
* `aggregate` · `groupBy` · the grouped-scan handle they return.
|
|
5
|
+
*
|
|
6
|
+
* See `../relate/scan-methods.ts` for why `ScanBuilder` is split at all.
|
|
7
|
+
*
|
|
8
|
+
* ⭐ **The streaming memory property travels with the code.**
|
|
9
|
+
* `scan().aggregate()` is O(reducers), not O(records) — it steps every reducer
|
|
10
|
+
* per record and never collects the stream — and `groupBy().aggregate()` is
|
|
11
|
+
* O(groups). That is a code-level invariant visible in the bodies below, so
|
|
12
|
+
* moving them wholesale is what preserves it; re-expressing them over the
|
|
13
|
+
* eager reducers would have quietly turned an unbounded scan into an array.
|
|
14
|
+
*/
|
|
15
|
+
import type { MultiReduceResult, ScanPageProvider } from '../scan-builder.js';
|
|
16
|
+
import type { QueryField } from '../../types.js';
|
|
17
|
+
import type { Clause } from '../predicate.js';
|
|
18
|
+
import type { ViaPipeline } from '../../via/pipeline.js';
|
|
19
|
+
import type { JoinContext, JoinLeg } from '../relate/join.js';
|
|
20
|
+
import type { ReducerBuilder } from '../../../with-lookup/reduce/reducers.js';
|
|
21
|
+
import type { ReduceSpec, ReduceResult } from '../../../with-lookup/reduce/reduction.js';
|
|
22
|
+
import type { DateTruncKey } from './date-trunc.js';
|
|
23
|
+
/** @internal — the mixin whose prototype `./index.ts` copies onto `ScanBuilder`. */
|
|
24
|
+
export declare class ScanReduceMethods<T, S extends keyof T = never, M extends keyof T & string = never> {
|
|
25
|
+
protected readonly pageProvider: ScanPageProvider<T>;
|
|
26
|
+
protected readonly pageSize: number;
|
|
27
|
+
protected readonly clauses: readonly Clause[];
|
|
28
|
+
protected readonly joins: readonly JoinLeg[];
|
|
29
|
+
protected readonly joinContext: JoinContext | undefined;
|
|
30
|
+
protected readonly via: ViaPipeline | undefined;
|
|
31
|
+
protected decodeVia: (record: T) => T;
|
|
32
|
+
protected recordMatches: (record: T, clauses?: readonly Clause[]) => boolean;
|
|
33
|
+
[Symbol.asyncIterator]: () => AsyncIterator<T>;
|
|
34
|
+
aggregate<const Specs extends readonly ReduceSpec[]>(specs: Specs): Promise<MultiReduceResult<Specs>>;
|
|
35
|
+
aggregate<Spec extends ReduceSpec>(spec: Spec): Promise<ReduceResult<Spec>>;
|
|
36
|
+
aggregate<Spec extends ReduceSpec>(build: (b: ReducerBuilder<T, S, M>) => Spec): Promise<ReduceResult<Spec>>;
|
|
37
|
+
/**
|
|
38
|
+
* The multi-spec `.aggregate([specA, specB, …])` executor (#1340).
|
|
39
|
+
*
|
|
40
|
+
* One iteration of the scan, `Σ|spec|` reducer states — memory stays
|
|
41
|
+
* O(reducers) exactly as the single-spec terminal's does, with the sum taken
|
|
42
|
+
* across specs instead of within one. Every spec's state is stepped from the
|
|
43
|
+
* SAME yielded record, so the page provider is read once per page.
|
|
44
|
+
*
|
|
45
|
+
* Semantics per spec are identical to the single-spec form, deliberately:
|
|
46
|
+
* the posture gate is `refuseUnqueryableReducers` (metadata only), NOT the
|
|
47
|
+
* full `wrapReducers` — so `aggregate([a, b])` returns exactly what
|
|
48
|
+
* `aggregate(a)` and `aggregate(b)` return, and the array form is a pure
|
|
49
|
+
* cost optimisation with no behavioural delta to reason about. (The grouped
|
|
50
|
+
* scan path DOES wrap — it has to agree with the eager grouped path, which
|
|
51
|
+
* wraps. See `scan-groupby.ts`.)
|
|
52
|
+
*/
|
|
53
|
+
private aggregateMany;
|
|
54
|
+
/**
|
|
55
|
+
* Group the scan stream and reduce each group — `#1340`.
|
|
56
|
+
*
|
|
57
|
+
* ```ts
|
|
58
|
+
* const byClient = await invoices.scan()
|
|
59
|
+
* .where('status', '==', 'open')
|
|
60
|
+
* .groupBy('clientId', { maxGroups: 5_000 })
|
|
61
|
+
* .aggregate({ total: sum('amount'), n: count() })
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* ⚠️ **This is the one scan terminal whose memory is NOT O(pageSize).** It
|
|
65
|
+
* holds one reducer state per group, which is why the budget is explicit:
|
|
66
|
+
* `maxGroups` defaults to the eager path's 100_000-group ceiling and is
|
|
67
|
+
* REFUSED — never truncated — the moment a scan would exceed it. Price the
|
|
68
|
+
* budget before raising it: an exact `median`/`percentile`, a `mode` or a
|
|
69
|
+
* `countDistinct` holds O(values) per group, so an unbounded scan wants
|
|
70
|
+
* `{ approx: true }` on the quantiles. Full rationale in `scan-groupby.ts`.
|
|
71
|
+
*
|
|
72
|
+
* The key may be a field name or a `dateTrunc()` derived calendar key (the
|
|
73
|
+
* monthly-rollup shape); grouping BY a `sensitive` field is refused at
|
|
74
|
+
* compile time, same as `Query.groupBy()`.
|
|
75
|
+
*/
|
|
76
|
+
groupBy<F extends QueryField<T, S>>(field: F, opts?: {
|
|
77
|
+
maxGroups?: number;
|
|
78
|
+
}): ScanGroupedScan<T, F, S, M>;
|
|
79
|
+
groupBy(key: DateTruncKey, opts?: {
|
|
80
|
+
maxGroups?: number;
|
|
81
|
+
}): ScanGroupedScan<T, string, S, M>;
|
|
82
|
+
}
|
|
83
|
+
/** The public Reduce surface of `ScanBuilder` — merged by `./index.ts`. */
|
|
84
|
+
export type ScanReduceSurface<T, S extends keyof T = never, M extends keyof T & string = never> = Pick<ScanReduceMethods<T, S, M>, 'aggregate' | 'groupBy'>;
|
|
85
|
+
/**
|
|
86
|
+
* Default group ceiling — the same constant the eager `.groupBy()` enforces.
|
|
87
|
+
* Duplicated as a literal rather than imported from
|
|
88
|
+
* `with-lookup/reduce/groupby.ts` on purpose: that module carries the eager
|
|
89
|
+
* `groupAndReduce` + `GroupedReduction` classes, and the always-on kernel must
|
|
90
|
+
* not pull them in to read one number. The pairing is asserted by a test.
|
|
91
|
+
*/
|
|
92
|
+
export declare const SCAN_GROUPBY_DEFAULT_MAX_GROUPS = 100000;
|
|
93
|
+
/** Group-key result-row shape: the key under its own name, plus the reducers. */
|
|
94
|
+
export type ScanGroupedRow<F extends string, R> = {
|
|
95
|
+
[K in F]: unknown;
|
|
96
|
+
} & R;
|
|
97
|
+
/**
|
|
98
|
+
* Chainable wrapper returned by `ScanBuilder.groupBy()`. The only operation on
|
|
99
|
+
* it is `.aggregate()` — same minimal shape as `GroupedQuery`.
|
|
100
|
+
*/
|
|
101
|
+
export declare class ScanGroupedScan<T, F extends string, S extends keyof T = never, M extends keyof T & string = never> {
|
|
102
|
+
private readonly stream;
|
|
103
|
+
private readonly key;
|
|
104
|
+
private readonly maxGroups;
|
|
105
|
+
private readonly via;
|
|
106
|
+
constructor(stream: AsyncIterable<T>, key: string | DateTruncKey, maxGroups: number, via: ViaPipeline | undefined);
|
|
107
|
+
/**
|
|
108
|
+
* Fold the scan into one row per group. Resolves to `R[]`, ordered by each
|
|
109
|
+
* group's FIRST-SEEN position in the stream (`Map` insertion order), which
|
|
110
|
+
* is the same ordering rule the eager path documents.
|
|
111
|
+
*
|
|
112
|
+
* ```ts
|
|
113
|
+
* const byMonth = await invoices.scan()
|
|
114
|
+
* .where('status', '==', 'paid')
|
|
115
|
+
* .groupBy(dateTrunc('closedAt', 'month', { as: 'month', timeZone: 'UTC' }), { maxGroups: 240 })
|
|
116
|
+
* .aggregate({ total: sum('amount'), n: count() })
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
aggregate<Spec extends ReduceSpec>(spec: Spec): Promise<ScanGroupedRow<F, ReduceResult<Spec>>[]>;
|
|
120
|
+
aggregate<Spec extends ReduceSpec>(build: (b: ReducerBuilder<T, S, M>) => Spec): Promise<ScanGroupedRow<F, ReduceResult<Spec>>[]>;
|
|
121
|
+
}
|