@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,757 @@
|
|
|
1
|
+
import {
|
|
2
|
+
canonicalGroupKey
|
|
3
|
+
} from "./chunk-XZHEOSQ2.js";
|
|
4
|
+
import {
|
|
5
|
+
bindDistinctReducers,
|
|
6
|
+
reducerBuilder
|
|
7
|
+
} from "./chunk-F2TDU7MQ.js";
|
|
8
|
+
import {
|
|
9
|
+
LiveMaintainer
|
|
10
|
+
} from "./chunk-VHM7HCKB.js";
|
|
11
|
+
import {
|
|
12
|
+
gateTerminal
|
|
13
|
+
} from "./chunk-5O7D6ZTW.js";
|
|
14
|
+
import {
|
|
15
|
+
readPath
|
|
16
|
+
} from "./chunk-HLEK5VAN.js";
|
|
17
|
+
import {
|
|
18
|
+
applyI18nLocale
|
|
19
|
+
} from "./chunk-GHLTDZRS.js";
|
|
20
|
+
import {
|
|
21
|
+
viaBinder
|
|
22
|
+
} from "./chunk-Z5HTYMMQ.js";
|
|
23
|
+
import {
|
|
24
|
+
GroupCardinalityError
|
|
25
|
+
} from "./chunk-244VXYPG.js";
|
|
26
|
+
|
|
27
|
+
// src/with-lookup/reduce/reduction.ts
|
|
28
|
+
function reduceRecords(records, spec) {
|
|
29
|
+
const state = {};
|
|
30
|
+
for (const key of Object.keys(spec)) {
|
|
31
|
+
state[key] = spec[key].init();
|
|
32
|
+
}
|
|
33
|
+
for (const record of records) {
|
|
34
|
+
for (const key of Object.keys(spec)) {
|
|
35
|
+
state[key] = spec[key].step(state[key], record);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const result = {};
|
|
39
|
+
for (const key of Object.keys(spec)) {
|
|
40
|
+
result[key] = spec[key].finalize(state[key]);
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
var LiveAggregationImpl = class {
|
|
45
|
+
constructor(recompute, upstreams) {
|
|
46
|
+
this.recompute = recompute;
|
|
47
|
+
try {
|
|
48
|
+
this.value = recompute();
|
|
49
|
+
this.error = void 0;
|
|
50
|
+
} catch (err) {
|
|
51
|
+
this.value = void 0;
|
|
52
|
+
this.error = err;
|
|
53
|
+
}
|
|
54
|
+
for (const upstream of upstreams) {
|
|
55
|
+
const unsub = upstream.subscribe(() => this.refresh());
|
|
56
|
+
this.unsubscribes.push(unsub);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
recompute;
|
|
60
|
+
value;
|
|
61
|
+
error;
|
|
62
|
+
listeners = /* @__PURE__ */ new Set();
|
|
63
|
+
unsubscribes = [];
|
|
64
|
+
stopped = false;
|
|
65
|
+
refresh() {
|
|
66
|
+
if (this.stopped) return;
|
|
67
|
+
try {
|
|
68
|
+
this.value = this.recompute();
|
|
69
|
+
this.error = void 0;
|
|
70
|
+
} catch (err) {
|
|
71
|
+
this.error = err;
|
|
72
|
+
}
|
|
73
|
+
for (const listener of this.listeners) {
|
|
74
|
+
try {
|
|
75
|
+
listener();
|
|
76
|
+
} catch (err) {
|
|
77
|
+
console.warn("[noy-db] LiveReduction listener threw:", err);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
subscribe(cb) {
|
|
82
|
+
if (this.stopped) {
|
|
83
|
+
return () => {
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
this.listeners.add(cb);
|
|
87
|
+
return () => {
|
|
88
|
+
this.listeners.delete(cb);
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
stop() {
|
|
92
|
+
if (this.stopped) return;
|
|
93
|
+
this.stopped = true;
|
|
94
|
+
for (const unsub of this.unsubscribes) {
|
|
95
|
+
try {
|
|
96
|
+
unsub();
|
|
97
|
+
} catch (err) {
|
|
98
|
+
console.warn("[noy-db] LiveReduction upstream unsubscribe threw:", err);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
this.unsubscribes.length = 0;
|
|
102
|
+
this.listeners.clear();
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
var Reduction = class {
|
|
106
|
+
constructor(executeRecords, spec, upstreams, gate) {
|
|
107
|
+
this.executeRecords = executeRecords;
|
|
108
|
+
this.spec = spec;
|
|
109
|
+
this.upstreams = upstreams;
|
|
110
|
+
this.gate = gate;
|
|
111
|
+
}
|
|
112
|
+
executeRecords;
|
|
113
|
+
spec;
|
|
114
|
+
upstreams;
|
|
115
|
+
gate;
|
|
116
|
+
/**
|
|
117
|
+
* Execute the query and reduce the results synchronously.
|
|
118
|
+
* Returns the reduced shape matching the spec — e.g. a spec of
|
|
119
|
+
* `{ total: sum('amount'), n: count() }` returns
|
|
120
|
+
* `{ total: number, n: number }`.
|
|
121
|
+
*/
|
|
122
|
+
run() {
|
|
123
|
+
return gateTerminal(this.gate, "aggregate().run", () => reduceRecords(this.executeRecords(), this.spec));
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Build a reactive `LiveReduction<R>` that re-runs the reduction
|
|
127
|
+
* whenever any upstream source notifies of a change. The initial
|
|
128
|
+
* value is computed eagerly in the constructor, so consumers can
|
|
129
|
+
* read `live.value` immediately after calling `.live()`.
|
|
130
|
+
*
|
|
131
|
+
* Always call `live.stop()` when finished — it tears down the
|
|
132
|
+
* upstream subscriptions. Vue's `onUnmounted` is the canonical
|
|
133
|
+
* place.
|
|
134
|
+
*
|
|
135
|
+
* **Implementation note:** every upstream change triggers a full
|
|
136
|
+
* re-reduction over the matching records — but since #1341 that record
|
|
137
|
+
* set is itself maintained per delta rather than re-scanned, so the cost
|
|
138
|
+
* is O(matches) rather than O(collection). Reducer-level `remove()`
|
|
139
|
+
* (O(1) per delta for sum/count/avg) remains unwired; see the file
|
|
140
|
+
* docstring for why folding beats inverting here.
|
|
141
|
+
*/
|
|
142
|
+
live() {
|
|
143
|
+
const recompute = () => reduceRecords(this.executeRecords(), this.spec);
|
|
144
|
+
return gateTerminal(this.gate, "aggregate().live", () => new LiveAggregationImpl(recompute, this.upstreams));
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
function buildLiveReduction(recompute, upstreams) {
|
|
148
|
+
return new LiveAggregationImpl(recompute, upstreams);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// src/with-lookup/reduce/group-core.ts
|
|
152
|
+
var GROUPBY_WARN_CARDINALITY = 1e4;
|
|
153
|
+
var GROUPBY_MAX_CARDINALITY = 1e5;
|
|
154
|
+
var warnedCardinalityFields = /* @__PURE__ */ new Set();
|
|
155
|
+
function warnCardinalityApproaching(fields, observed) {
|
|
156
|
+
const key = JSON.stringify([...fields].sort());
|
|
157
|
+
if (warnedCardinalityFields.has(key)) return;
|
|
158
|
+
warnedCardinalityFields.add(key);
|
|
159
|
+
const label = `[${fields.join(", ")}]`;
|
|
160
|
+
console.warn(
|
|
161
|
+
`[noy-db] .groupBy(${label}) produced ${observed} distinct groups, ${Math.round(observed / GROUPBY_MAX_CARDINALITY * 100)}% of the ${GROUPBY_MAX_CARDINALITY}-group ceiling. Narrow the query with .where() before grouping, or switch to a lower-cardinality field.`
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
function resetGroupByWarnings() {
|
|
165
|
+
warnedCardinalityFields.clear();
|
|
166
|
+
}
|
|
167
|
+
function groupFieldLabel(fields) {
|
|
168
|
+
return fields.length === 1 ? fields[0] : `[${fields.join(", ")}]`;
|
|
169
|
+
}
|
|
170
|
+
function reduceGroupRow(fields, keyValues, records, spec, reducerKeys) {
|
|
171
|
+
const state = {};
|
|
172
|
+
for (const rk of reducerKeys) {
|
|
173
|
+
state[rk] = spec[rk].init();
|
|
174
|
+
}
|
|
175
|
+
for (const record of records) {
|
|
176
|
+
for (const rk of reducerKeys) {
|
|
177
|
+
state[rk] = spec[rk].step(state[rk], record);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const row = {};
|
|
181
|
+
for (const f of fields) {
|
|
182
|
+
row[f] = keyValues[f];
|
|
183
|
+
}
|
|
184
|
+
for (const rk of reducerKeys) {
|
|
185
|
+
row[rk] = spec[rk].finalize(state[rk]);
|
|
186
|
+
}
|
|
187
|
+
return row;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// src/with-lookup/reduce/incremental-group.ts
|
|
191
|
+
var GroupedMaintainer = class {
|
|
192
|
+
inner;
|
|
193
|
+
fields;
|
|
194
|
+
spec;
|
|
195
|
+
reducerKeys;
|
|
196
|
+
fieldLabel;
|
|
197
|
+
project;
|
|
198
|
+
buckets = /* @__PURE__ */ new Map();
|
|
199
|
+
/** Dedup keys in emission (first-seen) order. Recomputed when `orderDirty`. */
|
|
200
|
+
order = [];
|
|
201
|
+
orderDirty = true;
|
|
202
|
+
stale = true;
|
|
203
|
+
attached = false;
|
|
204
|
+
patches = 0;
|
|
205
|
+
rebuilds = 0;
|
|
206
|
+
bucketsReduced = 0;
|
|
207
|
+
recordsFolded = 0;
|
|
208
|
+
constructor(cfg) {
|
|
209
|
+
this.fields = cfg.fields;
|
|
210
|
+
this.spec = cfg.spec;
|
|
211
|
+
this.reducerKeys = Object.keys(cfg.spec);
|
|
212
|
+
this.fieldLabel = groupFieldLabel(cfg.fields);
|
|
213
|
+
const project = cfg.source.project;
|
|
214
|
+
this.project = project ? (record) => project(record) : (record) => record;
|
|
215
|
+
this.inner = new LiveMaintainer({
|
|
216
|
+
snapshotEntries: cfg.source.snapshotEntries,
|
|
217
|
+
lookupById: cfg.source.lookupById,
|
|
218
|
+
matches: cfg.source.matches,
|
|
219
|
+
// Grouping reduces the whole match set in candidate order — it never
|
|
220
|
+
// sorts, offsets, limits or decodes. Same switches the ungrouped
|
|
221
|
+
// `.aggregate()` maintainer runs with.
|
|
222
|
+
offset: 0,
|
|
223
|
+
limit: void 0
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Start accepting deltas. Call in the SAME synchronous turn as the initial
|
|
228
|
+
* read — `LiveReduction` computes its first value in its constructor and
|
|
229
|
+
* subscribes immediately after, so attaching there is that turn.
|
|
230
|
+
*/
|
|
231
|
+
attach() {
|
|
232
|
+
this.attached = true;
|
|
233
|
+
this.inner.attach();
|
|
234
|
+
}
|
|
235
|
+
/** Stop accepting deltas; every later read rebuilds. */
|
|
236
|
+
detach() {
|
|
237
|
+
this.attached = false;
|
|
238
|
+
this.inner.detach();
|
|
239
|
+
}
|
|
240
|
+
/** Force the next read to rebuild. */
|
|
241
|
+
invalidate() {
|
|
242
|
+
this.stale = true;
|
|
243
|
+
this.inner.invalidate();
|
|
244
|
+
}
|
|
245
|
+
/** Patch/rebuild counters — the observable difference between the two paths. */
|
|
246
|
+
stats() {
|
|
247
|
+
return {
|
|
248
|
+
patches: this.patches,
|
|
249
|
+
rebuilds: this.rebuilds,
|
|
250
|
+
bucketsReduced: this.bucketsReduced,
|
|
251
|
+
recordsFolded: this.recordsFolded
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Fold one upstream change into the maintained buckets.
|
|
256
|
+
*
|
|
257
|
+
* The match-set layer runs first and unconditionally — even when THIS layer
|
|
258
|
+
* is stale, keeping the inner maintainer current is what makes the rebuild
|
|
259
|
+
* below cost O(matches) instead of O(collection).
|
|
260
|
+
*/
|
|
261
|
+
apply(change) {
|
|
262
|
+
let outcome;
|
|
263
|
+
try {
|
|
264
|
+
outcome = this.inner.apply(change);
|
|
265
|
+
} catch (err) {
|
|
266
|
+
this.stale = true;
|
|
267
|
+
throw err;
|
|
268
|
+
}
|
|
269
|
+
if (!this.attached || this.stale) return;
|
|
270
|
+
if (outcome.kind === "rebuilt") {
|
|
271
|
+
this.stale = true;
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
try {
|
|
275
|
+
if (outcome.removed) this.leave(outcome.removed);
|
|
276
|
+
if (outcome.inserted) this.join(outcome.inserted);
|
|
277
|
+
this.patches++;
|
|
278
|
+
} catch (err) {
|
|
279
|
+
this.stale = true;
|
|
280
|
+
throw err;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
/** The current grouped rows — a fresh array on every call. */
|
|
284
|
+
rows() {
|
|
285
|
+
if (!this.attached || this.stale) this.rebuild();
|
|
286
|
+
if (this.buckets.size >= GROUPBY_WARN_CARDINALITY) {
|
|
287
|
+
warnCardinalityApproaching(this.fields, this.buckets.size);
|
|
288
|
+
}
|
|
289
|
+
if (this.orderDirty) {
|
|
290
|
+
this.order = [...this.buckets.keys()].sort(
|
|
291
|
+
(a, b) => this.buckets.get(a).members[0].seq - this.buckets.get(b).members[0].seq
|
|
292
|
+
);
|
|
293
|
+
this.orderDirty = false;
|
|
294
|
+
}
|
|
295
|
+
const out = [];
|
|
296
|
+
for (const key of this.order) {
|
|
297
|
+
const bucket = this.buckets.get(key);
|
|
298
|
+
if (bucket.dirty) {
|
|
299
|
+
bucket.row = this.reduce(bucket);
|
|
300
|
+
bucket.dirty = false;
|
|
301
|
+
}
|
|
302
|
+
out.push(bucket.row);
|
|
303
|
+
}
|
|
304
|
+
return out;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Rebuild every bucket from the maintained match set. Equivalent to the
|
|
308
|
+
* eager path by construction: the inner maintainer hands back exactly the
|
|
309
|
+
* records `executeRecords()` would produce, in exactly that order, and
|
|
310
|
+
* `join()` below is the same bucketing loop `groupAndReduce` runs.
|
|
311
|
+
*/
|
|
312
|
+
rebuild() {
|
|
313
|
+
this.rebuilds++;
|
|
314
|
+
this.buckets = /* @__PURE__ */ new Map();
|
|
315
|
+
const entries = this.inner.maintainedEntries();
|
|
316
|
+
for (const entry of entries) this.join({ seq: entry.seq, record: entry.record });
|
|
317
|
+
this.orderDirty = true;
|
|
318
|
+
this.stale = false;
|
|
319
|
+
}
|
|
320
|
+
/** A record left the match set, or left one group on its way to another. */
|
|
321
|
+
leave(delta) {
|
|
322
|
+
const record = this.project(delta.record);
|
|
323
|
+
const key = this.dedupKey(record);
|
|
324
|
+
const bucket = this.buckets.get(key);
|
|
325
|
+
if (!bucket) {
|
|
326
|
+
this.stale = true;
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
const at = lowerBoundBySeq(bucket.members, delta.seq);
|
|
330
|
+
if (bucket.members[at]?.seq !== delta.seq) {
|
|
331
|
+
this.stale = true;
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
bucket.members.splice(at, 1);
|
|
335
|
+
if (bucket.members.length === 0) {
|
|
336
|
+
this.buckets.delete(key);
|
|
337
|
+
this.orderDirty = true;
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
if (at === 0) this.orderDirty = true;
|
|
341
|
+
bucket.dirty = true;
|
|
342
|
+
}
|
|
343
|
+
/** A record joined the match set, or joined a new group. */
|
|
344
|
+
join(delta) {
|
|
345
|
+
const record = this.project(delta.record);
|
|
346
|
+
const key = this.dedupKey(record);
|
|
347
|
+
let bucket = this.buckets.get(key);
|
|
348
|
+
if (bucket === void 0) {
|
|
349
|
+
if (this.buckets.size >= GROUPBY_MAX_CARDINALITY) {
|
|
350
|
+
throw new GroupCardinalityError(
|
|
351
|
+
this.fieldLabel,
|
|
352
|
+
this.buckets.size + 1,
|
|
353
|
+
GROUPBY_MAX_CARDINALITY
|
|
354
|
+
);
|
|
355
|
+
}
|
|
356
|
+
bucket = { members: [], row: void 0, dirty: true };
|
|
357
|
+
this.buckets.set(key, bucket);
|
|
358
|
+
this.orderDirty = true;
|
|
359
|
+
}
|
|
360
|
+
const at = lowerBoundBySeq(bucket.members, delta.seq);
|
|
361
|
+
bucket.members.splice(at, 0, { seq: delta.seq, record });
|
|
362
|
+
if (at === 0) this.orderDirty = true;
|
|
363
|
+
bucket.dirty = true;
|
|
364
|
+
}
|
|
365
|
+
reduce(bucket) {
|
|
366
|
+
const first = bucket.members[0].record;
|
|
367
|
+
const keyValues = {};
|
|
368
|
+
for (const f of this.fields) keyValues[f] = readPath(first, f);
|
|
369
|
+
this.bucketsReduced++;
|
|
370
|
+
this.recordsFolded += bucket.members.length;
|
|
371
|
+
return reduceGroupRow(
|
|
372
|
+
this.fields,
|
|
373
|
+
keyValues,
|
|
374
|
+
bucket.members.map((m) => m.record),
|
|
375
|
+
this.spec,
|
|
376
|
+
this.reducerKeys
|
|
377
|
+
);
|
|
378
|
+
}
|
|
379
|
+
dedupKey(record) {
|
|
380
|
+
const keyValues = {};
|
|
381
|
+
for (const f of this.fields) keyValues[f] = readPath(record, f);
|
|
382
|
+
return canonicalGroupKey(this.fields, keyValues);
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
function lowerBoundBySeq(members, seq) {
|
|
386
|
+
let lo = 0;
|
|
387
|
+
let hi = members.length;
|
|
388
|
+
while (lo < hi) {
|
|
389
|
+
const mid = lo + hi >>> 1;
|
|
390
|
+
if (members[mid].seq < seq) lo = mid + 1;
|
|
391
|
+
else hi = mid;
|
|
392
|
+
}
|
|
393
|
+
return lo;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
// src/with-lookup/reduce/groupby.ts
|
|
397
|
+
var GroupedQueryBase = class {
|
|
398
|
+
constructor(executeRecords, fieldOrFields, upstreams, dictLabelResolver, via, maintenance) {
|
|
399
|
+
this.executeRecords = executeRecords;
|
|
400
|
+
this.upstreams = upstreams;
|
|
401
|
+
this.dictLabelResolver = dictLabelResolver;
|
|
402
|
+
this.via = via;
|
|
403
|
+
this.maintenance = maintenance;
|
|
404
|
+
this.fields = typeof fieldOrFields === "string" ? [fieldOrFields] : [...fieldOrFields];
|
|
405
|
+
}
|
|
406
|
+
executeRecords;
|
|
407
|
+
upstreams;
|
|
408
|
+
dictLabelResolver;
|
|
409
|
+
via;
|
|
410
|
+
maintenance;
|
|
411
|
+
/**
|
|
412
|
+
* Field set this grouped query buckets on. Stored in declaration
|
|
413
|
+
* order — the same order is preserved on every result row by
|
|
414
|
+
* `groupAndReduce`. For the single-field constructor, this is
|
|
415
|
+
* `[field]`.
|
|
416
|
+
*/
|
|
417
|
+
fields;
|
|
418
|
+
/** Apply Via-aware reducer rewriting (e.g. money) when the source declares one. */
|
|
419
|
+
wrapSpec(spec) {
|
|
420
|
+
return bindDistinctReducers(this.via ? this.via.wrapReducers(spec) : spec, this.via);
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
var GroupedQuery = class extends GroupedQueryBase {
|
|
424
|
+
aggregate(specOrBuild) {
|
|
425
|
+
const spec = typeof specOrBuild === "function" ? specOrBuild(reducerBuilder) : specOrBuild;
|
|
426
|
+
return new GroupedReduction(
|
|
427
|
+
this.executeRecords,
|
|
428
|
+
this.fields,
|
|
429
|
+
this.wrapSpec(spec),
|
|
430
|
+
this.upstreams,
|
|
431
|
+
this.dictLabelResolver,
|
|
432
|
+
NO_POST_GROUP,
|
|
433
|
+
this.maintenance
|
|
434
|
+
);
|
|
435
|
+
}
|
|
436
|
+
};
|
|
437
|
+
var GroupedQueryN = class extends GroupedQueryBase {
|
|
438
|
+
aggregate(specOrBuild) {
|
|
439
|
+
const spec = typeof specOrBuild === "function" ? specOrBuild(reducerBuilder) : specOrBuild;
|
|
440
|
+
return new GroupedReduction(
|
|
441
|
+
this.executeRecords,
|
|
442
|
+
this.fields,
|
|
443
|
+
this.wrapSpec(spec),
|
|
444
|
+
this.upstreams,
|
|
445
|
+
this.dictLabelResolver,
|
|
446
|
+
NO_POST_GROUP,
|
|
447
|
+
this.maintenance
|
|
448
|
+
);
|
|
449
|
+
}
|
|
450
|
+
};
|
|
451
|
+
function groupAndReduce(records, fieldOrFields, spec, moneyFields) {
|
|
452
|
+
const fields = typeof fieldOrFields === "string" ? [fieldOrFields] : fieldOrFields;
|
|
453
|
+
if (fields.length === 0) {
|
|
454
|
+
throw new Error(".groupBy() requires at least one field");
|
|
455
|
+
}
|
|
456
|
+
if (moneyFields) {
|
|
457
|
+
const binding = viaBinder("money")({ moneyFields });
|
|
458
|
+
spec = binding.wrapReducers(spec);
|
|
459
|
+
spec = bindDistinctReducers(spec, {
|
|
460
|
+
canonicalizeIndexKey: (f, v) => binding.canonicalizeIndexKey?.(f, v)
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
const buckets = /* @__PURE__ */ new Map();
|
|
464
|
+
const fieldLabel = groupFieldLabel(fields);
|
|
465
|
+
for (const record of records) {
|
|
466
|
+
const keyValues = {};
|
|
467
|
+
for (const f of fields) {
|
|
468
|
+
keyValues[f] = readPath(record, f);
|
|
469
|
+
}
|
|
470
|
+
const dedupKey = canonicalGroupKey(fields, keyValues);
|
|
471
|
+
let bucket = buckets.get(dedupKey);
|
|
472
|
+
if (bucket === void 0) {
|
|
473
|
+
if (buckets.size >= GROUPBY_MAX_CARDINALITY) {
|
|
474
|
+
throw new GroupCardinalityError(
|
|
475
|
+
fieldLabel,
|
|
476
|
+
buckets.size + 1,
|
|
477
|
+
GROUPBY_MAX_CARDINALITY
|
|
478
|
+
);
|
|
479
|
+
}
|
|
480
|
+
bucket = { keyValues, records: [] };
|
|
481
|
+
buckets.set(dedupKey, bucket);
|
|
482
|
+
}
|
|
483
|
+
bucket.records.push(record);
|
|
484
|
+
}
|
|
485
|
+
if (buckets.size >= GROUPBY_WARN_CARDINALITY) {
|
|
486
|
+
warnCardinalityApproaching(fields, buckets.size);
|
|
487
|
+
}
|
|
488
|
+
const reducerKeys = Object.keys(spec);
|
|
489
|
+
const out = [];
|
|
490
|
+
for (const bucket of buckets.values()) {
|
|
491
|
+
out.push(reduceGroupRow(fields, bucket.keyValues, bucket.records, spec, reducerKeys));
|
|
492
|
+
}
|
|
493
|
+
return out;
|
|
494
|
+
}
|
|
495
|
+
var NO_POST_GROUP = { having: [], orderBy: [], limit: void 0 };
|
|
496
|
+
var DECIMAL_NUMERAL = /^[+-]?\d+(\.\d+)?$/;
|
|
497
|
+
function compareReduced(a, b) {
|
|
498
|
+
if (a === void 0 || a === null) return b === void 0 || b === null ? 0 : 1;
|
|
499
|
+
if (b === void 0 || b === null) return -1;
|
|
500
|
+
if (typeof a === "number" && typeof b === "number") return a - b;
|
|
501
|
+
if (typeof a === "bigint" && typeof b === "bigint") return a < b ? -1 : a > b ? 1 : 0;
|
|
502
|
+
if (typeof a === "string" && typeof b === "string") {
|
|
503
|
+
if (DECIMAL_NUMERAL.test(a) && DECIMAL_NUMERAL.test(b)) {
|
|
504
|
+
const an = Number(a);
|
|
505
|
+
const bn = Number(b);
|
|
506
|
+
if (an !== bn) return an < bn ? -1 : 1;
|
|
507
|
+
}
|
|
508
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
509
|
+
}
|
|
510
|
+
if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();
|
|
511
|
+
return 0;
|
|
512
|
+
}
|
|
513
|
+
function applyPostGroup(rows, post) {
|
|
514
|
+
let out = rows;
|
|
515
|
+
for (const pred of post.having) {
|
|
516
|
+
out = out.filter((row) => pred(row));
|
|
517
|
+
}
|
|
518
|
+
if (post.orderBy.length > 0) {
|
|
519
|
+
out = [...out].sort((x, y) => {
|
|
520
|
+
for (const { key, direction } of post.orderBy) {
|
|
521
|
+
const cmp = compareReduced(
|
|
522
|
+
x[key],
|
|
523
|
+
y[key]
|
|
524
|
+
);
|
|
525
|
+
if (cmp !== 0) return direction === "asc" ? cmp : -cmp;
|
|
526
|
+
}
|
|
527
|
+
return 0;
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
if (post.limit !== void 0 && post.limit < out.length) out = out.slice(0, post.limit);
|
|
531
|
+
return out;
|
|
532
|
+
}
|
|
533
|
+
var GroupedReduction = class _GroupedReduction {
|
|
534
|
+
constructor(executeRecords, fields, spec, upstreams, dictLabelResolver, post = NO_POST_GROUP, maintenance) {
|
|
535
|
+
this.executeRecords = executeRecords;
|
|
536
|
+
this.spec = spec;
|
|
537
|
+
this.upstreams = upstreams;
|
|
538
|
+
this.dictLabelResolver = dictLabelResolver;
|
|
539
|
+
this.post = post;
|
|
540
|
+
this.maintenance = maintenance;
|
|
541
|
+
this.fields = typeof fields === "string" ? [fields] : [...fields];
|
|
542
|
+
}
|
|
543
|
+
executeRecords;
|
|
544
|
+
spec;
|
|
545
|
+
upstreams;
|
|
546
|
+
dictLabelResolver;
|
|
547
|
+
post;
|
|
548
|
+
maintenance;
|
|
549
|
+
fields;
|
|
550
|
+
/** Clone with a replaced post-group stage. */
|
|
551
|
+
withPost(post) {
|
|
552
|
+
return new _GroupedReduction(
|
|
553
|
+
this.executeRecords,
|
|
554
|
+
this.fields,
|
|
555
|
+
this.spec,
|
|
556
|
+
this.upstreams,
|
|
557
|
+
this.dictLabelResolver,
|
|
558
|
+
post,
|
|
559
|
+
this.maintenance
|
|
560
|
+
);
|
|
561
|
+
}
|
|
562
|
+
/**
|
|
563
|
+
* Keep only the reduced rows a predicate accepts — SQL's `HAVING` (#1336).
|
|
564
|
+
*
|
|
565
|
+
* ```ts
|
|
566
|
+
* invoices.query()
|
|
567
|
+
* .groupBy('clientId')
|
|
568
|
+
* .aggregate({ total: sum('amount') })
|
|
569
|
+
* .having(r => (r.total as number) > 10_000)
|
|
570
|
+
* .orderBy('total', 'desc')
|
|
571
|
+
* .limit(20)
|
|
572
|
+
* .run()
|
|
573
|
+
* ```
|
|
574
|
+
*
|
|
575
|
+
* The predicate sees the WHOLE reduced row — group keys (including a
|
|
576
|
+
* `dateTrunc()`-derived one) and reducer outputs alike — with each value in
|
|
577
|
+
* its exact reduced form: a money `sum` arrives as its canonical decimal
|
|
578
|
+
* string (`'10004.00'`), never as a locale-formatted label, so comparing on
|
|
579
|
+
* it is exact. Successive calls AND.
|
|
580
|
+
*
|
|
581
|
+
* ⚠️ Not a memory optimization. See the class docs — the buckets exist
|
|
582
|
+
* already; `having` only decides what is returned.
|
|
583
|
+
*/
|
|
584
|
+
having(predicate) {
|
|
585
|
+
return this.withPost({
|
|
586
|
+
...this.post,
|
|
587
|
+
having: [...this.post.having, predicate]
|
|
588
|
+
});
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* Order the REDUCED rows by one of their keys (#1336). Successive calls are
|
|
592
|
+
* tie-breakers; the sort is stable, so bucket first-seen order breaks a
|
|
593
|
+
* final tie.
|
|
594
|
+
*
|
|
595
|
+
* ⭐ Distinguished from `Query.orderBy()` by POSITION, not by name: this one
|
|
596
|
+
* exists only after `.aggregate()` and sorts result rows by a reduced key or
|
|
597
|
+
* a group key; `Query.orderBy()` exists only before `.groupBy()` and sorts
|
|
598
|
+
* SOURCE RECORDS, which (via `.limit()`) changes which records are grouped
|
|
599
|
+
* at all. Both may appear in one chain and they do not interfere.
|
|
600
|
+
*/
|
|
601
|
+
orderBy(key, direction = "asc") {
|
|
602
|
+
return this.withPost({
|
|
603
|
+
...this.post,
|
|
604
|
+
orderBy: [...this.post.orderBy, { key, direction }]
|
|
605
|
+
});
|
|
606
|
+
}
|
|
607
|
+
/**
|
|
608
|
+
* Cap the number of reduced rows returned (#1336) — applied AFTER `having`
|
|
609
|
+
* and `orderBy`, so `.orderBy('total', 'desc').limit(20)` is a top-20.
|
|
610
|
+
*
|
|
611
|
+
* A later call replaces an earlier one.
|
|
612
|
+
*/
|
|
613
|
+
limit(n) {
|
|
614
|
+
if (!Number.isInteger(n) || n < 0) {
|
|
615
|
+
throw new Error(`.limit(${n}): a post-group limit must be a non-negative integer.`);
|
|
616
|
+
}
|
|
617
|
+
return this.withPost({ ...this.post, limit: n });
|
|
618
|
+
}
|
|
619
|
+
/**
|
|
620
|
+
* Execute the query, group, reduce, and return an array of rows.
|
|
621
|
+
*
|
|
622
|
+
* `opts` (query-form MV grouping): when a `locale` + `i18nFields` are
|
|
623
|
+
* given, the declared group-key `i18nText` fields are resolved to that locale
|
|
624
|
+
* at the `mv` layer BEFORE bucketing — so an i18n group key is a stable string
|
|
625
|
+
* instead of a raw `{locale}` map. The MV executor passes the MV's
|
|
626
|
+
* `i18nLocale`/`i18nFields`; ordinary `.run()` callers pass nothing and are
|
|
627
|
+
* unaffected.
|
|
628
|
+
*/
|
|
629
|
+
run(opts) {
|
|
630
|
+
let records = this.executeRecords();
|
|
631
|
+
if (opts?.locale !== void 0 && opts.i18nFields !== void 0) {
|
|
632
|
+
const groupI18n = {};
|
|
633
|
+
for (const f of this.fields) {
|
|
634
|
+
const d = opts.i18nFields[f];
|
|
635
|
+
if (d !== void 0) groupI18n[f] = d;
|
|
636
|
+
}
|
|
637
|
+
if (Object.keys(groupI18n).length > 0) {
|
|
638
|
+
records = records.map((r) => applyI18nLocale(r, groupI18n, opts.locale, void 0, "mv"));
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
return applyPostGroup(groupAndReduce(records, this.fields, this.spec), this.post);
|
|
642
|
+
}
|
|
643
|
+
/**
|
|
644
|
+
* Execute the query, group, reduce, and resolve `<field>Label` for
|
|
645
|
+
* each result row when the grouping field is a `dictKey` and a
|
|
646
|
+
* `locale` is provided. Returns `R[]` synchronously when
|
|
647
|
+
* no locale is specified (identical to `.run()`).
|
|
648
|
+
*
|
|
649
|
+
* The `<field>Label` field is appended to each row. Rows whose group
|
|
650
|
+
* key has no dictionary entry get `<field>Label: undefined`.
|
|
651
|
+
*
|
|
652
|
+
* Dict-label resolution is single-field only — multi-key groupings
|
|
653
|
+
* do not produce a `<field>Label`. The resolver is only attached
|
|
654
|
+
* by the builder when `fields.length === 1`.
|
|
655
|
+
*/
|
|
656
|
+
async runAsync(opts) {
|
|
657
|
+
const rows = applyPostGroup(
|
|
658
|
+
groupAndReduce(this.executeRecords(), this.fields, this.spec),
|
|
659
|
+
this.post
|
|
660
|
+
);
|
|
661
|
+
if (!opts?.locale || !this.dictLabelResolver || this.fields.length !== 1) return rows;
|
|
662
|
+
const resolve = this.dictLabelResolver;
|
|
663
|
+
const locale = opts.locale;
|
|
664
|
+
const fallback = opts.fallback;
|
|
665
|
+
const field = this.fields[0];
|
|
666
|
+
const labelKey = `${field}Label`;
|
|
667
|
+
return Promise.all(
|
|
668
|
+
rows.map(async (row) => {
|
|
669
|
+
const key = row[field];
|
|
670
|
+
if (typeof key !== "string") return row;
|
|
671
|
+
const label = await resolve(key, locale, fallback);
|
|
672
|
+
return { ...row, [labelKey]: label };
|
|
673
|
+
})
|
|
674
|
+
);
|
|
675
|
+
}
|
|
676
|
+
/**
|
|
677
|
+
* Build a reactive `LiveReduction<R[]>` that updates whenever any upstream
|
|
678
|
+
* source notifies of a change. Same error-isolation and idempotent-stop
|
|
679
|
+
* contract as `Reduction.live()` — the implementation delegates to the same
|
|
680
|
+
* `LiveAggregationImpl` class by threading a fresh recompute closure through
|
|
681
|
+
* the existing constructor.
|
|
682
|
+
*
|
|
683
|
+
* **Incremental per-group maintenance (#1341, grouped half).** When
|
|
684
|
+
* `Query.groupBy()` supplied a maintenance seam — a plan
|
|
685
|
+
* `canMaintainIncrementally()` admits, over a source that can hand back a
|
|
686
|
+
* snapshot and an id lookup — a change no longer re-runs the pipeline. The
|
|
687
|
+
* delta patches the match set, then patches the ONE OR TWO buckets it
|
|
688
|
+
* touches; every other bucket serves the row it already computed. See
|
|
689
|
+
* `incremental-group.ts` for the correctness argument, including the three
|
|
690
|
+
* membership transitions (a record changing group, a group emptying, a group
|
|
691
|
+
* appearing) that a naive per-group patch gets wrong.
|
|
692
|
+
*
|
|
693
|
+
* Every other plan, and every notification that arrives without a delta,
|
|
694
|
+
* re-runs the whole grouping exactly as before. Either way the emitted rows
|
|
695
|
+
* are identical to `.run()`'s.
|
|
696
|
+
*
|
|
697
|
+
* ⚠️ `.run()` is deliberately NOT served from the maintained state: it is a
|
|
698
|
+
* one-shot terminal that may be called long after a `.live()` was stopped,
|
|
699
|
+
* and reading the snapshot is the only answer that cannot be stale.
|
|
700
|
+
*
|
|
701
|
+
* Always call `live.stop()` when finished.
|
|
702
|
+
*/
|
|
703
|
+
live() {
|
|
704
|
+
const maintainer = this.maintenance ? new GroupedMaintainer({
|
|
705
|
+
source: this.maintenance,
|
|
706
|
+
fields: this.fields,
|
|
707
|
+
spec: this.spec
|
|
708
|
+
}) : void 0;
|
|
709
|
+
if (!maintainer) {
|
|
710
|
+
const recompute2 = () => applyPostGroup(
|
|
711
|
+
groupAndReduce(this.executeRecords(), this.fields, this.spec),
|
|
712
|
+
this.post
|
|
713
|
+
);
|
|
714
|
+
return withStats(buildLiveReduction(recompute2, this.upstreams), void 0);
|
|
715
|
+
}
|
|
716
|
+
const recompute = () => applyPostGroup(maintainer.rows(), this.post);
|
|
717
|
+
const upstreams = this.upstreams.map((upstream) => ({
|
|
718
|
+
subscribe: (cb) => {
|
|
719
|
+
maintainer.attach();
|
|
720
|
+
const unsubscribe = upstream.subscribe((change) => {
|
|
721
|
+
try {
|
|
722
|
+
maintainer.apply(change);
|
|
723
|
+
} catch {
|
|
724
|
+
maintainer.invalidate();
|
|
725
|
+
}
|
|
726
|
+
cb();
|
|
727
|
+
});
|
|
728
|
+
return () => {
|
|
729
|
+
maintainer.detach();
|
|
730
|
+
unsubscribe();
|
|
731
|
+
};
|
|
732
|
+
}
|
|
733
|
+
}));
|
|
734
|
+
return withStats(buildLiveReduction(recompute, upstreams), maintainer);
|
|
735
|
+
}
|
|
736
|
+
};
|
|
737
|
+
function withStats(live, maintainer) {
|
|
738
|
+
return Object.assign(live, {
|
|
739
|
+
maintenanceStats: () => maintainer?.stats()
|
|
740
|
+
});
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
export {
|
|
744
|
+
reduceRecords,
|
|
745
|
+
Reduction,
|
|
746
|
+
buildLiveReduction,
|
|
747
|
+
GROUPBY_WARN_CARDINALITY,
|
|
748
|
+
GROUPBY_MAX_CARDINALITY,
|
|
749
|
+
resetGroupByWarnings,
|
|
750
|
+
GroupedMaintainer,
|
|
751
|
+
GroupedQuery,
|
|
752
|
+
GroupedQueryN,
|
|
753
|
+
groupAndReduce,
|
|
754
|
+
compareReduced,
|
|
755
|
+
GroupedReduction
|
|
756
|
+
};
|
|
757
|
+
//# sourceMappingURL=chunk-CF5UU4S7.js.map
|