@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
|
@@ -46,6 +46,16 @@ export interface FieldDescriptor {
|
|
|
46
46
|
readonly optional?: boolean;
|
|
47
47
|
/** Foreign-key target as `<collection>.<field>` when declared. */
|
|
48
48
|
readonly references?: string;
|
|
49
|
+
/**
|
|
50
|
+
* Read-shape sensitivity, declared as `FieldMeta.bulk` (#1363). Present only
|
|
51
|
+
* when the collection is live in this process (the declaration lives in the
|
|
52
|
+
* `fieldMeta` channel, which is not persisted with the schema).
|
|
53
|
+
*
|
|
54
|
+
* ⚠️ Telemetry, never a control: it tells a coverage sensor which
|
|
55
|
+
* collections have a corpus worth accounting for. Against an insider holding
|
|
56
|
+
* the device and local keys it prevents nothing — key custody does.
|
|
57
|
+
*/
|
|
58
|
+
readonly bulk?: 'sensitive';
|
|
49
59
|
}
|
|
50
60
|
export interface CollectionStats {
|
|
51
61
|
readonly records: number;
|
|
@@ -113,6 +123,23 @@ export interface CollectionDescriptor {
|
|
|
113
123
|
readonly stats?: CollectionStats;
|
|
114
124
|
readonly meta?: CollectionMeta;
|
|
115
125
|
readonly config?: CollectionConfig;
|
|
126
|
+
/**
|
|
127
|
+
* #1447 — fields the datastore itself computes or resolves, as
|
|
128
|
+
* `field → the via brands covering it` (`money`, `computed`, `i18n`,
|
|
129
|
+
* `lookup`, `geo`, `classified`, `blob`). Absent when the collection
|
|
130
|
+
* declares no via pipeline.
|
|
131
|
+
*
|
|
132
|
+
* Exists so a consumer can gate documentation against what the vault
|
|
133
|
+
* actually enforces. The reported case: a rulebook described three
|
|
134
|
+
* vault-computed fields as app-owned — the UNDERSTATING direction, which is
|
|
135
|
+
* silent, because it produces app-side reimplementation of a guarantee that
|
|
136
|
+
* already exists rather than a missing behaviour someone trips over.
|
|
137
|
+
*
|
|
138
|
+
* ⛔ Brand and field only. A binding's CONFIGURATION is deliberately absent:
|
|
139
|
+
* a dump saying "this field is classified, sensitivity pii" is a map of the
|
|
140
|
+
* columns worth attacking, in an artefact that by design leaves the vault.
|
|
141
|
+
*/
|
|
142
|
+
readonly via?: Record<string, readonly string[]>;
|
|
116
143
|
}
|
|
117
144
|
export interface MaterializedViewDescriptor {
|
|
118
145
|
readonly sources: ReadonlyArray<string>;
|
|
@@ -134,8 +161,37 @@ export interface InternalCollectionStats {
|
|
|
134
161
|
readonly records: number;
|
|
135
162
|
readonly bytes: number;
|
|
136
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* A report section `dumpSchema()` is capable of emitting (#1447).
|
|
166
|
+
*
|
|
167
|
+
* ⛔ CAPABILITY OF THE EMITTER, NEVER CONTENT OF THIS DUMP. `reports` lists
|
|
168
|
+
* what this hub *would* have reported, not what it found — a vault that
|
|
169
|
+
* genuinely declares no via fields still lists `'via'`.
|
|
170
|
+
*
|
|
171
|
+
* That distinction is the entire point. A content-based list reintroduces the
|
|
172
|
+
* ambiguity it exists to remove: a consumer could not tell "no via fields
|
|
173
|
+
* here" from "this hub cannot report them", which is exactly how a
|
|
174
|
+
* documentation gate switching to the live report passes VACUOUSLY on a hub
|
|
175
|
+
* too old to answer. Measured by a consumer attempting that adoption.
|
|
176
|
+
*/
|
|
177
|
+
export type SnapshotReport = 'via' | 'stats';
|
|
137
178
|
export interface VaultSchemaSnapshot {
|
|
138
|
-
readonly _noydb_snapshot:
|
|
179
|
+
readonly _noydb_snapshot: 2;
|
|
180
|
+
/**
|
|
181
|
+
* Which report sections this snapshot's emitter can produce (#1447).
|
|
182
|
+
*
|
|
183
|
+
* Check this before concluding anything from an ABSENT section:
|
|
184
|
+
*
|
|
185
|
+
* ```ts
|
|
186
|
+
* if (!snap.reports.includes('via')) throw new Error('hub cannot report via')
|
|
187
|
+
* // only now is a missing `via` key evidence that a collection declares none
|
|
188
|
+
* ```
|
|
189
|
+
*
|
|
190
|
+
* Required, and required deliberately: an optional field would leave
|
|
191
|
+
* `undefined` meaning "old emitter", which is the same ambiguity one level up.
|
|
192
|
+
* Every snapshot states what it can say.
|
|
193
|
+
*/
|
|
194
|
+
readonly reports: readonly SnapshotReport[];
|
|
139
195
|
readonly vault: string;
|
|
140
196
|
readonly emittedAt: string;
|
|
141
197
|
readonly subsystems: Record<string, boolean>;
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { type RefDescriptor, type RefViolation, type RefRegistry } from '../../kernel/refs.js';
|
|
18
18
|
import { type LinkSpec, type LinkSetHandle } from './names.js';
|
|
19
|
-
import type { JoinableSource } from '../../kernel/query/
|
|
19
|
+
import type { JoinableSource } from '../../kernel/query/relate/join.js';
|
|
20
20
|
import type { Collection } from '../../kernel/collection.js';
|
|
21
21
|
import type { NoydbStore } from '../../kernel/types.js';
|
|
22
22
|
import type { TxContext } from '../../with-commit/tx/transaction.js';
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Partitioned collections — the union read path and the declaration surface
|
|
3
|
+
* (#1342, ADR 0007 "partitioning is collection-shaped").
|
|
4
|
+
*
|
|
5
|
+
* ## What was ruled, and what that left to build
|
|
6
|
+
*
|
|
7
|
+
* ADR 0007 ruled **NO** on lifting a partition value into a storage key or
|
|
8
|
+
* into cleartext envelope metadata: it is a permanent per-record
|
|
9
|
+
* classification handed to the backend, and it widens `@noy-db/hub/to` across
|
|
10
|
+
* every `to-*` adapter and the conformance kit to buy a win on one read path.
|
|
11
|
+
* `NoydbStore.listPage` is untouched by this file, and must stay untouched.
|
|
12
|
+
*
|
|
13
|
+
* It ruled instead that **a partition IS a collection**. The store already
|
|
14
|
+
* sees collection names in cleartext — `listPage(vault, collection, cursor,
|
|
15
|
+
* limit)` takes the name as a parameter — so `invoices@FY2026-Q1` prunes for
|
|
16
|
+
* free: `listPage` never fetches an excluded partition because it is never
|
|
17
|
+
* asked to. No seam change, no new leak class, and partition = collection =
|
|
18
|
+
* DEK makes it a REAL boundary rather than an advisory one (per-collection
|
|
19
|
+
* wrapping, #1004): a principal granted only Q1 cannot decrypt Q2, and a
|
|
20
|
+
* closed period's DEK can be archived or dropped outright — something a
|
|
21
|
+
* scoped predicate can never do.
|
|
22
|
+
*
|
|
23
|
+
* The honest cost of that ruling was three missing pieces. This module is
|
|
24
|
+
* them:
|
|
25
|
+
*
|
|
26
|
+
* 1. **a cross-collection union read path** — there was none, so a query
|
|
27
|
+
* spanning four quarters meant running four and merging by hand;
|
|
28
|
+
* 2. **cheap partition enumeration** — `vault.collections()` is
|
|
29
|
+
* `adapter.loadAll(vault)`, the WHOLE vault snapshot, so even LISTING
|
|
30
|
+
* partitions cost a full load;
|
|
31
|
+
* 3. **a declaration** binding a set of collections into one logical
|
|
32
|
+
* collection with a partition key, so a `where` on that key can prune.
|
|
33
|
+
*
|
|
34
|
+
* ## Where the win actually is
|
|
35
|
+
*
|
|
36
|
+
* `collection.query()` runs over an already-decrypted in-memory cache with
|
|
37
|
+
* hash / sorted / compound dispatch in front of it (#1344, #1345), so pruning
|
|
38
|
+
* there is strictly weaker than an index that already ships. `scan()` is the
|
|
39
|
+
* prize: every page is DECRYPTED, so a partition never fetched is a page
|
|
40
|
+
* never decrypted. {@link PartitionedScan} is where the measured win lives;
|
|
41
|
+
* {@link PartitionedQuery} exists because a union that only streams is not a
|
|
42
|
+
* union read path.
|
|
43
|
+
*
|
|
44
|
+
* ## Why this is a free function and not `vault.partitioned()`
|
|
45
|
+
*
|
|
46
|
+
* `check-architecture`'s kernel-surface ratchet leaves `vault.ts` one line of
|
|
47
|
+
* headroom, and a service that re-couples itself into the kernel is exactly
|
|
48
|
+
* what that ratchet exists to catch. It is also not a `with*()` factory: once
|
|
49
|
+
* ADR 0007 removed the storage-layout policy (there is no key prefixing to
|
|
50
|
+
* configure — the partition is a collection), nothing is left to opt into.
|
|
51
|
+
* What remains is a query-shaped helper over collections the caller already
|
|
52
|
+
* owns, so it is a plain function, tree-shaken when unused.
|
|
53
|
+
*
|
|
54
|
+
* ## The immutability precondition, stated once
|
|
55
|
+
*
|
|
56
|
+
* ⛔ **A record's partition key must be immutable.** If a record can be edited
|
|
57
|
+
* from one partition to another, a scope derived at plan time and a scope
|
|
58
|
+
* derived at read time can disagree, and the difference is silently missing
|
|
59
|
+
* rows. {@link PartitionedCollection.put} routes on `record[key]` and will
|
|
60
|
+
* happily write the same id into two partitions if the key changes; it does
|
|
61
|
+
* not police this, because it cannot see the prior value without reading
|
|
62
|
+
* every partition — which is the cost the whole design exists to avoid.
|
|
63
|
+
*/
|
|
64
|
+
import type { Collection } from '../../kernel/collection.js';
|
|
65
|
+
import type { Vault } from '../../kernel/vault.js';
|
|
66
|
+
import type { Operator } from '../../kernel/query/predicate.js';
|
|
67
|
+
import type { OrderBy } from '../../kernel/query/builder.js';
|
|
68
|
+
import type { QueryExplanation } from '../../kernel/query/relate/explain.js';
|
|
69
|
+
import { ScanBuilder } from '../../kernel/query/scan-builder.js';
|
|
70
|
+
import type { ScanPageProvider } from '../../kernel/query/scan-builder.js';
|
|
71
|
+
import type { ReduceResult, ReduceSpec } from '../../with-lookup/reduce/reduction.js';
|
|
72
|
+
import type { PartitionScope } from '../../kernel/query/relate/partition.js';
|
|
73
|
+
/**
|
|
74
|
+
* The collection holding one registry record per partitioned logical
|
|
75
|
+
* collection. A normal, ENCRYPTED collection — the partition list is record
|
|
76
|
+
* content, not a record id, so declaring a partition set adds no cleartext
|
|
77
|
+
* channel of its own. (The partition VALUES do become collection names, and
|
|
78
|
+
* that exposure is ADR 0007's deliberate, developer-visible trade; this
|
|
79
|
+
* registry does not widen it.)
|
|
80
|
+
*/
|
|
81
|
+
export declare const PARTITION_REGISTRY_COLLECTION = "_partition_sets";
|
|
82
|
+
/** How a partition value becomes a collection name. */
|
|
83
|
+
export type PartitionNamer = (logicalName: string, partition: string) => string;
|
|
84
|
+
/** The default: `invoices` + `FY2026-Q1` → `invoices@FY2026-Q1`. */
|
|
85
|
+
export declare const defaultPartitionNamer: PartitionNamer;
|
|
86
|
+
export interface PartitionSpec<T> {
|
|
87
|
+
/** The logical collection name. Never itself a stored collection. */
|
|
88
|
+
readonly name: string;
|
|
89
|
+
/**
|
|
90
|
+
* The field whose value names the partition. ⛔ Must be immutable per
|
|
91
|
+
* record — see this module's header.
|
|
92
|
+
*/
|
|
93
|
+
readonly key: keyof T & string;
|
|
94
|
+
/**
|
|
95
|
+
* Partition values known to the caller. Merged with whatever the registry
|
|
96
|
+
* already holds, so a caller may declare none and rely on the registry, or
|
|
97
|
+
* declare the full set and never write one.
|
|
98
|
+
*/
|
|
99
|
+
readonly partitions?: readonly string[];
|
|
100
|
+
/** Override the partition → collection-name mapping. */
|
|
101
|
+
readonly namer?: PartitionNamer;
|
|
102
|
+
/**
|
|
103
|
+
* Options passed to every member `vault.collection()` — indexes, refs,
|
|
104
|
+
* schema. Identical across partitions by construction: they are one logical
|
|
105
|
+
* collection, and a per-partition shape would make the union unsound.
|
|
106
|
+
*/
|
|
107
|
+
readonly collectionOptions?: unknown;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Bind a set of collections into one partitioned logical collection.
|
|
111
|
+
*
|
|
112
|
+
* ```ts
|
|
113
|
+
* const invoices = partitioned<Invoice>(vault, {
|
|
114
|
+
* name: 'invoices',
|
|
115
|
+
* key: 'period',
|
|
116
|
+
* partitions: ['FY2026-Q1', 'FY2026-Q2', 'FY2026-Q3', 'FY2026-Q4'],
|
|
117
|
+
* })
|
|
118
|
+
*
|
|
119
|
+
* await invoices.put('inv-1', { id: 'inv-1', period: 'FY2026-Q1', amount: 100 })
|
|
120
|
+
*
|
|
121
|
+
* // reads ONE collection — the other three are never asked for
|
|
122
|
+
* const q1 = await invoices.query().where('period', '==', 'FY2026-Q1').all()
|
|
123
|
+
*
|
|
124
|
+
* // reads all four, merged, sorted and paged AFTER the union
|
|
125
|
+
* const top = await invoices.query().orderBy('amount', 'desc').limit(10).all()
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
export declare function partitioned<T>(vault: Vault, spec: PartitionSpec<T>): PartitionedCollection<T>;
|
|
129
|
+
export declare class PartitionedCollection<T> {
|
|
130
|
+
readonly name: string;
|
|
131
|
+
readonly key: string;
|
|
132
|
+
private readonly vault;
|
|
133
|
+
private readonly namer;
|
|
134
|
+
private readonly collectionOptions;
|
|
135
|
+
private readonly declared;
|
|
136
|
+
/**
|
|
137
|
+
* Session cache of the REGISTRY's partition list — deliberately not of the
|
|
138
|
+
* merged set. The two are different questions and conflating them cost a
|
|
139
|
+
* red test: `ensurePartition` must persist a partition the caller DECLARED
|
|
140
|
+
* but never wrote, and a cache of the merged set makes every declared value
|
|
141
|
+
* look already-known, so the registry stays empty and a later session that
|
|
142
|
+
* declares nothing enumerates nothing.
|
|
143
|
+
*/
|
|
144
|
+
private stored;
|
|
145
|
+
constructor(vault: Vault, spec: PartitionSpec<T>);
|
|
146
|
+
/** The member collection name for a partition value. */
|
|
147
|
+
collectionNameOf(partition: string): string;
|
|
148
|
+
/** The member `Collection` for one partition. */
|
|
149
|
+
partition(value: string): Collection<T>;
|
|
150
|
+
/**
|
|
151
|
+
* The declared partition set, in declaration order.
|
|
152
|
+
*
|
|
153
|
+
* ⭐ **This is the "cheap enumeration" half of #1342, and cheap means a
|
|
154
|
+
* measured thing.** `vault.collections()` is `adapter.loadAll(vault)` — the
|
|
155
|
+
* whole vault snapshot, every collection, every envelope — so enumerating
|
|
156
|
+
* twelve quarters cost a full load before this existed. Here it is ONE
|
|
157
|
+
* record read out of {@link PARTITION_REGISTRY_COLLECTION}, and zero reads
|
|
158
|
+
* once the session has resolved it.
|
|
159
|
+
* `__tests__/partitioned-collection.test.ts` asserts the `loadAll` count is
|
|
160
|
+
* zero rather than trusting the sentence.
|
|
161
|
+
*/
|
|
162
|
+
partitions(): Promise<readonly string[]>;
|
|
163
|
+
/**
|
|
164
|
+
* Declare a partition, persisting it so a later session enumerates it
|
|
165
|
+
* without the caller re-declaring. Idempotent, and keyed on what the
|
|
166
|
+
* REGISTRY holds rather than on what this handle declared.
|
|
167
|
+
*/
|
|
168
|
+
ensurePartition(value: string): Promise<void>;
|
|
169
|
+
private loadStored;
|
|
170
|
+
/**
|
|
171
|
+
* Write a record into the partition its key names, declaring that partition
|
|
172
|
+
* if it is new.
|
|
173
|
+
*
|
|
174
|
+
* Throws when `record[key]` is not a string — a partition value names a
|
|
175
|
+
* collection, and routing a record to a partition derived by coercion is
|
|
176
|
+
* how a record ends up somewhere no query will look for it.
|
|
177
|
+
*/
|
|
178
|
+
put(id: string, record: T): Promise<void>;
|
|
179
|
+
/** A union query across the member collections, pruned by the predicate. */
|
|
180
|
+
query(): PartitionedQuery<T>;
|
|
181
|
+
/**
|
|
182
|
+
* A union scan across the member collections, pruned by the predicate.
|
|
183
|
+
* Pages are decrypted, so an excluded partition is decryption never paid.
|
|
184
|
+
*/
|
|
185
|
+
scan(opts?: {
|
|
186
|
+
pageSize?: number;
|
|
187
|
+
}): PartitionedScan<T>;
|
|
188
|
+
/** @internal — the normalizer for clause shapes, and the union's legs. */
|
|
189
|
+
_registryName(): string;
|
|
190
|
+
private registry;
|
|
191
|
+
}
|
|
192
|
+
/** `record[partitionKey]` was absent, empty, or not a string. */
|
|
193
|
+
export declare class PartitionKeyError extends Error {
|
|
194
|
+
constructor(collection: string, key: string, value: unknown);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* One recorded builder call, replayed onto each in-scope member's own
|
|
198
|
+
* builder.
|
|
199
|
+
*
|
|
200
|
+
* ⭐ **Replay, not re-implementation.** The alternative was to build `Clause`
|
|
201
|
+
* objects here, which would have meant a second copy of `Query.where()`'s
|
|
202
|
+
* normalization — the `matches` lowering (#1357), the subquery resolution
|
|
203
|
+
* (#1351), the Via posture gate and the operand rewrite. A second copy is a
|
|
204
|
+
* second thing to drift. Instead every leg is a real `Query` / `ScanBuilder`
|
|
205
|
+
* that normalized the call itself, and the PRUNING reads the normalized
|
|
206
|
+
* `Clause[]` back off one of them — so the clause the pruner classifies is
|
|
207
|
+
* byte-identical to the clause the executor evaluates.
|
|
208
|
+
*/
|
|
209
|
+
type Step<T> = {
|
|
210
|
+
readonly kind: 'where';
|
|
211
|
+
readonly field: string;
|
|
212
|
+
readonly op: Operator;
|
|
213
|
+
readonly value: unknown;
|
|
214
|
+
} | {
|
|
215
|
+
readonly kind: 'filter';
|
|
216
|
+
readonly fn: (record: T) => boolean;
|
|
217
|
+
};
|
|
218
|
+
/**
|
|
219
|
+
* A union query across a partitioned collection's members.
|
|
220
|
+
*
|
|
221
|
+
* **Filtering runs per leg; ordering and paging run AFTER the union** — the
|
|
222
|
+
* same shape `orderBy('client.name')` needed when the sort moved after the
|
|
223
|
+
* join legs (#1337). A `limit` is deliberately NOT pushed down: the top ten
|
|
224
|
+
* of the union is not the top ten of any one leg, and a leg-local limit would
|
|
225
|
+
* be correct only for an unordered query, which is the case nobody writes.
|
|
226
|
+
*/
|
|
227
|
+
export declare class PartitionedQuery<T> {
|
|
228
|
+
private readonly col;
|
|
229
|
+
private readonly steps;
|
|
230
|
+
private readonly orderBys;
|
|
231
|
+
private readonly limitN;
|
|
232
|
+
private readonly offsetN;
|
|
233
|
+
constructor(col: PartitionedCollection<T>, steps: readonly Step<T>[], orderBys: readonly OrderBy[], limitN: number | undefined, offsetN: number);
|
|
234
|
+
private with;
|
|
235
|
+
where(field: keyof T & string, op: Operator, value: unknown): PartitionedQuery<T>;
|
|
236
|
+
filter(fn: (record: T) => boolean): PartitionedQuery<T>;
|
|
237
|
+
orderBy(field: keyof T & string, direction?: 'asc' | 'desc'): PartitionedQuery<T>;
|
|
238
|
+
limit(n: number): PartitionedQuery<T>;
|
|
239
|
+
offset(n: number): PartitionedQuery<T>;
|
|
240
|
+
/** The pruning decision for this query, and the set it was taken against. */
|
|
241
|
+
scope(): Promise<{
|
|
242
|
+
declared: readonly string[];
|
|
243
|
+
scope: PartitionScope;
|
|
244
|
+
}>;
|
|
245
|
+
/**
|
|
246
|
+
* The matched rows, unordered and unpaged — the set every reduce-shaped
|
|
247
|
+
* terminal reports over, matching `Query.count()`'s rule that orderBy /
|
|
248
|
+
* limit / offset describe a page and a reduction is not paginated.
|
|
249
|
+
*/
|
|
250
|
+
private matched;
|
|
251
|
+
/** The union, sorted then paged. */
|
|
252
|
+
all(): Promise<T[]>;
|
|
253
|
+
first(): Promise<T | null>;
|
|
254
|
+
count(): Promise<number>;
|
|
255
|
+
aggregate<Spec extends ReduceSpec>(spec: Spec): Promise<ReduceResult<Spec>>;
|
|
256
|
+
/**
|
|
257
|
+
* The plan, with the partition decision as its first line:
|
|
258
|
+
*
|
|
259
|
+
* ```
|
|
260
|
+
* partitions partitions: 1 of 12 scanned [partitions:pruned] -- key "period"; FY2026-Q1
|
|
261
|
+
* source snapshot (no indexes) [source] rows=500
|
|
262
|
+
* where period == "FY2026-Q1" [scan] rows=500
|
|
263
|
+
* ```
|
|
264
|
+
*
|
|
265
|
+
* ⭐ The dispatch label is decided by {@link resolvePartitionScope} — the
|
|
266
|
+
* SAME call the executor makes, not a mirror of it. `explain.ts`'s header
|
|
267
|
+
* warns that its index dispatch mirrors `candidateRecords`; #1375 deleted
|
|
268
|
+
* one such mirror, and a partition dispatch would have been a third site.
|
|
269
|
+
*
|
|
270
|
+
* The nodes after the partition line are the FIRST in-scope member's own
|
|
271
|
+
* explanation. Every member runs the same plan over the same shape, so one
|
|
272
|
+
* leg's nodes describe them all; the partition line is what says how many
|
|
273
|
+
* legs there are.
|
|
274
|
+
*/
|
|
275
|
+
explain(): Promise<QueryExplanation>;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* A union scan across a partitioned collection's members — **the path where
|
|
279
|
+
* pruning pays.**
|
|
280
|
+
*
|
|
281
|
+
* Each page is fetched through the member collection's `listPage`, which
|
|
282
|
+
* DECRYPTS it. An excluded partition is therefore not merely a store call
|
|
283
|
+
* skipped, it is every envelope in that partition never decrypted. That is
|
|
284
|
+
* the whole return on ADR 0007, and `__tests__/partitioned-scan-cost.test.ts`
|
|
285
|
+
* measures it rather than asserting it.
|
|
286
|
+
*
|
|
287
|
+
* The builder records `where`/`filter` and only materializes a
|
|
288
|
+
* {@link ScanBuilder} at the terminal, because the partition set cannot be
|
|
289
|
+
* decided before the predicate is known — a provider fixed at `scan()` time
|
|
290
|
+
* would already have committed to every partition.
|
|
291
|
+
*/
|
|
292
|
+
export declare class PartitionedScan<T> {
|
|
293
|
+
private readonly col;
|
|
294
|
+
private readonly steps;
|
|
295
|
+
private readonly pageSize;
|
|
296
|
+
constructor(col: PartitionedCollection<T>, steps: readonly Step<T>[], pageSize: number);
|
|
297
|
+
where(field: keyof T & string, op: Operator, value: unknown): PartitionedScan<T>;
|
|
298
|
+
filter(fn: (record: T) => boolean): PartitionedScan<T>;
|
|
299
|
+
/** The pruning decision for this scan, and the set it was taken against. */
|
|
300
|
+
scope(): Promise<{
|
|
301
|
+
declared: readonly string[];
|
|
302
|
+
scope: PartitionScope;
|
|
303
|
+
}>;
|
|
304
|
+
/**
|
|
305
|
+
* The union as a single {@link ScanBuilder} — so `.aggregate()`,
|
|
306
|
+
* `.groupBy()` and `for await` come from the streaming machinery that
|
|
307
|
+
* already exists, at its existing O(reducers) memory bound, rather than
|
|
308
|
+
* from a second implementation of it.
|
|
309
|
+
*/
|
|
310
|
+
builder(): Promise<ScanBuilder<T>>;
|
|
311
|
+
[Symbol.asyncIterator](): AsyncIterator<T>;
|
|
312
|
+
aggregate<Spec extends ReduceSpec>(spec: Spec): Promise<ReduceResult<Spec>>;
|
|
313
|
+
/**
|
|
314
|
+
* **ASYNC here, unlike `Query.toArray()` (#1413).** Same method name, a
|
|
315
|
+
* different contract, because the surface underneath differs: this one
|
|
316
|
+
* genuinely fetches across every partition leg, so it genuinely awaits. `Query`'s terminal reads an
|
|
317
|
+
* already-decrypted in-memory cache and returns `T[]` synchronously.
|
|
318
|
+
*/
|
|
319
|
+
toArray(): Promise<T[]>;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Walk a list of member collections as ONE paged stream.
|
|
323
|
+
*
|
|
324
|
+
* The composite cursor is `"<memberIndex>|<memberCursor>"`. Two properties
|
|
325
|
+
* make it safe to hand back to a consumer that stores it:
|
|
326
|
+
*
|
|
327
|
+
* - it is opaque in exactly the way a store's own cursor is — the member
|
|
328
|
+
* cursor is passed through verbatim and never parsed;
|
|
329
|
+
* - a member's LAST page returns a cursor pointing at the NEXT member with
|
|
330
|
+
* an empty inner cursor, so exhaustion is detected once, not per page.
|
|
331
|
+
*
|
|
332
|
+
* ⚠️ A member that returns an empty page with a non-null cursor is walked
|
|
333
|
+
* again rather than treated as exhausted — the store contract explicitly
|
|
334
|
+
* allows a store to return fewer items than the limit while more exist.
|
|
335
|
+
*/
|
|
336
|
+
export declare function unionPageProvider<T>(members: readonly Collection<T>[]): ScanPageProvider<T>;
|
|
337
|
+
export {};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-tab / cross-process change signals for `.live()` — #1362.
|
|
3
|
+
*
|
|
4
|
+
* A live query is in-process only: a write in tab A leaves tab B's `.live()`
|
|
5
|
+
* showing the old rows until B happens to read again. This module closes that
|
|
6
|
+
* without an external coordinator: every locally-committed change posts a
|
|
7
|
+
* compact ADDRESS on a channel named per store, and every listening instance
|
|
8
|
+
* re-reads that address **through its own keyring** and re-fires the live
|
|
9
|
+
* queries that touch it.
|
|
10
|
+
*
|
|
11
|
+
* ## The zero-knowledge constraint is the feature
|
|
12
|
+
*
|
|
13
|
+
* The frame is `{ vault, collection, id, ts }` and nothing else. No record, no
|
|
14
|
+
* field, no ciphertext, no key, not even the VERB — see below. Encryption
|
|
15
|
+
* happens in hub before any store, and a broadcast channel is **not a store**:
|
|
16
|
+
* it is a side channel with no authentication and no access control, so it is
|
|
17
|
+
* treated as untrusted in BOTH directions.
|
|
18
|
+
*
|
|
19
|
+
* - **Untrusted egress** — only the address leaves. A peer that should not
|
|
20
|
+
* be able to read a record learns, at most, that a record at that address
|
|
21
|
+
* changed. `change-broadcast.test.ts` asserts on the exact bytes posted and
|
|
22
|
+
* fails if anything resembling record content ever appears in them; that
|
|
23
|
+
* test is the thing that catches a future change which starts sending
|
|
24
|
+
* payloads.
|
|
25
|
+
* - **Untrusted ingress** — the frame carries no `action`. A peer's claim
|
|
26
|
+
* "this was a delete" is not evidence, and it is free not to need it: the
|
|
27
|
+
* receiver re-reads the address and decides the verb from what IT can
|
|
28
|
+
* decrypt. So a hostile or buggy peer on the channel can cost a wasted
|
|
29
|
+
* re-read, and cannot make a receiver report a state its own store does
|
|
30
|
+
* not hold.
|
|
31
|
+
*
|
|
32
|
+
* ## Why the receiver re-reads rather than patches
|
|
33
|
+
*
|
|
34
|
+
* #1341's `LiveMaintainer` patches a result set from a delta it TRUSTS —
|
|
35
|
+
* trustworthy because it was derived from a local write the same process
|
|
36
|
+
* observed, with the record in hand. A remote signal is a different animal: it
|
|
37
|
+
* says only "id X in collection Y changed", and the receiving instance has not
|
|
38
|
+
* decrypted the new record and knows neither the before nor the after state.
|
|
39
|
+
* Feeding it to the maintainer as if it were a local delta would patch a set
|
|
40
|
+
* from an address. So a remote-origin change re-reads and re-runs: the
|
|
41
|
+
* `ChangeEvent` it produces is tagged `remote: true`, and `Collection`'s query
|
|
42
|
+
* source hands the live query NO delta for such an event — which the maintainer
|
|
43
|
+
* already understands as "rebuild from scratch", the pre-#1341 behaviour.
|
|
44
|
+
*
|
|
45
|
+
* ## Transport
|
|
46
|
+
*
|
|
47
|
+
* `BroadcastChannel` when the host has one (browsers, Node >= 18,
|
|
48
|
+
* Deno, Bun) — feature-detected at enable time, never assumed. With no channel
|
|
49
|
+
* the whole feature is an inert no-op and behaviour is exactly what it is
|
|
50
|
+
* today. Any other host transport (Electron IPC, a worker `MessagePort`, a
|
|
51
|
+
* test bus) is supported by passing a `channel` that satisfies `TabChannel`.
|
|
52
|
+
*/
|
|
53
|
+
import type { TabChannel } from './tab-coordination.js';
|
|
54
|
+
import type { ChangeEvent } from '../kernel/types.js';
|
|
55
|
+
/**
|
|
56
|
+
* The frame on the wire. `kind` discriminates it from any other traffic
|
|
57
|
+
* sharing the channel; `origin` identifies the sender so a channel that echoes
|
|
58
|
+
* to itself cannot feed an instance its own signal.
|
|
59
|
+
*
|
|
60
|
+
* ⛔ **Do not add a field carrying record state to this interface.** Not the
|
|
61
|
+
* record, not a field of it, not a hash of it, not the verb. Everything here
|
|
62
|
+
* is an ADDRESS plus routing. The test asserting on the posted bytes is what
|
|
63
|
+
* holds the line; it will fail loudly, which is the point.
|
|
64
|
+
*/
|
|
65
|
+
export interface ChangeSignal {
|
|
66
|
+
readonly kind: 'noydb:change';
|
|
67
|
+
/** Sending instance's id — an incoming frame with our own id is ignored. */
|
|
68
|
+
readonly origin: string;
|
|
69
|
+
readonly vault: string;
|
|
70
|
+
readonly collection: string;
|
|
71
|
+
readonly id: string;
|
|
72
|
+
/** Sender's wall clock at post time. Diagnostic only; never compared for ordering. */
|
|
73
|
+
readonly ts: number;
|
|
74
|
+
}
|
|
75
|
+
export interface ChangeBroadcastOptions {
|
|
76
|
+
/**
|
|
77
|
+
* Host-provided transport. Supply this for a host with no
|
|
78
|
+
* `BroadcastChannel` (Electron IPC, a worker `MessagePort`, a test bus) or to
|
|
79
|
+
* take ownership of the channel's lifetime. Default: an inline
|
|
80
|
+
* `BroadcastChannel` if the host has one, else nothing at all.
|
|
81
|
+
*/
|
|
82
|
+
readonly channel?: TabChannel;
|
|
83
|
+
/**
|
|
84
|
+
* Discriminator for the default channel name — `noydb:change:<storeId>`.
|
|
85
|
+
*
|
|
86
|
+
* ⚠️ Defaults to `store.name`, which is the backend KIND ('memory', 'file',
|
|
87
|
+
* 'idb'), not a per-dataset identity: two different IndexedDB databases both
|
|
88
|
+
* reporting `'idb'` would share one channel and re-read each other's
|
|
89
|
+
* addresses (harmless — a miss costs one read that finds nothing — but
|
|
90
|
+
* wasteful). Pass a `storeId` that names the DATASET whenever a host can
|
|
91
|
+
* open more than one.
|
|
92
|
+
*/
|
|
93
|
+
readonly storeId?: string;
|
|
94
|
+
/** This instance's id. Default: a random one. */
|
|
95
|
+
readonly originId?: string;
|
|
96
|
+
/** Clock for the frame's `ts`. Default: `Date.now`. */
|
|
97
|
+
readonly now?: () => number;
|
|
98
|
+
}
|
|
99
|
+
/** The slice of `Noydb` this needs. Structural, so there is no import cycle. */
|
|
100
|
+
export interface ChangeBroadcastHost {
|
|
101
|
+
on(event: 'change', handler: (e: ChangeEvent) => void): void;
|
|
102
|
+
off(event: 'change', handler: (e: ChangeEvent) => void): void;
|
|
103
|
+
/** @internal Store backend name, for the default channel name. */
|
|
104
|
+
readonly _storeName: string | undefined;
|
|
105
|
+
/** @internal Re-read one address through this instance's own keyring. */
|
|
106
|
+
_applyRemoteSignal(vault: string, collection: string, id: string): Promise<void>;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* An inline `BroadcastChannel` wrapper, or `undefined` when the host has none.
|
|
110
|
+
*
|
|
111
|
+
* ⚠️ Deliberately does NOT gate on `window`, and that asymmetry with
|
|
112
|
+
* `defaultChannel()` is the cross-process half of this feature, not an
|
|
113
|
+
* oversight. That gate exists because a presence HEARTBEAT and a Web-Locks role
|
|
114
|
+
* ELECTION are browser-tab concepts that should not start running in Node; a
|
|
115
|
+
* change signal is the opposite — Node workers and Electron processes sharing a
|
|
116
|
+
* store are exactly the case #1362 names, and gating on `window` would silently
|
|
117
|
+
* exclude them.
|
|
118
|
+
*/
|
|
119
|
+
export declare function defaultChangeChannel(name: string): TabChannel | undefined;
|
|
120
|
+
/** Channel name for a store. One namespace per store so unrelated datasets never cross-signal. */
|
|
121
|
+
export declare function changeChannelName(storeId: string): string;
|
|
122
|
+
/**
|
|
123
|
+
* The relay itself: local change out as an address, remote address in as a
|
|
124
|
+
* re-read. Started by {@link enableChangeBroadcast}.
|
|
125
|
+
*/
|
|
126
|
+
export declare class ChangeBroadcast {
|
|
127
|
+
#private;
|
|
128
|
+
constructor(host: ChangeBroadcastHost, channel: TabChannel, opts: {
|
|
129
|
+
originId: string;
|
|
130
|
+
now: () => number;
|
|
131
|
+
ownsChannel: boolean;
|
|
132
|
+
});
|
|
133
|
+
get originId(): string;
|
|
134
|
+
start(): void;
|
|
135
|
+
dispose(): void;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Opt in to cross-tab / cross-process live-query reactivity.
|
|
139
|
+
*
|
|
140
|
+
* ```ts
|
|
141
|
+
* const stop = enableChangeBroadcast(db, { storeId: 'invoices-2026' })
|
|
142
|
+
* // …a put in another tab now re-fires this tab's `.live()` queries…
|
|
143
|
+
* stop.dispose()
|
|
144
|
+
* ```
|
|
145
|
+
*
|
|
146
|
+
* Opt-in on purpose: it is a side channel, and a host that does not want one
|
|
147
|
+
* gets exactly today's behaviour by not calling this. **With no channel
|
|
148
|
+
* available it is also a no-op** — it returns a disposable that does nothing,
|
|
149
|
+
* never throws, and leaves in-process reactivity untouched.
|
|
150
|
+
*/
|
|
151
|
+
export declare function enableChangeBroadcast(host: ChangeBroadcastHost, opts?: ChangeBroadcastOptions): {
|
|
152
|
+
dispose: () => void;
|
|
153
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FROZEN_SNAPSHOTS_COLLECTION,
|
|
3
|
+
freezeAndDeleteClosure,
|
|
4
|
+
freezeSnapshotOnly,
|
|
5
|
+
randomId,
|
|
6
|
+
withdrawAccessibleData
|
|
7
|
+
} from "./chunk-S57HTZ6X.js";
|
|
8
|
+
import "./chunk-WNJ4AVGE.js";
|
|
9
|
+
import "./chunk-HBPPGWUM.js";
|
|
10
|
+
import "./chunk-IUWCVHQ7.js";
|
|
11
|
+
import "./chunk-KJFW62P4.js";
|
|
12
|
+
import "./chunk-SEE332EV.js";
|
|
13
|
+
import "./chunk-6QSQQLSE.js";
|
|
14
|
+
import "./chunk-DE4DH2RZ.js";
|
|
15
|
+
import "./chunk-LQ4ZHOKP.js";
|
|
16
|
+
import "./chunk-LP7BEXCT.js";
|
|
17
|
+
import "./chunk-UYB234ZR.js";
|
|
18
|
+
import "./chunk-ODVPTDPK.js";
|
|
19
|
+
import "./chunk-244VXYPG.js";
|
|
20
|
+
export {
|
|
21
|
+
FROZEN_SNAPSHOTS_COLLECTION,
|
|
22
|
+
freezeAndDeleteClosure,
|
|
23
|
+
freezeSnapshotOnly,
|
|
24
|
+
randomId,
|
|
25
|
+
withdrawAccessibleData
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=withdraw-accessible-5NZUPAVA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|