@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,452 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query DSL `.join()` — eager, single-FK, intra-vault joins.
|
|
3
|
+
*
|
|
4
|
+
* resolves a ref()-declared foreign key into an attached
|
|
5
|
+
* right-side record under an alias, using one of two planner paths
|
|
6
|
+
* selected automatically:
|
|
7
|
+
*
|
|
8
|
+
* - **nested-loop** — right-side source exposes `lookupById`, so
|
|
9
|
+
* each left row costs O(1). This is the common path for joins
|
|
10
|
+
* against a Collection, which backs `lookupById` with a Map
|
|
11
|
+
* lookup.
|
|
12
|
+
* - **hash** — right-side has only `snapshot()`. Build a
|
|
13
|
+
* `Map<id, record>` once, probe per left row. Same asymptotic
|
|
14
|
+
* cost for our collections, but the path exists as a fallback
|
|
15
|
+
* for custom QuerySource implementations and as an explicit
|
|
16
|
+
* test-only override via `{ strategy: 'hash' }`.
|
|
17
|
+
*
|
|
18
|
+
* Scope:
|
|
19
|
+
*
|
|
20
|
+
* - Equi-joins on declared `ref()` fields only. Joins on
|
|
21
|
+
* undeclared fields throw at plan time with an actionable error
|
|
22
|
+
* naming the field and collection.
|
|
23
|
+
* - Same-vault only. Cross-vault correlation goes
|
|
24
|
+
* through `queryAcross`; this is an architectural
|
|
25
|
+
* invariant, not a limitation we plan to lift.
|
|
26
|
+
* - Hard row ceiling via `JoinTooLargeError` — default 50k per
|
|
27
|
+
* side, override via `{ maxRows }`. Warns at 80% of the ceiling
|
|
28
|
+
* on the existing warn channel.
|
|
29
|
+
* - Three ref-mode behaviors on dangling refs:
|
|
30
|
+
* strict → `DanglingReferenceError`,
|
|
31
|
+
* warn → attach `null` with a one-shot warning,
|
|
32
|
+
* cascade → attach `null` silently (cascade is a delete-time
|
|
33
|
+
* mode; any dangling refs still present at read time are
|
|
34
|
+
* mid-flight cascades or orphans from earlier, not a DSL error).
|
|
35
|
+
*
|
|
36
|
+
* Partition-awareness seam:
|
|
37
|
+
*
|
|
38
|
+
* Every `JoinLeg` carries a `partitionScope` field that is always `'all'`.
|
|
39
|
+
* The executor never reads it. See {@link JoinLeg.partitionScope} for the
|
|
40
|
+
* two constraints (#1342) that decide how it may ever be populated — one of
|
|
41
|
+
* them silently invalidates stored materialized views.
|
|
42
|
+
*
|
|
43
|
+
* Joins stay OUT of the ledger: reads don't touch `_ledger/`,
|
|
44
|
+
* including joined reads.
|
|
45
|
+
*/
|
|
46
|
+
import type { RefDescriptor, RefMode } from '../../refs.js';
|
|
47
|
+
import type { Clause } from '../predicate.js';
|
|
48
|
+
import type { ViaPipeline } from '../../via/pipeline.js';
|
|
49
|
+
import { type JoinOnPlan } from './join-on.js';
|
|
50
|
+
/** Planner strategy for a single join leg. Auto-selected unless overridden. */
|
|
51
|
+
export type JoinStrategy = 'hash' | 'nested';
|
|
52
|
+
/**
|
|
53
|
+
* Which side of a join leg is preserved (#1289).
|
|
54
|
+
*
|
|
55
|
+
* - `'left'` — every left row survives, `null` under the alias when the
|
|
56
|
+
* FK resolves to nothing. This is what `.join()` has always done, and it
|
|
57
|
+
* is the default for a leg that names no direction.
|
|
58
|
+
* - `'right'` — every RIGHT record survives, including one nothing points
|
|
59
|
+
* at; a left row whose FK matches nothing is dropped.
|
|
60
|
+
* - `'full'` — the union of the two.
|
|
61
|
+
*
|
|
62
|
+
* `'right'` and `'full'` are the only two that need the reverse index — see
|
|
63
|
+
* {@link outerJoinFromRight}. A forward leg is driven by the left row's FK
|
|
64
|
+
* and never has to ask "did anything point at this".
|
|
65
|
+
*/
|
|
66
|
+
export type JoinDirection = 'left' | 'right' | 'full';
|
|
67
|
+
/** Default per-side row ceiling before `.join()` throws `JoinTooLargeError`. */
|
|
68
|
+
export declare const DEFAULT_JOIN_MAX_ROWS = 50000;
|
|
69
|
+
/**
|
|
70
|
+
* Default row ceiling for cross-join expansion. Matches JoinTooLargeError's ceiling.
|
|
71
|
+
*
|
|
72
|
+
* ⭐ #1458 — moved here from `kernel/query/builder.ts`. Find carries no
|
|
73
|
+
* cross-join concept, and a constant is the cheapest thing to leave behind by
|
|
74
|
+
* accident: it would have kept `builder.ts` as the const's home while every
|
|
75
|
+
* reader of it lived in `relate/`.
|
|
76
|
+
*/
|
|
77
|
+
export declare const DEFAULT_CROSS_JOIN_MAX_ROWS = 50000;
|
|
78
|
+
/**
|
|
79
|
+
* Internal representation of a single join leg in the query plan.
|
|
80
|
+
*
|
|
81
|
+
* This is the primary place the partition seam is honored: every leg carries
|
|
82
|
+
* a `partitionScope` field that is always `'all'` and is never read by the
|
|
83
|
+
* executor. See {@link JoinLeg.partitionScope}.
|
|
84
|
+
*/
|
|
85
|
+
export interface JoinLeg {
|
|
86
|
+
/** Field on the left-side record holding the foreign key value. */
|
|
87
|
+
readonly field: string;
|
|
88
|
+
/** Alias key under which the joined right-side record attaches. */
|
|
89
|
+
readonly as: string;
|
|
90
|
+
/** Target collection name, resolved from the `ref()` declaration. */
|
|
91
|
+
readonly target: string;
|
|
92
|
+
/** Ref mode controlling behavior on dangling refs at read time. */
|
|
93
|
+
readonly mode: RefMode;
|
|
94
|
+
/** Manual planner strategy override. `undefined` → auto-select. */
|
|
95
|
+
readonly strategy: JoinStrategy | undefined;
|
|
96
|
+
/** Per-side row ceiling override. `undefined` → DEFAULT_JOIN_MAX_ROWS. */
|
|
97
|
+
readonly maxRows: number | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* Partition scope for future partition-aware joins. Always `'all'` today —
|
|
100
|
+
* the executor never reads this field. Do not remove even though it looks
|
|
101
|
+
* unused: it is a plan-shape seam.
|
|
102
|
+
*
|
|
103
|
+
* ⛔ TWO CONSTRAINTS BEFORE POPULATING THIS (#1342):
|
|
104
|
+
*
|
|
105
|
+
* 1. **It is a `queryHash` input on a HAND-COMPOSED path only — NOT for a
|
|
106
|
+
* registered materialized view.** ⚠️ This paragraph asserted the
|
|
107
|
+
* opposite until 2026-09-04; the correction is the measurement.
|
|
108
|
+
* `MaterializedViewRegistry` feeds `computeQueryHash` from
|
|
109
|
+
* `summarizeQueryPlan()` (`materialized-views/registry.ts:201,243`),
|
|
110
|
+
* and that summary has never emitted `partitionScope`. `serializePlan()`
|
|
111
|
+
* *does* emit `plan.joins` verbatim, and `canonicalizeQueryPlan` is
|
|
112
|
+
* exported, so a consumer composing
|
|
113
|
+
* `computeQueryHash(name, deps, canonicalizeQueryPlan(serializePlan(q)))`
|
|
114
|
+
* by hand does carry the field in their hash. **That composition, and
|
|
115
|
+
* only that one, is what this constraint binds** — it is also the
|
|
116
|
+
* composition `__tests__/query-partition-scope.test.ts` builds, which is
|
|
117
|
+
* why the file read as evidence for the stronger claim.
|
|
118
|
+
* ⭐ So populating this field does NOT invalidate registered MVs. The
|
|
119
|
+
* reason to leave it alone is smaller and still sufficient: it is a
|
|
120
|
+
* DERIVED value — storing it buys nothing, and it is the one leg key
|
|
121
|
+
* emitted UNCONDITIONALLY rather than omitted-at-default, so any later
|
|
122
|
+
* move to summarise it (see #1389's rule) would shift every joined MV's
|
|
123
|
+
* hash at once, for zero gain. Derive the scope in the EXECUTOR from
|
|
124
|
+
* clauses the plan already carries. Pinned by
|
|
125
|
+
* `__tests__/query-partition-scope.test.ts`, which now pins BOTH paths.
|
|
126
|
+
*
|
|
127
|
+
* 2. **The seam-change route was RULED OUT, and the pruning shipped
|
|
128
|
+
* anyway** — ADR 0007, "partitioning is collection-shaped". Pruning only
|
|
129
|
+
* pays on the `scan()` path (`query()` runs over an in-memory,
|
|
130
|
+
* already-decrypted cache where `candidateRecords()`'s hash / sorted /
|
|
131
|
+
* compound dispatch (#1344, #1345) narrows better than a partition ever
|
|
132
|
+
* could). Buying it by teaching `NoydbStore.listPage` a filter would
|
|
133
|
+
* have meant lifting the partition key out of the ciphertext into a
|
|
134
|
+
* storage key or cleartext metadata — a permanent per-record
|
|
135
|
+
* classification handed to the backend, and a change to the published
|
|
136
|
+
* `@noy-db/hub/to` contract across every `to-*` adapter. **Ruled no.**
|
|
137
|
+
* ⭐ The pruning was bought instead with information the store already
|
|
138
|
+
* has: `listPage(vault, **collection**, …)` names the collection in
|
|
139
|
+
* cleartext, so a partition modelled as its own collection is never
|
|
140
|
+
* fetched because it is never asked for.
|
|
141
|
+
*
|
|
142
|
+
* ⭐ **THE SCOPE IS NOW DERIVED, IN THE EXECUTOR, AND THIS FIELD IS STILL
|
|
143
|
+
* DORMANT.** `kernel/query/relate/partition.ts`'s `resolvePartitionScope()` is the
|
|
144
|
+
* one decision function — `with-store/partitioned/` and `explain()` both
|
|
145
|
+
* call it — and it takes the plan's top-level clause list, never a stored
|
|
146
|
+
* leg. It is sound in one direction only: narrow ONLY on a whitelist of
|
|
147
|
+
* provable shapes (`==` / `in` on the declared key at the top level of the
|
|
148
|
+
* AND-ed clause list), and fall back to `'all'` for everything else —
|
|
149
|
+
* `or` groups, negations, callback clauses, and any Via-covered clause
|
|
150
|
+
* (its operand is in STORED form, not partition-key space, which is why
|
|
151
|
+
* `candidateRecords` refuses the index for it too). A partition wrongly
|
|
152
|
+
* excluded is silently missing data.
|
|
153
|
+
*/
|
|
154
|
+
readonly partitionScope: 'all' | readonly string[];
|
|
155
|
+
/**
|
|
156
|
+
* Which side is preserved (#1289). `undefined` reads as `'left'` — the
|
|
157
|
+
* pre-#1289 behaviour — so every plan built before this field existed, and
|
|
158
|
+
* every serialized plan that omits it, keeps its meaning exactly.
|
|
159
|
+
*/
|
|
160
|
+
readonly direction?: JoinDirection;
|
|
161
|
+
/**
|
|
162
|
+
* INNER join (#1361) — drop every left row whose alias resolves to nothing,
|
|
163
|
+
* instead of attaching `null` under it.
|
|
164
|
+
*
|
|
165
|
+
* Only `.join()` sets it (a right/full leg already drops on its own side),
|
|
166
|
+
* and only when the caller passes `{ mode: 'inner' }`. Omitted rather than
|
|
167
|
+
* written as `false` for the same reason `direction` is: a plan built
|
|
168
|
+
* without it must serialize byte-identically to a pre-#1361 one, or every
|
|
169
|
+
* stored `queryHash` moves.
|
|
170
|
+
*/
|
|
171
|
+
readonly inner?: true;
|
|
172
|
+
/**
|
|
173
|
+
* A DECLARED, deterministic join predicate (#1339) — composite equality or
|
|
174
|
+
* a range — instead of the `ref()`-declared FK the rest of this file
|
|
175
|
+
* resolves. Set only by `.joinOn()`, always through
|
|
176
|
+
* {@link normalizeJoinOn}, and OMITTED on every other leg: a plan built by
|
|
177
|
+
* `.join()` must serialize byte-identically to a pre-#1339 one, or every
|
|
178
|
+
* stored `queryHash` moves (the same discipline `direction` and `inner`
|
|
179
|
+
* follow above).
|
|
180
|
+
*
|
|
181
|
+
* ⭐ This is the field that separates `.joinOn()` from `.crossJoin({ on })`.
|
|
182
|
+
* It is plain JSON, so it survives `serializePlan()` and
|
|
183
|
+
* `summarizeQueryPlan()` and a materialized view can therefore DEPEND on
|
|
184
|
+
* it. A closure cannot. See `join-on.ts`.
|
|
185
|
+
*/
|
|
186
|
+
readonly on?: JoinOnPlan;
|
|
187
|
+
/**
|
|
188
|
+
* When `true`, this is a dictionary join. The executor
|
|
189
|
+
* resolves the left-field value against the dict snapshot and
|
|
190
|
+
* attaches `{ ...labels, key }` rather than a right-side record.
|
|
191
|
+
* `target` holds the dictionary name (not a collection name).
|
|
192
|
+
*/
|
|
193
|
+
readonly isDictJoin?: true;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Minimal shape of a joinable right-side record source.
|
|
197
|
+
*
|
|
198
|
+
* Collections implement this structurally via their `QuerySource`;
|
|
199
|
+
* sources without `lookupById` force the hash-join fallback. Kept as
|
|
200
|
+
* a thin interface so tests can wire up plain-object sources without
|
|
201
|
+
* pulling in the full Collection class.
|
|
202
|
+
*
|
|
203
|
+
* The optional `subscribe` is used by `Query.live()` to merge
|
|
204
|
+
* right-side change streams into the live re-run trigger. Sources
|
|
205
|
+
* that omit `subscribe` still work for live joins — they just
|
|
206
|
+
* don't drive re-fires when their right side mutates. Collection
|
|
207
|
+
* implements `subscribe` by hooking into the existing per-
|
|
208
|
+
* vault event emitter.
|
|
209
|
+
*/
|
|
210
|
+
export interface JoinableSource {
|
|
211
|
+
snapshot(): readonly unknown[];
|
|
212
|
+
lookupById?(id: string): unknown;
|
|
213
|
+
/**
|
|
214
|
+
* Default locale a label-resolving query falls back to when the query
|
|
215
|
+
* itself is locale-less. Set by a `staticDict()`-backed source from its
|
|
216
|
+
* `displayLocale` so `{ by: 'label' }` resolves under a locale-less read.
|
|
217
|
+
* Plain `_dict_*`-backed sources omit it.
|
|
218
|
+
*/
|
|
219
|
+
readonly displayLocale?: string;
|
|
220
|
+
/**
|
|
221
|
+
* Sync present-for-join dressing (#626 retirement, #650 Task 6) — when
|
|
222
|
+
* present and the query carries a locale, each joined right-side record
|
|
223
|
+
* is passed through this hook (built by the right-side `Collection` from
|
|
224
|
+
* its own i18n-text + lookup-label bindings) BEFORE it is attached under
|
|
225
|
+
* the leg's alias — so a joined `i18nText` field resolves to a string
|
|
226
|
+
* (not a raw `{ locale }` map) and a joined lookup field gains its
|
|
227
|
+
* `<field>Label`. Locale-less queries leave joined fields raw
|
|
228
|
+
* (consistent with a locale-less read). Replaces the old `i18nFields`
|
|
229
|
+
* data field — the join executor no longer resolves i18n locale itself,
|
|
230
|
+
* it just calls this hook.
|
|
231
|
+
*/
|
|
232
|
+
readonly presentForJoin?: (record: unknown, locale: string) => unknown;
|
|
233
|
+
/**
|
|
234
|
+
* The id-paired view of {@link snapshot} (#1289).
|
|
235
|
+
*
|
|
236
|
+
* ⚠️ A `Collection` snapshot record does NOT carry its own id — the id is
|
|
237
|
+
* the cache key, not a field. The forward join never noticed, because it
|
|
238
|
+
* reads the id off the LEFT row's FK and calls `lookupById`. A right/full
|
|
239
|
+
* outer join has to ask each RIGHT record "what is your id, and did
|
|
240
|
+
* anything point at you", and there is no field to read it from.
|
|
241
|
+
*
|
|
242
|
+
* Optional so a plain-object test source stays valid; `outerJoinFromRight`
|
|
243
|
+
* falls back to an `id` FIELD on the record, which is what such sources
|
|
244
|
+
* carry. A real Collection supplies this and the fallback never runs.
|
|
245
|
+
*/
|
|
246
|
+
snapshotEntries?(): readonly {
|
|
247
|
+
readonly id: string;
|
|
248
|
+
readonly record: unknown;
|
|
249
|
+
}[];
|
|
250
|
+
/**
|
|
251
|
+
* Via RESULT decode for this source's own records (#1289) — the same
|
|
252
|
+
* `via.decodeResults` a top-level `toArray()` applies (money's stored
|
|
253
|
+
* scaled-int → canonical decimal, etc.).
|
|
254
|
+
*
|
|
255
|
+
* It exists because Via dressing keys by BARE FIELD NAME: the moment a
|
|
256
|
+
* record moves under an alias (`{ client: { amount } }`, or both sides of
|
|
257
|
+
* `crossJoinWith`) the top-level decode cannot see it, and the row silently
|
|
258
|
+
* serves raw money. Distinct from `presentForJoin`, which is the LOCALE
|
|
259
|
+
* half (i18n text + lookup labels) and only runs for a locale-carrying
|
|
260
|
+
* query — this half is locale-free and always applies.
|
|
261
|
+
*/
|
|
262
|
+
readonly decodeResults?: (record: unknown) => unknown;
|
|
263
|
+
/**
|
|
264
|
+
* This source's own compiled Via pipeline (#1337 / #1338).
|
|
265
|
+
*
|
|
266
|
+
* The two halves above (`presentForJoin`, `decodeResults`) dress a record
|
|
267
|
+
* that is ON ITS WAY OUT. Ordering, grouping and reduction happen while it
|
|
268
|
+
* is still under an alias mid-plan, and they need the pipeline itself:
|
|
269
|
+
* `compareForOrder` to sort an aliased money field by MAGNITUDE rather than
|
|
270
|
+
* lexically over its stored scaled integer, and `wrapReducers` to rewrite
|
|
271
|
+
* `sum('client.credit')` into the exact-BigInt money reducer (which also
|
|
272
|
+
* applies the RIGHT collection's `queryable: 'none'` posture gate — the
|
|
273
|
+
* gate whose silent absence is why joined aggregation was refused).
|
|
274
|
+
*
|
|
275
|
+
* A THUNK, not a property: `_applyMoneyFields` can rebuild a collection's
|
|
276
|
+
* pipeline after this source object has been handed out, and a copied
|
|
277
|
+
* reference would go quietly stale — the same discipline `decodeResults`
|
|
278
|
+
* above already follows.
|
|
279
|
+
*
|
|
280
|
+
* Optional: a plain-object test source declares none, and every consumer
|
|
281
|
+
* treats absence as "no binding covers anything here".
|
|
282
|
+
*/
|
|
283
|
+
readonly via?: () => ViaPipeline | undefined;
|
|
284
|
+
/**
|
|
285
|
+
* Subscribe to mutations on this source. The callback fires
|
|
286
|
+
* AFTER the underlying record set has been updated. Returns an
|
|
287
|
+
* unsubscribe function. Optional — sources without this method
|
|
288
|
+
* cannot trigger live-join re-fires from their side.
|
|
289
|
+
*/
|
|
290
|
+
subscribe?(cb: () => void): () => void;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Join resolution context attached to a `Query` when it's constructed
|
|
294
|
+
* from a `Collection`. Holds everything the `.join()` method needs to
|
|
295
|
+
* translate a field name into a target collection + ref mode, and
|
|
296
|
+
* everything the executor needs to read the right side.
|
|
297
|
+
*
|
|
298
|
+
* Kept as a structural interface so `Vault` can implement it
|
|
299
|
+
* without `Query` needing to import `Vault` (circular-import
|
|
300
|
+
* avoid). The Collection wires this up in its `query()` method using
|
|
301
|
+
* the `joinResolver` back-reference the Vault passes in.
|
|
302
|
+
*/
|
|
303
|
+
export interface JoinContext {
|
|
304
|
+
/** Name of the left-side (owning) collection. */
|
|
305
|
+
readonly leftCollection: string;
|
|
306
|
+
/**
|
|
307
|
+
* The owning collection's default locale. Used to resolve joined
|
|
308
|
+
* i18n fields at the `join` layer when a terminal call doesn't pass an
|
|
309
|
+
* explicit locale — so `openVault({ locale })` flows to joins like it does
|
|
310
|
+
* to `get`/`list`. A per-call `toArray({ locale })` overrides it.
|
|
311
|
+
*/
|
|
312
|
+
readonly defaultLocale?: string;
|
|
313
|
+
/** Look up a `RefDescriptor` by field name on the left collection. */
|
|
314
|
+
resolveRef(field: string): RefDescriptor | null;
|
|
315
|
+
/** Resolve a right-side source by target collection name. */
|
|
316
|
+
resolveSource(collectionName: string): JoinableSource | null;
|
|
317
|
+
/**
|
|
318
|
+
* Resolve a dictKey join source. Returns a `JoinableSource`
|
|
319
|
+
* whose snapshot exposes `{ key, ...labels }` records, keyed by the
|
|
320
|
+
* stable dictionary key. `null` when the field is not a dictKey.
|
|
321
|
+
*
|
|
322
|
+
* The source is built from the compartment's in-memory dictionary
|
|
323
|
+
* snapshot — same data as `DictionaryHandle.list()`, O(1) per lookup.
|
|
324
|
+
*/
|
|
325
|
+
resolveDictSource?(field: string): JoinableSource | null;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Split a plan's clauses into those evaluable before the join legs run and
|
|
329
|
+
* those that need the joined shape (#1030).
|
|
330
|
+
*
|
|
331
|
+
* Join legs attach after `where` so the left set can be narrowed (and
|
|
332
|
+
* index-driven) first. That is the right default, but it silently broke any
|
|
333
|
+
* predicate addressing a joined alias: the field did not exist yet, so
|
|
334
|
+
* `readPath` returned `undefined`, nothing matched, and the query returned an
|
|
335
|
+
* empty result with no error.
|
|
336
|
+
*
|
|
337
|
+
* The split is deliberately narrow. When no clause addresses an alias — every
|
|
338
|
+
* query written against the previous behaviour — `postJoin` is empty and the
|
|
339
|
+
* caller takes its original path unchanged. The reordered pipeline therefore
|
|
340
|
+
* only ever runs for queries that match nothing today.
|
|
341
|
+
*
|
|
342
|
+
* KNOWN RESIDUAL: `.filter(r => r.client?.name === 'Ann')` cannot be
|
|
343
|
+
* classified (the predicate is a closure), so it still runs pre-join and still
|
|
344
|
+
* sees no alias. Prefer `.where()` for anything addressing a joined field.
|
|
345
|
+
*
|
|
346
|
+
* Shared by the eager `Query` and the streaming `ScanBuilder` so the two
|
|
347
|
+
* cannot drift on which side a clause belongs to.
|
|
348
|
+
*/
|
|
349
|
+
export declare function splitAroundJoins(clauses: readonly Clause[], joins: readonly JoinLeg[]): {
|
|
350
|
+
readonly preJoin: readonly Clause[];
|
|
351
|
+
readonly postJoin: readonly Clause[];
|
|
352
|
+
};
|
|
353
|
+
/**
|
|
354
|
+
* Does any `orderBy` entry address a field that only exists once the legs are
|
|
355
|
+
* attached (#1337)?
|
|
356
|
+
*
|
|
357
|
+
* The ordering half of {@link splitAroundJoins}, kept beside it because the
|
|
358
|
+
* two answer the same question about different parts of the plan, and because
|
|
359
|
+
* `Query.toArray()` and `Query.explain()` must not drift on the answer — one
|
|
360
|
+
* decides when the sort runs, the other reports it.
|
|
361
|
+
*
|
|
362
|
+
* ⚠️ Only `plan.joins` legs count. A `crossJoin` alias lives in the CLAUSE
|
|
363
|
+
* list and its expansion already runs before ordering, so an ordering over
|
|
364
|
+
* one has never needed moving.
|
|
365
|
+
*/
|
|
366
|
+
export declare function orderReferencesJoinAlias(orderBy: readonly {
|
|
367
|
+
readonly field: string;
|
|
368
|
+
}[], joins: readonly JoinLeg[]): boolean;
|
|
369
|
+
/**
|
|
370
|
+
* Does any leg drop left rows (#1361)?
|
|
371
|
+
*
|
|
372
|
+
* The entry condition for every terminal that must run the legs even though
|
|
373
|
+
* nothing addresses an alias: an inner leg is no longer projection-only, so
|
|
374
|
+
* `count()`, `exists()` and the ordering placement in `toArray()` all have to
|
|
375
|
+
* ask. Kept beside {@link splitAroundJoins} and {@link orderReferencesJoinAlias}
|
|
376
|
+
* because the three answer the same family of question, and because
|
|
377
|
+
* `Query.toArray()` and `Query.explain()` must not drift on the answer.
|
|
378
|
+
*/
|
|
379
|
+
export declare function joinsDropLeftRows(joins: readonly JoinLeg[]): boolean;
|
|
380
|
+
/**
|
|
381
|
+
* Coerce an unknown FK value into a lookup key string.
|
|
382
|
+
*
|
|
383
|
+
* Legitimate ref values are strings or numbers — the same narrowing
|
|
384
|
+
* the write-time `enforceRefsOnPut` path applies. Anything else
|
|
385
|
+
* (objects, arrays, booleans, null, undefined) is treated as "no
|
|
386
|
+
* ref" and returns `null`, so the join attaches `null` instead of
|
|
387
|
+
* running `String({})` and producing `'[object Object]'` as a
|
|
388
|
+
* bucket key. This matches the lint rule guidance and keeps
|
|
389
|
+
* bizarre FK values from producing silently-wrong lookups.
|
|
390
|
+
*/
|
|
391
|
+
export declare function coerceRefKey(value: unknown): string | null;
|
|
392
|
+
/**
|
|
393
|
+
* Apply every join leg in the plan against a base set of left-side
|
|
394
|
+
* rows. Called by the query executor after `where` / `orderBy` /
|
|
395
|
+
* `offset` / `limit` have narrowed the left set.
|
|
396
|
+
*
|
|
397
|
+
* Each leg attaches a `leg.as` field to every row. Returns a new
|
|
398
|
+
* array of plain objects — the original left rows are not mutated
|
|
399
|
+
* (structural sharing is fine for the inner fields, but the
|
|
400
|
+
* top-level object is a fresh clone so consumers can further mutate
|
|
401
|
+
* safely).
|
|
402
|
+
*
|
|
403
|
+
* **Ordering:** joins run AFTER orderBy / limit / offset by DEFAULT, so
|
|
404
|
+
* "top 10 invoices with client" sorts and paginates the left side first
|
|
405
|
+
* (index-driven) and joins only the page. Two things flip that, and both
|
|
406
|
+
* are decided by the plan, never by a flag: a `where` addressing an alias
|
|
407
|
+
* (#1030, {@link splitAroundJoins}) and an `orderBy` addressing one (#1337,
|
|
408
|
+
* {@link orderReferencesJoinAlias}). Either one moves the sort and the page
|
|
409
|
+
* to AFTER the legs, because neither can be evaluated against a row where
|
|
410
|
+
* the alias does not exist yet. ⚠️ That query necessarily loses the
|
|
411
|
+
* index-driven ordering fast path — the cost of sorting on a field the
|
|
412
|
+
* index does not hold. `Query.explain()` names which placement a plan gets.
|
|
413
|
+
*
|
|
414
|
+
* An INNER leg (#1361) moves only the PAGE, not the sort: the drop removes
|
|
415
|
+
* rows, so `limit` must observe it, but the ordering is on a left-side field
|
|
416
|
+
* that the drop cannot reorder. `toArray()` therefore sorts pre-join, joins,
|
|
417
|
+
* and slices after — and `explain()` reports `pre-join` on the sort and
|
|
418
|
+
* `post-join` on the page rather than one word for both.
|
|
419
|
+
*
|
|
420
|
+
* **Multi-FK chaining:** each leg's `maxRows` is enforced
|
|
421
|
+
* against the current left-row count independently. Because
|
|
422
|
+
* joins are equi-joins on the target's primary key (one-to-one or
|
|
423
|
+
* one-to-null), the left row count is constant across legs — no
|
|
424
|
+
* cartesian blowup. The per-leg left-side check is still necessary
|
|
425
|
+
* so that a later leg with a tighter ceiling correctly fires on a
|
|
426
|
+
* query like `.join('a', { maxRows: 100_000 }).join('b', { maxRows: 50 })`,
|
|
427
|
+
* which should throw on the second leg if the left set exceeds 50.
|
|
428
|
+
*/
|
|
429
|
+
export declare function applyJoins(rows: readonly unknown[], joins: readonly JoinLeg[], context: JoinContext, locale?: string): unknown[];
|
|
430
|
+
/**
|
|
431
|
+
* The reverse-FK index, generalised over what sits in the bucket (#1352).
|
|
432
|
+
*
|
|
433
|
+
* `outerJoinFromRight` buckets bare left ROWS by their FK; `traverse()`
|
|
434
|
+
* buckets id-paired ENTRIES, because a child row alone cannot say what its
|
|
435
|
+
* own id is (a Collection snapshot record carries no `id` field — the id is
|
|
436
|
+
* the cache key). Same question — "who points at this?" — same coercion
|
|
437
|
+
* rules, so it is deliberately one implementation rather than two that can
|
|
438
|
+
* drift on what counts as a usable FK value.
|
|
439
|
+
*
|
|
440
|
+
* `readKey` extracts the raw FK from an item; `coerceRefKey` then decides
|
|
441
|
+
* whether it is a key at all. An item whose FK is nullish, or is neither a
|
|
442
|
+
* string nor a number, is dropped — "no reference", not "a reference to
|
|
443
|
+
* `[object Object]`".
|
|
444
|
+
*/
|
|
445
|
+
export declare function bucketByRefKey<V>(items: readonly V[], readKey: (item: V) => unknown): Map<string, V[]>;
|
|
446
|
+
/**
|
|
447
|
+
* Test-only: reset the join warning deduplication state between
|
|
448
|
+
* tests. Production code never calls this — the dedup state is
|
|
449
|
+
* intentionally process-scoped so a noisy query doesn't spam the
|
|
450
|
+
* console once per component render.
|
|
451
|
+
*/
|
|
452
|
+
export declare function resetJoinWarnings(): void;
|