@noy-db/hub 0.7.1-pre.0 → 0.8.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 +147 -14
- package/LICENSE +202 -21
- package/NOTICE +1 -0
- package/README.md +5 -5
- package/codemods/0.8.0-pre.json +61 -0
- package/dist/api-OS747DS4.js +18 -0
- package/dist/as/index.js +11 -12
- package/dist/as/index.js.map +1 -1
- package/dist/at/index.js +9 -10
- package/dist/attestation/index.js +37 -26
- package/dist/attestation/index.js.map +1 -1
- package/dist/{backup-XKCXVKV3.js → backup-YE2VQ26S.js} +15 -16
- package/dist/backup-YE2VQ26S.js.map +1 -0
- package/dist/blobs/index.js +13 -14
- package/dist/blobs/index.js.map +1 -1
- package/dist/broker/index.js +12 -13
- package/dist/broker/index.js.map +1 -1
- package/dist/by/index.js +2 -2
- package/dist/capsule/contract.d.ts +159 -0
- package/dist/capsule/contract.js +95 -0
- package/dist/capsule/enclave-aes/bound.d.ts +52 -0
- package/dist/capsule/enclave-aes/capabilities.d.ts +2 -0
- package/dist/capsule/enclave-aes/classify/compare.d.ts +20 -0
- package/dist/{kernel/enclave → capsule/enclave-aes}/classify/find.d.ts +1 -1
- package/dist/{kernel/enclave → capsule/enclave-aes}/classify/reveal.d.ts +1 -1
- package/dist/{kernel/enclave → capsule/enclave-aes}/classify/verify.d.ts +2 -2
- package/dist/{kernel/enclave → capsule/enclave-aes}/classify/write.d.ts +1 -1
- package/dist/{kernel/enclave → capsule/enclave-aes}/crypto.d.ts +33 -129
- package/dist/capsule/enclave-aes/index.d.ts +113 -0
- package/dist/capsule/enclave-aes/index.js +335 -0
- package/dist/capsule/enclave-aes/index.js.map +1 -0
- package/dist/capsule/enclave-aes/primitives.d.ts +29 -0
- package/dist/capsule/index.d.ts +27 -0
- package/dist/capsule/plumbing/ct-equal.d.ts +11 -0
- package/dist/{kernel/enclave/record-keys → capsule/plumbing}/deterministic.d.ts +8 -21
- package/dist/capsule/plumbing/digest.d.ts +122 -0
- package/dist/{kernel/enclave/record-keys → capsule/plumbing}/envelope-body.d.ts +44 -48
- package/dist/capsule/plumbing/index.d.ts +100 -0
- package/dist/capsule/plumbing/lifecycle.d.ts +50 -0
- package/dist/{kernel/enclave/record-keys → capsule/plumbing}/record-codec.d.ts +80 -20
- package/dist/{kernel/enclave → capsule/plumbing}/record-envelope.d.ts +1 -1
- package/dist/capsule/plumbing/rekey-blob.d.ts +33 -0
- package/dist/capsule/plumbing/rekey.d.ts +44 -0
- package/dist/capsule/plumbing/sealed-slot.d.ts +22 -0
- package/dist/capsule/plumbing/sealed-slots.d.ts +37 -0
- package/dist/capsule/plumbing/sealing.d.ts +29 -0
- package/dist/capsule/plumbing/sign.d.ts +9 -0
- package/dist/{kernel/enclave/record-keys → capsule/plumbing}/tombstone.d.ts +2 -2
- package/dist/capsule-VOLX3QRQ.js +209 -0
- package/dist/cargo/index.js +39 -36
- package/dist/{chunk-Q2MPFCQ7.js → chunk-23D6M6VM.js} +5 -5
- package/dist/chunk-23D6M6VM.js.map +1 -0
- package/dist/{chunk-R7BX2NB3.js → chunk-244QBK7Z.js} +4 -4
- package/dist/chunk-244QBK7Z.js.map +1 -0
- package/dist/chunk-2AFX33YA.js +936 -0
- package/dist/chunk-2AFX33YA.js.map +1 -0
- package/dist/{chunk-MVMXZYXT.js → chunk-2GHDLTPE.js} +2 -2
- package/dist/{chunk-GYGLAVCX.js → chunk-2MG3SW7Q.js} +6 -2
- package/dist/chunk-2MG3SW7Q.js.map +1 -0
- package/dist/{chunk-XLMEZIAJ.js → chunk-2ODVB6LZ.js} +2 -2
- package/dist/{chunk-HJUWN7JN.js → chunk-2PVXF5CS.js} +33 -8
- package/dist/chunk-2PVXF5CS.js.map +1 -0
- package/dist/{chunk-YJRT5UQM.js → chunk-2RH777HH.js} +21 -20
- package/dist/{chunk-YJRT5UQM.js.map → chunk-2RH777HH.js.map} +1 -1
- package/dist/{chunk-7O3Y4PPD.js → chunk-37EPTBBR.js} +153 -16
- package/dist/chunk-37EPTBBR.js.map +1 -0
- package/dist/{chunk-2ENE6445.js → chunk-3A5DUZ56.js} +102 -16
- package/dist/chunk-3A5DUZ56.js.map +1 -0
- package/dist/chunk-3EWS67C7.js +461 -0
- package/dist/chunk-3EWS67C7.js.map +1 -0
- package/dist/{chunk-SGZAIJCV.js → chunk-3L2NBKDR.js} +4 -8
- package/dist/chunk-3L2NBKDR.js.map +1 -0
- package/dist/{chunk-YMUFFJCO.js → chunk-3TDUWVWB.js} +5 -2
- package/dist/chunk-3TDUWVWB.js.map +1 -0
- package/dist/{chunk-4GVM6QZA.js → chunk-3XJQBBZD.js} +26 -28
- package/dist/chunk-3XJQBBZD.js.map +1 -0
- package/dist/{chunk-4ZS56W5S.js → chunk-42ALPZ2B.js} +672 -664
- package/dist/chunk-42ALPZ2B.js.map +1 -0
- package/dist/chunk-4CIQDWRB.js +524 -0
- package/dist/chunk-4CIQDWRB.js.map +1 -0
- package/dist/{chunk-RMS3NEA3.js → chunk-4JPMZTJY.js} +2 -2
- package/dist/{chunk-P3MG6QCN.js → chunk-4T3SE27M.js} +5 -9
- package/dist/chunk-4T3SE27M.js.map +1 -0
- package/dist/chunk-4V3Q35WG.js +204 -0
- package/dist/chunk-4V3Q35WG.js.map +1 -0
- package/dist/{chunk-NQKIUNW5.js → chunk-52MGURXO.js} +2 -2
- package/dist/{chunk-EQEYOJBM.js → chunk-5A4345TG.js} +4 -4
- package/dist/chunk-5A4345TG.js.map +1 -0
- package/dist/{chunk-334WSVOW.js → chunk-5FE75J4S.js} +6 -6
- package/dist/chunk-5FE75J4S.js.map +1 -0
- package/dist/chunk-5KC7QYEC.js +565 -0
- package/dist/chunk-5KC7QYEC.js.map +1 -0
- package/dist/{chunk-RSGLUIO6.js → chunk-5UMK7GRI.js} +13 -12
- package/dist/chunk-5UMK7GRI.js.map +1 -0
- package/dist/chunk-5WWDGFOS.js +275 -0
- package/dist/chunk-5WWDGFOS.js.map +1 -0
- package/dist/{chunk-QPQUVOZ2.js → chunk-6QVKPHBF.js} +3 -5
- package/dist/chunk-6QVKPHBF.js.map +1 -0
- package/dist/{chunk-ACAQ2DSG.js → chunk-747G6CT3.js} +2 -2
- package/dist/chunk-747G6CT3.js.map +1 -0
- package/dist/{chunk-QTQUH4DS.js → chunk-7R2Q7CPL.js} +16 -16
- package/dist/chunk-7R2Q7CPL.js.map +1 -0
- package/dist/{chunk-UGTBXF5U.js → chunk-7XMHMVTS.js} +3 -3
- package/dist/{chunk-YJX7EOJD.js → chunk-A4XMIZT3.js} +6 -6
- package/dist/{chunk-YJX7EOJD.js.map → chunk-A4XMIZT3.js.map} +1 -1
- package/dist/{chunk-A66I4JOA.js → chunk-AEQGFRU4.js} +4 -4
- package/dist/chunk-AEQGFRU4.js.map +1 -0
- package/dist/chunk-AL6ML4LA.js +1558 -0
- package/dist/chunk-AL6ML4LA.js.map +1 -0
- package/dist/{chunk-BZ3534YM.js → chunk-AUKKUPVB.js} +2 -2
- package/dist/{chunk-CUZLNGD5.js → chunk-B2YY6WDD.js} +1 -1
- package/dist/chunk-B2YY6WDD.js.map +1 -0
- package/dist/chunk-BKT776R5.js +1 -0
- package/dist/chunk-BNWA3WG5.js +22 -0
- package/dist/chunk-BNWA3WG5.js.map +1 -0
- package/dist/{chunk-VXANTWBJ.js → chunk-BPWYQ25R.js} +92 -6
- package/dist/{chunk-VXANTWBJ.js.map → chunk-BPWYQ25R.js.map} +1 -1
- package/dist/{chunk-6LKOJBV6.js → chunk-BVCUTXE3.js} +2 -2
- package/dist/chunk-CY2CYVWZ.js +41 -0
- package/dist/chunk-CY2CYVWZ.js.map +1 -0
- package/dist/{chunk-M4YPHYEH.js → chunk-DHHGL42E.js} +70 -25
- package/dist/chunk-DHHGL42E.js.map +1 -0
- package/dist/{chunk-VTFVLCUH.js → chunk-DIZLQVAA.js} +2 -2
- package/dist/{chunk-G73UVHCA.js → chunk-DLD5LGDS.js} +11 -12
- package/dist/chunk-DLD5LGDS.js.map +1 -0
- package/dist/{chunk-WQBG4SZS.js → chunk-DQESF6RP.js} +60 -49
- package/dist/chunk-DQESF6RP.js.map +1 -0
- package/dist/{chunk-LWBCUYZW.js → chunk-E2N2T5ZO.js} +2 -2
- package/dist/{chunk-3PGS7TYR.js → chunk-EGVJ7TM4.js} +29 -32
- package/dist/chunk-EGVJ7TM4.js.map +1 -0
- package/dist/{chunk-JVIBCBC7.js → chunk-EJLV62NI.js} +2 -2
- package/dist/{chunk-KKEESNPE.js → chunk-EYG2CY2X.js} +126 -19
- package/dist/chunk-EYG2CY2X.js.map +1 -0
- package/dist/{enclave-55PAM4YO.js → chunk-EZGV6F47.js} +83 -56
- package/dist/chunk-EZGV6F47.js.map +1 -0
- package/dist/{chunk-CHQCZZWC.js → chunk-EZOAKKTB.js} +36 -27
- package/dist/chunk-EZOAKKTB.js.map +1 -0
- package/dist/chunk-F6NCB7KT.js +13 -0
- package/dist/chunk-F6NCB7KT.js.map +1 -0
- package/dist/chunk-FFJFE4T7.js +100 -0
- package/dist/chunk-FFJFE4T7.js.map +1 -0
- package/dist/{chunk-JMGDHKQF.js → chunk-FLPCETP6.js} +2 -2
- package/dist/chunk-FOEDQATO.js +53 -0
- package/dist/chunk-FOEDQATO.js.map +1 -0
- package/dist/{chunk-DGOZ4UZD.js → chunk-FVH5QYY2.js} +2 -2
- package/dist/{chunk-HIWCKBEY.js → chunk-G2MVBDFP.js} +54 -28
- package/dist/chunk-G2MVBDFP.js.map +1 -0
- package/dist/chunk-GMKGGY7V.js +234 -0
- package/dist/chunk-GMKGGY7V.js.map +1 -0
- package/dist/{chunk-EIPVYUEP.js → chunk-GQ4MF3CM.js} +3 -3
- package/dist/chunk-GQ4MF3CM.js.map +1 -0
- package/dist/{chunk-PEOZ34EM.js → chunk-GSAK56VF.js} +1 -1
- package/dist/chunk-GSAK56VF.js.map +1 -0
- package/dist/{chunk-5VCRVKOZ.js → chunk-GUZET4SG.js} +12 -4
- package/dist/chunk-GUZET4SG.js.map +1 -0
- package/dist/{chunk-JBDFMYKQ.js → chunk-GZT3NQRA.js} +2 -2
- package/dist/{chunk-K23VKTN4.js → chunk-H23XHRTT.js} +19 -34
- package/dist/chunk-H23XHRTT.js.map +1 -0
- package/dist/{chunk-TFR7DSOV.js → chunk-H427H63K.js} +2 -2
- package/dist/{chunk-DFMWUOU5.js → chunk-H7JBY4P7.js} +23 -32
- package/dist/chunk-H7JBY4P7.js.map +1 -0
- package/dist/{chunk-SKGMN35F.js → chunk-HS554XAF.js} +3 -3
- package/dist/chunk-HS554XAF.js.map +1 -0
- package/dist/{chunk-HK67PX4J.js → chunk-HW7CMKUG.js} +1 -1
- package/dist/chunk-HW7CMKUG.js.map +1 -0
- package/dist/{chunk-3BVH633C.js → chunk-IMQKWR46.js} +5 -7
- package/dist/chunk-IMQKWR46.js.map +1 -0
- package/dist/{chunk-R42NSZI6.js → chunk-IUBMZPHM.js} +7 -7
- package/dist/chunk-IUBMZPHM.js.map +1 -0
- package/dist/{chunk-CUQPWYRX.js → chunk-IUT3GWP3.js} +75 -386
- package/dist/chunk-IUT3GWP3.js.map +1 -0
- package/dist/{chunk-RF6D3Y5E.js → chunk-JDEYF3PJ.js} +4 -8
- package/dist/{chunk-RF6D3Y5E.js.map → chunk-JDEYF3PJ.js.map} +1 -1
- package/dist/{chunk-PPTHY5QO.js → chunk-JIBUPZHA.js} +99 -8
- package/dist/chunk-JIBUPZHA.js.map +1 -0
- package/dist/{chunk-SMH6SRX7.js → chunk-JOSPH3E5.js} +2 -2
- package/dist/chunk-JQYKPKG6.js +193 -0
- package/dist/chunk-JQYKPKG6.js.map +1 -0
- package/dist/{chunk-7APJ6CO6.js → chunk-JSMTXZR3.js} +45 -13
- package/dist/chunk-JSMTXZR3.js.map +1 -0
- package/dist/chunk-JWWYRR4Q.js +12 -0
- package/dist/chunk-JWWYRR4Q.js.map +1 -0
- package/dist/{chunk-BVN6KXL2.js → chunk-KZXDLBY6.js} +14 -9
- package/dist/chunk-KZXDLBY6.js.map +1 -0
- package/dist/chunk-LGNDFRYC.js +23 -0
- package/dist/chunk-LGNDFRYC.js.map +1 -0
- package/dist/{chunk-XKWGNJ26.js → chunk-LIOVX5TJ.js} +7 -11
- package/dist/chunk-LIOVX5TJ.js.map +1 -0
- package/dist/{chunk-AYX7AINO.js → chunk-LNSVGRHO.js} +5 -7
- package/dist/chunk-LNSVGRHO.js.map +1 -0
- package/dist/chunk-M5B2W6YY.js +293 -0
- package/dist/chunk-M5B2W6YY.js.map +1 -0
- package/dist/chunk-MBMTND6D.js +456 -0
- package/dist/chunk-MBMTND6D.js.map +1 -0
- package/dist/{chunk-3BZZJJMQ.js → chunk-MILI22XQ.js} +3 -3
- package/dist/{chunk-A2HKRLPV.js → chunk-MXKI4ABF.js} +18 -59
- package/dist/chunk-MXKI4ABF.js.map +1 -0
- package/dist/{chunk-ZYIYHJ5R.js → chunk-MXOQ5JCG.js} +869 -238
- package/dist/chunk-MXOQ5JCG.js.map +1 -0
- package/dist/{chunk-V7ZRRCRJ.js → chunk-N7EVQD5S.js} +9 -13
- package/dist/chunk-N7EVQD5S.js.map +1 -0
- package/dist/chunk-N7UDP5VU.js +757 -0
- package/dist/chunk-N7UDP5VU.js.map +1 -0
- package/dist/chunk-NBQ3KK6X.js +270 -0
- package/dist/chunk-NBQ3KK6X.js.map +1 -0
- package/dist/{chunk-ZORTV6NH.js → chunk-NCO25JZO.js} +88 -4
- package/dist/chunk-NCO25JZO.js.map +1 -0
- package/dist/chunk-NH2UOV3B.js +18 -0
- package/dist/chunk-NH2UOV3B.js.map +1 -0
- package/dist/chunk-NYMLINRP.js +28 -0
- package/dist/chunk-NYMLINRP.js.map +1 -0
- package/dist/{chunk-YYP7WSEB.js → chunk-O2IMQSNA.js} +2 -2
- package/dist/chunk-O46CHQT7.js +215 -0
- package/dist/chunk-O46CHQT7.js.map +1 -0
- package/dist/chunk-OIEO4WDL.js +27 -0
- package/dist/chunk-OIEO4WDL.js.map +1 -0
- package/dist/{chunk-TRGTKX5E.js → chunk-OKSTSITU.js} +27 -4
- package/dist/chunk-OKSTSITU.js.map +1 -0
- package/dist/chunk-OYW3I5M4.js +31 -0
- package/dist/chunk-OYW3I5M4.js.map +1 -0
- package/dist/{chunk-Q7HZX3IF.js → chunk-PD64727P.js} +2 -2
- package/dist/chunk-PD64727P.js.map +1 -0
- package/dist/{chunk-FET5XCAT.js → chunk-PP3K67AJ.js} +34 -6
- package/dist/chunk-PP3K67AJ.js.map +1 -0
- package/dist/chunk-Q2XRFWOI.js +40 -0
- package/dist/chunk-Q2XRFWOI.js.map +1 -0
- package/dist/{chunk-QIZPZMUI.js → chunk-Q4UHJ5SN.js} +2 -2
- package/dist/{chunk-FAHMLERK.js → chunk-QBLT6POL.js} +2 -2
- package/dist/chunk-QMWY2FDS.js +157 -0
- package/dist/chunk-QMWY2FDS.js.map +1 -0
- package/dist/{chunk-LH5A3ZPG.js → chunk-RB4DOPGZ.js} +150 -22
- package/dist/chunk-RB4DOPGZ.js.map +1 -0
- package/dist/chunk-RHVMZSUU.js +7 -0
- package/dist/chunk-RHVMZSUU.js.map +1 -0
- package/dist/{chunk-BUE2D7PX.js → chunk-SMV2HRDU.js} +2 -2
- package/dist/chunk-SUZKW6UR.js +25 -0
- package/dist/chunk-SUZKW6UR.js.map +1 -0
- package/dist/{chunk-7MG7SJT7.js → chunk-SV2PM2OY.js} +1 -1
- package/dist/chunk-SV2PM2OY.js.map +1 -0
- package/dist/{chunk-UXVWEX5L.js → chunk-SYNY3VB5.js} +6 -2
- package/dist/chunk-SYNY3VB5.js.map +1 -0
- package/dist/{chunk-4GFX6MPA.js → chunk-TEHHROZL.js} +6 -8
- package/dist/chunk-TEHHROZL.js.map +1 -0
- package/dist/chunk-TKVUE4JF.js +1289 -0
- package/dist/chunk-TKVUE4JF.js.map +1 -0
- package/dist/{chunk-SFAWCTEM.js → chunk-TZZBXPZK.js} +2 -2
- package/dist/{chunk-F3W6YMDC.js → chunk-U2FZNEWJ.js} +4 -4
- package/dist/chunk-U2FZNEWJ.js.map +1 -0
- package/dist/{chunk-BLN54W3L.js → chunk-UA372JHH.js} +56 -3
- package/dist/chunk-UA372JHH.js.map +1 -0
- package/dist/{chunk-6YXCPL4T.js → chunk-UEFOQH74.js} +2 -2
- package/dist/chunk-UEFOQH74.js.map +1 -0
- package/dist/{chunk-2N5ML6HT.js → chunk-UIYESRD6.js} +9 -11
- package/dist/chunk-UIYESRD6.js.map +1 -0
- package/dist/{chunk-UHHPLO3I.js → chunk-V3RWOOSO.js} +4 -4
- package/dist/{chunk-KTFRCC5C.js → chunk-V7ADQF5O.js} +82 -8
- package/dist/chunk-V7ADQF5O.js.map +1 -0
- package/dist/{chunk-453F654R.js → chunk-VAORSCSU.js} +3 -3
- package/dist/chunk-VAORSCSU.js.map +1 -0
- package/dist/{chunk-GPNTB4Y7.js → chunk-VFHCKG5M.js} +6 -10
- package/dist/chunk-VFHCKG5M.js.map +1 -0
- package/dist/{chunk-2577DKXB.js → chunk-VHBKYN2J.js} +3 -3
- package/dist/chunk-VHBKYN2J.js.map +1 -0
- package/dist/chunk-VHM7HCKB.js +220 -0
- package/dist/chunk-VHM7HCKB.js.map +1 -0
- package/dist/{chunk-ZHKOPKE3.js → chunk-VKI2EB3N.js} +3 -3
- package/dist/chunk-VKI2EB3N.js.map +1 -0
- package/dist/{chunk-UDHWDSRL.js → chunk-VMV5SBE4.js} +16 -17
- package/dist/chunk-VMV5SBE4.js.map +1 -0
- package/dist/{chunk-SPYWXKJN.js → chunk-VQDZYB2B.js} +3 -3
- package/dist/chunk-VQDZYB2B.js.map +1 -0
- package/dist/{chunk-Q2PU57HC.js → chunk-VVOLDVIR.js} +2 -2
- package/dist/{chunk-3VF3WQ4F.js → chunk-WPOYWFSE.js} +7 -7
- package/dist/{chunk-3VF3WQ4F.js.map → chunk-WPOYWFSE.js.map} +1 -1
- package/dist/{chunk-OTQZ7ZWU.js → chunk-WXE4W2U6.js} +7 -11
- package/dist/chunk-WXE4W2U6.js.map +1 -0
- package/dist/chunk-XBKH4FOC.js +195 -0
- package/dist/chunk-XBKH4FOC.js.map +1 -0
- package/dist/{chunk-TUFM4UZP.js → chunk-XQRFSKYM.js} +2 -2
- package/dist/{chunk-3V4KWFX7.js → chunk-XSPFDUDG.js} +58 -53
- package/dist/chunk-XSPFDUDG.js.map +1 -0
- package/dist/{chunk-GY4WYNNG.js → chunk-Y2RKVFKR.js} +2 -2
- package/dist/{chunk-UP4BECPY.js → chunk-Y3LPTBG7.js} +89 -27
- package/dist/chunk-Y3LPTBG7.js.map +1 -0
- package/dist/{chunk-4OZNXTO4.js → chunk-YRXFFWG4.js} +2 -2
- package/dist/classified/index.js +5 -5
- package/dist/{classified-marker-BWOFVYAC.js → classified-marker-SIYKUU5L.js} +3 -3
- package/dist/classified-marker-SIYKUU5L.js.map +1 -0
- package/dist/collection-facade-CS7CA2XO.js +47 -0
- package/dist/{computed-VPOKQK4N.js → computed-FAD7SED4.js} +3 -3
- package/dist/consent/index.js +10 -11
- package/dist/consent/index.js.map +1 -1
- package/dist/cover/index.js +10 -11
- package/dist/coverage/index.js +306 -0
- package/dist/coverage/index.js.map +1 -0
- package/dist/custody/index.js +12 -13
- package/dist/{dead-filter-PKQDLOT4.js → dead-filter-4F3LWYKH.js} +11 -3
- package/dist/dead-filter-4F3LWYKH.js.map +1 -0
- package/dist/debug/index.js +11 -2
- package/dist/debug/index.js.map +1 -1
- package/dist/{delegation-DS5NRILW.js → delegation-NANZDG4N.js} +13 -16
- package/dist/delegation-NANZDG4N.js.map +1 -0
- package/dist/derivations/index.js +25 -23
- package/dist/derive-XLOJVXPU.js +20 -0
- package/dist/directory/index.js +10 -11
- package/dist/{dispatch-IEPAVQUM.js → dispatch-H4HV32AM.js} +5 -5
- package/dist/{dispatch-Q6MWLOJY.js → dispatch-JDZNGEB3.js} +20 -21
- package/dist/dispatch-JDZNGEB3.js.map +1 -0
- package/dist/executor-FMPVN6DT.js +35 -0
- package/dist/executor-LBBBRTN5.js +8 -0
- package/dist/executor-OSRZST2U.js +8 -0
- package/dist/export-accessible-RAOJAAU5.js +22 -0
- package/dist/extract-partition-JD5CUSTG.js +37 -0
- package/dist/{fanout-sidecar-S3QL53YX.js → fanout-sidecar-L7NHPIOC.js} +13 -15
- package/dist/fanout-sidecar-L7NHPIOC.js.map +1 -0
- package/dist/find-JRN4RNQ5.js +10 -0
- package/dist/forget/index.js +9 -10
- package/dist/forget/index.js.map +1 -1
- package/dist/guards/index.js +4 -4
- package/dist/history/index.js +13 -14
- package/dist/history/index.js.map +1 -1
- package/dist/i18n/index.js +14 -15
- package/dist/i18n/index.js.map +1 -1
- package/dist/index.d.ts +36 -14
- package/dist/index.js +970 -163
- 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 -12
- package/dist/issue-YIVBZUTH.js +19 -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/attestation-types.d.ts +62 -0
- package/dist/kernel/collection-config.d.ts +5 -68
- package/dist/kernel/collection.d.ts +30 -9
- package/dist/kernel/cutover-transform.d.ts +1 -1
- package/dist/kernel/errors.d.ts +257 -38
- package/dist/kernel/generation-map.d.ts +48 -0
- package/dist/kernel/merge-authority.d.ts +1 -1
- package/dist/kernel/noydb.d.ts +6 -1
- package/dist/kernel/paths.d.ts +29 -5
- package/dist/kernel/prepared-write.d.ts +1 -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/secret-mode.d.ts +1 -1
- package/dist/kernel/tx-write-gate.d.ts +77 -0
- package/dist/kernel/types.d.ts +113 -8
- package/dist/kernel/validation.d.ts +27 -10
- package/dist/kernel/vault.d.ts +11 -6
- 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/kernel/write-queue.d.ts +17 -0
- package/dist/{ledger-EDXFFZQL.js → ledger-5ZMGE44K.js} +11 -12
- package/dist/liberate-WZSZM2W6.js +24 -0
- package/dist/link-set-MFXC24VK.js +29 -0
- package/dist/{managed-secret-NCWEMPUQ.js → managed-secret-MFTFT22X.js} +10 -11
- package/dist/materialized-views/index.js +30 -24
- package/dist/{migrate-cek-5ENH64AA.js → migrate-cek-DZRFFOHW.js} +2 -2
- package/dist/money/index.js +5 -5
- package/dist/noydb-ITIGNKUF.js +96 -0
- package/dist/overlay-views/index.js +4 -4
- package/dist/periods/index.js +12 -13
- package/dist/pod/index.js +74 -67
- package/dist/{pod-handle-ECVCDIXW.js → pod-handle-A3LET7NO.js} +10 -11
- package/dist/pod-handle-A3LET7NO.js.map +1 -0
- package/dist/policy/index.js +10 -11
- package/dist/port/on/index.d.ts +1 -1
- package/dist/port/to/index.d.ts +1 -1
- package/dist/port/with/blob-strategy.d.ts +10 -1
- package/dist/port/with/classified-strategy.d.ts +1 -1
- package/dist/port/with/collection-options.d.ts +6 -1
- package/dist/port/with/collection-registries.d.ts +1 -1
- package/dist/port/with/coverage-strategy.d.ts +83 -0
- package/dist/port/with/lookup-strategy.d.ts +2 -2
- 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-3IPCSG6Q.js → post-register-7ND27CF2.js} +6 -6
- package/dist/post-register-7ND27CF2.js.map +1 -0
- 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-DT5HZ2LZ.js +30 -0
- package/dist/registry-BHRZGZHF.js +8 -0
- package/dist/registry-ET6ZFFWA.js +34 -0
- package/dist/registry-HXFGLGTG.js +8 -0
- package/dist/registry-THCPDEOD.js +23 -0
- package/dist/request-withdrawal-AV2MJJKY.js +30 -0
- package/dist/{reveal-QZDHSGD4.js → reveal-B2TLP4JQ.js} +10 -9
- package/dist/reveal-B2TLP4JQ.js.map +1 -0
- package/dist/revoke-6DWIEOCV.js +24 -0
- package/dist/satellites/index.js +1 -1
- package/dist/schema-update/index.js +2 -2
- package/dist/sealed-record/index.js +16 -18
- package/dist/sealed-record/index.js.map +1 -1
- package/dist/search/index.js +11 -5
- package/dist/{seed-X5CC22CQ.js → seed-XNSE4U3S.js} +15 -18
- package/dist/seed-XNSE4U3S.js.map +1 -0
- package/dist/sequence/index.js +9 -10
- package/dist/session/index.js +9 -10
- package/dist/session/index.js.map +1 -1
- package/dist/shadow/index.js +2 -2
- package/dist/signer-MHGW3OIL.js +23 -0
- package/dist/snapshots/index.js +11 -11
- package/dist/stale-6GCFMOOR.js +28 -0
- package/dist/storage-BYN5LO6Z.js +21 -0
- package/dist/storage-BYN5LO6Z.js.map +1 -0
- package/dist/store/index.js +1 -1
- package/dist/{store-coordination-provider-4WZAIRHC.js → store-coordination-provider-C4BPT5XF.js} +11 -12
- package/dist/store-coordination-provider-C4BPT5XF.js.map +1 -0
- package/dist/sync/index.js +10 -11
- package/dist/sync/index.js.map +1 -1
- package/dist/team/index.js +17 -16
- package/dist/tiers/index.js +13 -12
- 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 +11 -14
- package/dist/vault-head/index.js.map +1 -1
- package/dist/{verify-6MDTIUEV.js → verify-UKALW7C2.js} +14 -12
- package/dist/verify-UKALW7C2.js.map +1 -0
- package/dist/via/blob/index.d.ts +1 -0
- package/dist/via/classified/binding.d.ts +2 -2
- package/dist/via/classified/config-drift.d.ts +2 -2
- package/dist/via/classified/errors.d.ts +1 -1
- 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/handle.d.ts +4 -4
- package/dist/via/lookup/registry.d.ts +1 -1
- package/dist/via/lookup/snapshot.d.ts +3 -3
- package/dist/walk-4VPK7AS4.js +20 -0
- package/dist/walk-4VPK7AS4.js.map +1 -0
- package/dist/with-audit/attestation/index.d.ts +2 -1
- package/dist/with-audit/attestation/issue.d.ts +2 -2
- package/dist/with-audit/attestation/revoke.d.ts +2 -2
- package/dist/with-audit/attestation/scheme.d.ts +7 -0
- package/dist/with-audit/attestation/signer.d.ts +1 -1
- package/dist/with-audit/attestation/strategy.d.ts +2 -2
- package/dist/with-audit/attestation/types.d.ts +10 -0
- package/dist/with-audit/attestation/vault-facade.d.ts +2 -2
- package/dist/with-audit/attestation/verifier.d.ts +6 -0
- package/dist/with-audit/consent/consent.d.ts +1 -1
- package/dist/with-audit/consent/strategy.d.ts +1 -1
- 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/forget/subject-index.d.ts +1 -1
- 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 +18 -1
- package/dist/with-audit/sealed-record/index.d.ts +2 -2
- package/dist/with-audit/sealed-record/strategy.d.ts +1 -1
- package/dist/with-audit/tiers/index.d.ts +53 -2
- package/dist/with-audit/tiers/strategy.d.ts +8 -0
- package/dist/with-cargo/adopt-partition.d.ts +1 -1
- package/dist/with-cargo/extract-partition.d.ts +1 -1
- package/dist/with-cargo/floor.d.ts +3 -3
- package/dist/with-commit/history/history.d.ts +2 -2
- package/dist/with-commit/history/index.d.ts +1 -1
- package/dist/with-commit/history/ledger/store.d.ts +1 -1
- package/dist/with-commit/history/strategy.d.ts +1 -1
- package/dist/with-commit/history/time-machine.d.ts +1 -1
- package/dist/with-commit/numbering/index.d.ts +1 -1
- package/dist/with-commit/sequence/index.d.ts +1 -1
- package/dist/with-commit/tx/invariants.d.ts +1 -1
- package/dist/with-commit/tx/transaction.d.ts +13 -3
- package/dist/with-commit/vault-head/head.d.ts +1 -1
- package/dist/with-commit/vault-head/index.d.ts +1 -1
- package/dist/with-commit/vault-head/strategy.d.ts +1 -1
- package/dist/with-commit/vault-head/verify.d.ts +1 -1
- package/dist/with-formula/derivations/dispatch.d.ts +1 -1
- package/dist/with-formula/derivations/fanout-sidecar.d.ts +1 -1
- 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 +86 -3
- 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 +45 -9
- 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/broker/index.d.ts +3 -3
- 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/directory/user-envelope/storage.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/delegation.d.ts +1 -1
- package/dist/with-party/team/echo-secret.d.ts +2 -2
- package/dist/with-party/team/index.d.ts +4 -3
- package/dist/with-party/team/keyring.d.ts +2 -2
- package/dist/with-party/team/magic-link-grant.d.ts +1 -1
- 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/recovery.d.ts +1 -1
- package/dist/with-party/team/roster-tag.d.ts +1 -1
- package/dist/with-party/team/rotate-recover.d.ts +1 -1
- package/dist/with-party/team/wrapped-deks.d.ts +1 -1
- package/dist/with-pod/format.d.ts +1 -1
- package/dist/with-pod/index.d.ts +1 -1
- package/dist/with-pod/pod.d.ts +1 -1
- package/dist/with-shape/blobs/blob-compaction.d.ts +17 -1
- package/dist/with-shape/blobs/blob-intent.d.ts +1 -1
- package/dist/with-shape/blobs/blob-set.d.ts +23 -4
- package/dist/with-shape/blobs/legacy-sweep.d.ts +35 -0
- package/dist/with-shape/introspection/describe.d.ts +7 -1
- 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/introspection/walk.d.ts +1 -1
- package/dist/with-shape/links/lazy-handle.d.ts +1 -1
- package/dist/with-shape/links/link-set.d.ts +1 -1
- package/dist/with-shape/links/vault-facade.d.ts +1 -1
- package/dist/with-shape/manifest/derive.d.ts +1 -1
- package/dist/with-shape/manifest/storage.d.ts +1 -1
- package/dist/with-shape/persisted-schemas/register.d.ts +1 -1
- package/dist/with-shape/persisted-schemas/storage.d.ts +1 -1
- package/dist/with-shape/satellites/dead-filter.d.ts +1 -1
- package/dist/with-shape/satellites/declare.d.ts +1 -1
- package/dist/with-shape/satellites/marker.d.ts +1 -1
- package/dist/with-shape/satellites/post-register.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/with-sync/presence.d.ts +5 -10
- package/dist/withdraw-accessible-HL7GACUE.js +27 -0
- package/dist/withdraw-accessible-HL7GACUE.js.map +1 -0
- package/package.json +48 -12
- package/dist/api-WYW4YEQG.js +0 -19
- package/dist/backup-XKCXVKV3.js.map +0 -1
- package/dist/chunk-2577DKXB.js.map +0 -1
- package/dist/chunk-2ENE6445.js.map +0 -1
- package/dist/chunk-2N5ML6HT.js.map +0 -1
- package/dist/chunk-334WSVOW.js.map +0 -1
- package/dist/chunk-3BVH633C.js.map +0 -1
- package/dist/chunk-3PGS7TYR.js.map +0 -1
- package/dist/chunk-3V4KWFX7.js.map +0 -1
- package/dist/chunk-453F654R.js.map +0 -1
- package/dist/chunk-4GFX6MPA.js.map +0 -1
- package/dist/chunk-4GVM6QZA.js.map +0 -1
- package/dist/chunk-4ZS56W5S.js.map +0 -1
- package/dist/chunk-5VCRVKOZ.js.map +0 -1
- package/dist/chunk-6YXCPL4T.js.map +0 -1
- package/dist/chunk-7APJ6CO6.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-A2HKRLPV.js.map +0 -1
- package/dist/chunk-A66I4JOA.js.map +0 -1
- package/dist/chunk-ACAQ2DSG.js.map +0 -1
- package/dist/chunk-ATL3ZVXT.js +0 -151
- package/dist/chunk-ATL3ZVXT.js.map +0 -1
- package/dist/chunk-AYX7AINO.js.map +0 -1
- package/dist/chunk-BLN54W3L.js.map +0 -1
- package/dist/chunk-BRLKZUBT.js +0 -95
- package/dist/chunk-BRLKZUBT.js.map +0 -1
- package/dist/chunk-BTDR2PXY.js +0 -29
- package/dist/chunk-BTDR2PXY.js.map +0 -1
- package/dist/chunk-BVN6KXL2.js.map +0 -1
- package/dist/chunk-CHQCZZWC.js.map +0 -1
- package/dist/chunk-CUQPWYRX.js.map +0 -1
- package/dist/chunk-CUZLNGD5.js.map +0 -1
- package/dist/chunk-DFMWUOU5.js.map +0 -1
- package/dist/chunk-EIPVYUEP.js.map +0 -1
- package/dist/chunk-EQEYOJBM.js.map +0 -1
- package/dist/chunk-F3W6YMDC.js.map +0 -1
- package/dist/chunk-FET5XCAT.js.map +0 -1
- package/dist/chunk-G73UVHCA.js.map +0 -1
- package/dist/chunk-GPNTB4Y7.js.map +0 -1
- package/dist/chunk-GYGLAVCX.js.map +0 -1
- package/dist/chunk-HIWCKBEY.js.map +0 -1
- package/dist/chunk-HJUWN7JN.js.map +0 -1
- package/dist/chunk-HK67PX4J.js.map +0 -1
- package/dist/chunk-HPVZCW43.js +0 -479
- package/dist/chunk-HPVZCW43.js.map +0 -1
- package/dist/chunk-I3ISCYT7.js +0 -159
- package/dist/chunk-I3ISCYT7.js.map +0 -1
- package/dist/chunk-K23VKTN4.js.map +0 -1
- package/dist/chunk-KKEESNPE.js.map +0 -1
- package/dist/chunk-KTFRCC5C.js.map +0 -1
- package/dist/chunk-LH5A3ZPG.js.map +0 -1
- package/dist/chunk-LP7BEXCT.js +0 -32
- package/dist/chunk-LP7BEXCT.js.map +0 -1
- package/dist/chunk-M4YPHYEH.js.map +0 -1
- package/dist/chunk-NSITFOCJ.js +0 -99
- package/dist/chunk-NSITFOCJ.js.map +0 -1
- package/dist/chunk-OTQZ7ZWU.js.map +0 -1
- package/dist/chunk-P3MG6QCN.js.map +0 -1
- package/dist/chunk-PEOZ34EM.js.map +0 -1
- package/dist/chunk-PPTHY5QO.js.map +0 -1
- package/dist/chunk-Q2MPFCQ7.js.map +0 -1
- package/dist/chunk-Q7HZX3IF.js.map +0 -1
- package/dist/chunk-QPQUVOZ2.js.map +0 -1
- package/dist/chunk-QTQUH4DS.js.map +0 -1
- package/dist/chunk-R42NSZI6.js.map +0 -1
- package/dist/chunk-R7BX2NB3.js.map +0 -1
- package/dist/chunk-RSGLUIO6.js.map +0 -1
- package/dist/chunk-RTBJ5IOO.js +0 -87
- package/dist/chunk-RTBJ5IOO.js.map +0 -1
- package/dist/chunk-SGZAIJCV.js.map +0 -1
- package/dist/chunk-SKGMN35F.js.map +0 -1
- package/dist/chunk-SPYWXKJN.js.map +0 -1
- package/dist/chunk-SZJ3DLZA.js +0 -66
- package/dist/chunk-SZJ3DLZA.js.map +0 -1
- package/dist/chunk-TRGTKX5E.js.map +0 -1
- package/dist/chunk-UDHWDSRL.js.map +0 -1
- package/dist/chunk-UP4BECPY.js.map +0 -1
- package/dist/chunk-UXVWEX5L.js.map +0 -1
- package/dist/chunk-V7ZRRCRJ.js.map +0 -1
- package/dist/chunk-WQBG4SZS.js.map +0 -1
- package/dist/chunk-XKWGNJ26.js.map +0 -1
- package/dist/chunk-YMUFFJCO.js.map +0 -1
- package/dist/chunk-ZHKOPKE3.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/chunk-ZYIYHJ5R.js.map +0 -1
- package/dist/classified-marker-BWOFVYAC.js.map +0 -1
- package/dist/collection-facade-JSJYIKS4.js +0 -45
- package/dist/dead-filter-PKQDLOT4.js.map +0 -1
- package/dist/delegation-DS5NRILW.js.map +0 -1
- package/dist/derive-E642AOUB.js +0 -21
- package/dist/dispatch-Q6MWLOJY.js.map +0 -1
- package/dist/executor-5NIMLSKZ.js +0 -8
- package/dist/executor-7UQ3BZ4F.js +0 -29
- package/dist/executor-AQVXV5GZ.js +0 -8
- package/dist/export-accessible-ORMKLA3E.js +0 -22
- package/dist/extract-partition-NKYO3WNG.js +0 -37
- package/dist/fanout-sidecar-S3QL53YX.js.map +0 -1
- package/dist/find-NOGJ25VX.js +0 -10
- package/dist/issue-3DTQ7VJJ.js +0 -18
- package/dist/json-schema-V3M5MUCM.js.map +0 -1
- package/dist/kernel/enclave/classify/compare.d.ts +0 -10
- package/dist/kernel/enclave/index.d.ts +0 -87
- package/dist/kernel/enclave/record-keys/lifecycle.d.ts +0 -124
- package/dist/kernel/enclave/record-keys/rekey-blob.d.ts +0 -88
- package/dist/kernel/enclave/record-keys/rekey.d.ts +0 -91
- package/dist/kernel/enclave/record-keys/sealed-slot.d.ts +0 -14
- package/dist/kernel/enclave/record-keys/sealed-slots.d.ts +0 -123
- package/dist/kernel/enclave/record-keys/sealing.d.ts +0 -70
- package/dist/kernel/query/join.d.ts +0 -232
- package/dist/liberate-V35QUHJP.js +0 -24
- package/dist/link-set-2TTM3IZC.js +0 -30
- package/dist/noydb-62MX4QUG.js +0 -90
- package/dist/pod-handle-ECVCDIXW.js.map +0 -1
- package/dist/post-register-3IPCSG6Q.js.map +0 -1
- package/dist/register-HHLXEQDN.js +0 -31
- package/dist/registry-23WF3TGH.js +0 -8
- package/dist/registry-4AYVUNXK.js +0 -8
- package/dist/registry-JS3YFQQM.js +0 -18
- package/dist/registry-XX2Z7B46.js +0 -32
- package/dist/request-withdrawal-CHPATE4G.js +0 -30
- package/dist/reveal-QZDHSGD4.js.map +0 -1
- package/dist/revoke-7M2VW4ON.js +0 -23
- package/dist/seed-X5CC22CQ.js.map +0 -1
- package/dist/signer-SJQJVSM6.js +0 -24
- package/dist/stale-BZS6H2RY.js +0 -29
- package/dist/storage-RW4QBS23.js +0 -22
- package/dist/store-coordination-provider-4WZAIRHC.js.map +0 -1
- package/dist/verify-6MDTIUEV.js.map +0 -1
- package/dist/walk-ZURCH6RZ.js +0 -21
- package/dist/withdraw-accessible-PXR4IXDX.js +0 -27
- /package/dist/{api-WYW4YEQG.js.map → api-OS747DS4.js.map} +0 -0
- /package/dist/{computed-VPOKQK4N.js.map → capsule/contract.js.map} +0 -0
- /package/dist/{kernel/enclave → capsule/enclave-aes}/broker/proof.d.ts +0 -0
- /package/dist/{kernel/enclave → capsule/enclave-aes}/classify/bidx.d.ts +0 -0
- /package/dist/{kernel/enclave → capsule/enclave-aes}/classify/digest.d.ts +0 -0
- /package/dist/{kernel/enclave → capsule/enclave-aes}/classify/vdig.d.ts +0 -0
- /package/dist/{kernel/enclave/classify → capsule/plumbing}/kofn.d.ts +0 -0
- /package/dist/{kernel/enclave/classify → capsule/plumbing}/normalize.d.ts +0 -0
- /package/dist/{kernel/enclave → capsule/plumbing}/record-aad.d.ts +0 -0
- /package/dist/{collection-facade-JSJYIKS4.js.map → capsule-VOLX3QRQ.js.map} +0 -0
- /package/dist/{chunk-MVMXZYXT.js.map → chunk-2GHDLTPE.js.map} +0 -0
- /package/dist/{chunk-XLMEZIAJ.js.map → chunk-2ODVB6LZ.js.map} +0 -0
- /package/dist/{chunk-RMS3NEA3.js.map → chunk-4JPMZTJY.js.map} +0 -0
- /package/dist/{chunk-NQKIUNW5.js.map → chunk-52MGURXO.js.map} +0 -0
- /package/dist/{chunk-UGTBXF5U.js.map → chunk-7XMHMVTS.js.map} +0 -0
- /package/dist/{chunk-BZ3534YM.js.map → chunk-AUKKUPVB.js.map} +0 -0
- /package/dist/{derive-E642AOUB.js.map → chunk-BKT776R5.js.map} +0 -0
- /package/dist/{chunk-6LKOJBV6.js.map → chunk-BVCUTXE3.js.map} +0 -0
- /package/dist/{chunk-VTFVLCUH.js.map → chunk-DIZLQVAA.js.map} +0 -0
- /package/dist/{chunk-LWBCUYZW.js.map → chunk-E2N2T5ZO.js.map} +0 -0
- /package/dist/{chunk-JVIBCBC7.js.map → chunk-EJLV62NI.js.map} +0 -0
- /package/dist/{chunk-JMGDHKQF.js.map → chunk-FLPCETP6.js.map} +0 -0
- /package/dist/{chunk-DGOZ4UZD.js.map → chunk-FVH5QYY2.js.map} +0 -0
- /package/dist/{chunk-JBDFMYKQ.js.map → chunk-GZT3NQRA.js.map} +0 -0
- /package/dist/{chunk-TFR7DSOV.js.map → chunk-H427H63K.js.map} +0 -0
- /package/dist/{chunk-SMH6SRX7.js.map → chunk-JOSPH3E5.js.map} +0 -0
- /package/dist/{chunk-3BZZJJMQ.js.map → chunk-MILI22XQ.js.map} +0 -0
- /package/dist/{chunk-YYP7WSEB.js.map → chunk-O2IMQSNA.js.map} +0 -0
- /package/dist/{chunk-QIZPZMUI.js.map → chunk-Q4UHJ5SN.js.map} +0 -0
- /package/dist/{chunk-FAHMLERK.js.map → chunk-QBLT6POL.js.map} +0 -0
- /package/dist/{chunk-BUE2D7PX.js.map → chunk-SMV2HRDU.js.map} +0 -0
- /package/dist/{chunk-SFAWCTEM.js.map → chunk-TZZBXPZK.js.map} +0 -0
- /package/dist/{chunk-UHHPLO3I.js.map → chunk-V3RWOOSO.js.map} +0 -0
- /package/dist/{chunk-Q2PU57HC.js.map → chunk-VVOLDVIR.js.map} +0 -0
- /package/dist/{chunk-TUFM4UZP.js.map → chunk-XQRFSKYM.js.map} +0 -0
- /package/dist/{chunk-GY4WYNNG.js.map → chunk-Y2RKVFKR.js.map} +0 -0
- /package/dist/{chunk-4OZNXTO4.js.map → chunk-YRXFFWG4.js.map} +0 -0
- /package/dist/{enclave-55PAM4YO.js.map → collection-facade-CS7CA2XO.js.map} +0 -0
- /package/dist/{executor-5NIMLSKZ.js.map → computed-FAD7SED4.js.map} +0 -0
- /package/dist/{executor-7UQ3BZ4F.js.map → derive-XLOJVXPU.js.map} +0 -0
- /package/dist/{dispatch-IEPAVQUM.js.map → dispatch-H4HV32AM.js.map} +0 -0
- /package/dist/{executor-AQVXV5GZ.js.map → executor-FMPVN6DT.js.map} +0 -0
- /package/dist/{export-accessible-ORMKLA3E.js.map → executor-LBBBRTN5.js.map} +0 -0
- /package/dist/{extract-partition-NKYO3WNG.js.map → executor-OSRZST2U.js.map} +0 -0
- /package/dist/{find-NOGJ25VX.js.map → export-accessible-RAOJAAU5.js.map} +0 -0
- /package/dist/{issue-3DTQ7VJJ.js.map → extract-partition-JD5CUSTG.js.map} +0 -0
- /package/dist/{ledger-EDXFFZQL.js.map → find-JRN4RNQ5.js.map} +0 -0
- /package/dist/{liberate-V35QUHJP.js.map → issue-YIVBZUTH.js.map} +0 -0
- /package/dist/{link-set-2TTM3IZC.js.map → ledger-5ZMGE44K.js.map} +0 -0
- /package/dist/{managed-secret-NCWEMPUQ.js.map → liberate-WZSZM2W6.js.map} +0 -0
- /package/dist/{noydb-62MX4QUG.js.map → link-set-MFXC24VK.js.map} +0 -0
- /package/dist/{register-HHLXEQDN.js.map → managed-secret-MFTFT22X.js.map} +0 -0
- /package/dist/{migrate-cek-5ENH64AA.js.map → migrate-cek-DZRFFOHW.js.map} +0 -0
- /package/dist/{registry-23WF3TGH.js.map → noydb-ITIGNKUF.js.map} +0 -0
- /package/dist/{registry-4AYVUNXK.js.map → query/all/index.js.map} +0 -0
- /package/dist/{registry-JS3YFQQM.js.map → register-DT5HZ2LZ.js.map} +0 -0
- /package/dist/{registry-XX2Z7B46.js.map → registry-BHRZGZHF.js.map} +0 -0
- /package/dist/{request-withdrawal-CHPATE4G.js.map → registry-ET6ZFFWA.js.map} +0 -0
- /package/dist/{revoke-7M2VW4ON.js.map → registry-HXFGLGTG.js.map} +0 -0
- /package/dist/{signer-SJQJVSM6.js.map → registry-THCPDEOD.js.map} +0 -0
- /package/dist/{stale-BZS6H2RY.js.map → request-withdrawal-AV2MJJKY.js.map} +0 -0
- /package/dist/{storage-RW4QBS23.js.map → revoke-6DWIEOCV.js.map} +0 -0
- /package/dist/{walk-ZURCH6RZ.js.map → signer-MHGW3OIL.js.map} +0 -0
- /package/dist/{withdraw-accessible-PXR4IXDX.js.map → stale-6GCFMOOR.js.map} +0 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incremental (delta) maintenance for `.live()` — #1341.
|
|
3
|
+
*
|
|
4
|
+
* A live query used to re-run its whole plan on every change event: scan
|
|
5
|
+
* every record in the collection, re-evaluate every clause, re-sort, re-slice.
|
|
6
|
+
* That is O(N log N) per keystroke-sized mutation and is what makes a reactive
|
|
7
|
+
* list unusable at 10k+ rows.
|
|
8
|
+
*
|
|
9
|
+
* This module maintains the match set instead. Given a change event
|
|
10
|
+
* `{ id, action }` it re-evaluates the predicate for **that record only** and
|
|
11
|
+
* splices it into (or out of) a sorted array, so the per-change cost is
|
|
12
|
+
* O(log k) comparisons + one array splice, where k is the number of MATCHING
|
|
13
|
+
* records rather than N.
|
|
14
|
+
*
|
|
15
|
+
* ## The correctness contract
|
|
16
|
+
*
|
|
17
|
+
* The maintained array must be **identical** — same records, same order — to
|
|
18
|
+
* what a full re-run would produce, at every step. Two things buy that:
|
|
19
|
+
*
|
|
20
|
+
* 1. **Membership is delegated.** The caller passes the very `matches()`
|
|
21
|
+
* closure the full pipeline uses (`filterRecords` over the plan's
|
|
22
|
+
* clauses), so a maintained membership decision cannot drift from an
|
|
23
|
+
* eagerly-computed one. This module never re-implements a predicate.
|
|
24
|
+
*
|
|
25
|
+
* 2. **The ordering is delegated too, and then made total.** The sort keys
|
|
26
|
+
* are read and ranked by the query's own order key plan — the same
|
|
27
|
+
* `buildOrderKeyPlan`/`orderKeyOf`/`compareOrderKeys` trio `sortRecords`
|
|
28
|
+
* sorts with and the keyset cursor compares against (#1346), so there is
|
|
29
|
+
* one definition of "what order is this query in" rather than two that
|
|
30
|
+
* drift. What that trio does NOT decide is equal keys: `compareOrderKeys`
|
|
31
|
+
* is handed two KEY TUPLES, not two records, so with equal keys its
|
|
32
|
+
* inputs are indistinguishable and 0 is the only answer it can give —
|
|
33
|
+
* structurally, not by convention. (#1346 breaks its own ties one level
|
|
34
|
+
* up, at the `page()` call site, never inside the comparator.) The eager
|
|
35
|
+
* path lets its stable sort resolve those, leaving them in candidate =
|
|
36
|
+
* snapshot order; we append each record's snapshot position as a final
|
|
37
|
+
* key, which is the same resolution stated explicitly — and being
|
|
38
|
+
* explicit is what lets a binary search land on an exact index.
|
|
39
|
+
*
|
|
40
|
+
* ⚠️ That rests on one property of the backing cache: **snapshot order is
|
|
41
|
+
* `Map` insertion order.** `Map.set` on an existing key keeps its slot
|
|
42
|
+
* (so an update never moves a record), a new key appends (so a new record
|
|
43
|
+
* sorts last among ties), and `delete` removes without reordering the
|
|
44
|
+
* rest. `Collection`'s eager cache is a `Map`, so this holds. A source
|
|
45
|
+
* whose snapshot order is not insertion-stable must not be maintained —
|
|
46
|
+
* it would produce a correct SET in a wrong ORDER among ties.
|
|
47
|
+
*
|
|
48
|
+
* Anything not provably patchable falls back to a full rebuild: an unknown
|
|
49
|
+
* (payload-less) change event, an error thrown mid-patch, or a plan shape
|
|
50
|
+
* `canMaintainIncrementally()` refuses. **The fallback is the default** —
|
|
51
|
+
* `canMaintainIncrementally` is a whitelist, not a blacklist.
|
|
52
|
+
*
|
|
53
|
+
* ## Stacking on top of it
|
|
54
|
+
*
|
|
55
|
+
* `apply()` reports what it did as a `PatchOutcome`, and `maintainedEntries()`
|
|
56
|
+
* exposes the set with its snapshot sequence numbers. Together those let a
|
|
57
|
+
* DERIVED maintainer mirror this one without forking its membership logic —
|
|
58
|
+
* which is exactly what per-group maintenance for
|
|
59
|
+
* `groupBy().aggregate().live()` does (`with-lookup/reduce/incremental-group.ts`).
|
|
60
|
+
* A layer built that way inherits the whitelist and the fallback rather than
|
|
61
|
+
* re-deciding them, so there is one answer to "can this plan be maintained"
|
|
62
|
+
* rather than two that drift.
|
|
63
|
+
*/
|
|
64
|
+
import type { Clause } from '../predicate.js';
|
|
65
|
+
import type { OrderBy } from '../builder.js';
|
|
66
|
+
/**
|
|
67
|
+
* The delta a source hands to its `subscribe` callback: which record changed
|
|
68
|
+
* and whether it was written or removed. Deliberately the same shape as the
|
|
69
|
+
* hub-level `ChangeEvent` minus the vault/collection routing fields, which
|
|
70
|
+
* the source has already filtered on.
|
|
71
|
+
*
|
|
72
|
+
* A source that cannot say WHICH record changed simply calls its callback with
|
|
73
|
+
* no argument — every consumer treats that as "rebuild from scratch", which is
|
|
74
|
+
* exactly the pre-#1341 behaviour.
|
|
75
|
+
*/
|
|
76
|
+
export interface SourceChange {
|
|
77
|
+
readonly id: string;
|
|
78
|
+
readonly action: 'put' | 'delete';
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* One side of a patch: a record that entered or left the maintained set, with
|
|
82
|
+
* the snapshot sequence number it occupies. `seq` is what makes a patch
|
|
83
|
+
* composable — a layer built ON TOP of the match set (grouped aggregation,
|
|
84
|
+
* #1341's second half) can place the record in its own ordering without
|
|
85
|
+
* re-deriving snapshot position, and sequence numbers are stable across an
|
|
86
|
+
* update because `Map.set` on an existing key keeps its slot.
|
|
87
|
+
*/
|
|
88
|
+
export interface PatchDelta {
|
|
89
|
+
readonly seq: number;
|
|
90
|
+
readonly record: unknown;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* What `apply()` did, so a layer stacked on the maintained set can mirror it.
|
|
94
|
+
*
|
|
95
|
+
* `'rebuilt'` is the honest answer for everything that is NOT a clean patch —
|
|
96
|
+
* a payload-less event, a detached maintainer, an already-stale one. A
|
|
97
|
+
* consumer reading it must invalidate its own derived state; it must never
|
|
98
|
+
* read `'rebuilt'` as "nothing happened".
|
|
99
|
+
*
|
|
100
|
+
* A `'patched'` outcome with neither `removed` nor `inserted` DID happen: a
|
|
101
|
+
* non-member changed and stayed a non-member. That is a no-op for every
|
|
102
|
+
* derived layer, which is exactly why it is reported as a patch rather than a
|
|
103
|
+
* rebuild.
|
|
104
|
+
*/
|
|
105
|
+
export type PatchOutcome = {
|
|
106
|
+
readonly kind: 'rebuilt';
|
|
107
|
+
} | {
|
|
108
|
+
readonly kind: 'patched';
|
|
109
|
+
readonly id: string;
|
|
110
|
+
readonly removed?: PatchDelta;
|
|
111
|
+
readonly inserted?: PatchDelta;
|
|
112
|
+
};
|
|
113
|
+
/** An id-paired member of the maintained set, in maintained order. */
|
|
114
|
+
export interface MaintainedEntry {
|
|
115
|
+
readonly id: string;
|
|
116
|
+
readonly seq: number;
|
|
117
|
+
readonly record: unknown;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* The subset of a query source a DERIVED maintainer needs (#1341, grouped
|
|
121
|
+
* half). Deliberately a kernel type even though its only consumer today is
|
|
122
|
+
* the reduce service: everything in it is a kernel concept, and declaring it
|
|
123
|
+
* here is what lets `kernel/query/builder.ts` hand one to the service without
|
|
124
|
+
* a new spine to service import specifier.
|
|
125
|
+
*/
|
|
126
|
+
export interface GroupMaintenanceSource {
|
|
127
|
+
/**
|
|
128
|
+
* Id-paired snapshot, in snapshot (Map insertion) order.
|
|
129
|
+
*
|
|
130
|
+
* ⚠️ Declared as function-typed PROPERTIES, not methods: every member here
|
|
131
|
+
* is a standalone closure the query builder binds before handing it over,
|
|
132
|
+
* and property syntax says so — a method declaration would invite a `this`
|
|
133
|
+
* these closures do not have.
|
|
134
|
+
*/
|
|
135
|
+
readonly snapshotEntries: () => readonly {
|
|
136
|
+
id: string;
|
|
137
|
+
record: unknown;
|
|
138
|
+
}[];
|
|
139
|
+
/** O(1) current-state lookup for the AFTER state of a change. */
|
|
140
|
+
readonly lookupById: (id: string) => unknown;
|
|
141
|
+
/** The plan's membership test — the same one the eager path runs. */
|
|
142
|
+
readonly matches: (record: unknown) => boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Per-record projection the eager grouping pipeline applies AFTER filtering
|
|
145
|
+
* and before bucketing — today only `projectDateTruncKeys` (#1350). Applied
|
|
146
|
+
* per record here because the eager path applies it per record too; a
|
|
147
|
+
* projection that read across records could not be maintained and must not
|
|
148
|
+
* be plumbed through this hook.
|
|
149
|
+
*/
|
|
150
|
+
readonly project?: (record: unknown) => unknown;
|
|
151
|
+
}
|
|
152
|
+
/** Everything the maintainer needs, supplied by the query builder. */
|
|
153
|
+
export interface MaintainerConfig {
|
|
154
|
+
/** Id-paired snapshot, in snapshot (Map insertion) order. */
|
|
155
|
+
snapshotEntries(): readonly {
|
|
156
|
+
id: string;
|
|
157
|
+
record: unknown;
|
|
158
|
+
}[];
|
|
159
|
+
/** O(1) current-state lookup, used to read the AFTER state of a change. */
|
|
160
|
+
lookupById(id: string): unknown;
|
|
161
|
+
/** The plan's membership test — the same one the eager path runs. */
|
|
162
|
+
matches(record: unknown): boolean;
|
|
163
|
+
/**
|
|
164
|
+
* The plan's ordering, in the same key-plan shape `sortRecords` and the
|
|
165
|
+
* keyset cursor use (#1346): read a record's sort-key tuple, and compare two
|
|
166
|
+
* of those tuples. `undefined` when the plan has no `orderBy` — result order
|
|
167
|
+
* is then snapshot order alone.
|
|
168
|
+
*
|
|
169
|
+
* `compare` need not be a total order: it returns 0 for equal sort keys,
|
|
170
|
+
* exactly as it does for the eager sort, and the maintainer resolves those
|
|
171
|
+
* ties by snapshot sequence.
|
|
172
|
+
*/
|
|
173
|
+
order?: {
|
|
174
|
+
keyOf(record: unknown): unknown[];
|
|
175
|
+
compare(a: readonly unknown[], b: readonly unknown[]): number;
|
|
176
|
+
};
|
|
177
|
+
/** Plan offset (0 when unset). */
|
|
178
|
+
offset: number;
|
|
179
|
+
/** Plan limit, or undefined for "all matching rows". */
|
|
180
|
+
limit: number | undefined;
|
|
181
|
+
/**
|
|
182
|
+
* Post-slice projection the eager path applies to the emitted window (Via
|
|
183
|
+
* result decoding). Applied to the window, never to the maintained records,
|
|
184
|
+
* mirroring `toArray()` which decodes AFTER filter/sort/slice.
|
|
185
|
+
*/
|
|
186
|
+
decode?: (rows: readonly unknown[]) => unknown[];
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Reject any plan whose result set cannot be provably patched from a single
|
|
190
|
+
* record's delta. Everything this refuses still works — it just re-runs in
|
|
191
|
+
* full, as it did before #1341.
|
|
192
|
+
*
|
|
193
|
+
* Refused, and why:
|
|
194
|
+
* - **joins / crossJoin** — a row's membership depends on other collections'
|
|
195
|
+
* records, so a left-side delta does not determine the new result.
|
|
196
|
+
* - **`.filter(fn)`** — an arbitrary consumer closure with no determinism
|
|
197
|
+
* guarantee. `r => r.due < Date.now()` changes its verdict for records that
|
|
198
|
+
* never changed, which a full re-run observes and a patch cannot.
|
|
199
|
+
* (`.wherePredicate()` is admitted: it is DECLARED deterministic and
|
|
200
|
+
* carries a body hash saying so.)
|
|
201
|
+
* - **`orderBy(..., { by: 'label' })`** — the label maps are built eagerly
|
|
202
|
+
* from a dictionary collection's snapshot, so the comparator would be
|
|
203
|
+
* captured at subscribe time and go stale when that dictionary changes.
|
|
204
|
+
* - **an index-driven plan** — the rows then reach the pipeline in INDEX
|
|
205
|
+
* order rather than snapshot order, so snapshot sequence is the wrong
|
|
206
|
+
* tiebreak among equal sort keys. Three shapes qualify, and all three are
|
|
207
|
+
* refused: an `==`/`in` clause on any indexed field, a range clause on a
|
|
208
|
+
* SORTED-indexed field, and #1344's `orderedIndexRows()` page, which
|
|
209
|
+
* serves `orderBy(f).limit(n)` straight off a sorted index with no
|
|
210
|
+
* predicate at all. Little is lost: each of those re-runs is already
|
|
211
|
+
* proportional to the page or the match set, not to the collection.
|
|
212
|
+
*/
|
|
213
|
+
export declare function canMaintainIncrementally(plan: {
|
|
214
|
+
readonly clauses: readonly Clause[];
|
|
215
|
+
readonly orderBy: readonly OrderBy[];
|
|
216
|
+
readonly limit?: number | undefined;
|
|
217
|
+
readonly joins: readonly unknown[];
|
|
218
|
+
}, indexes: IndexProbe | null): boolean;
|
|
219
|
+
/**
|
|
220
|
+
* What the maintainer needs to know about the source's indexes: which fields
|
|
221
|
+
* carry ANY index, and which carry a SORTED one. Both matter — the sorted
|
|
222
|
+
* index feeds two paths (#1344) the hash index does not.
|
|
223
|
+
*/
|
|
224
|
+
export interface IndexProbe {
|
|
225
|
+
covers(field: string): boolean;
|
|
226
|
+
sorted(field: string): boolean;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* The maintained result set behind one live query.
|
|
230
|
+
*
|
|
231
|
+
* Lifecycle: `attach()` when a subscription opens, `apply(change)` per upstream
|
|
232
|
+
* event, `rows()` to read the current window. Before `attach()` (and after any
|
|
233
|
+
* fallback) `rows()` recomputes from the snapshot, so a detached maintainer is
|
|
234
|
+
* simply an eager executor and is safe to read at any time.
|
|
235
|
+
*/
|
|
236
|
+
export declare class LiveMaintainer {
|
|
237
|
+
private readonly cfg;
|
|
238
|
+
private entries;
|
|
239
|
+
private readonly memberById;
|
|
240
|
+
private seqById;
|
|
241
|
+
private maxSeq;
|
|
242
|
+
/** Maintained state is stale — the next `rows()` rebuilds from the snapshot. */
|
|
243
|
+
private stale;
|
|
244
|
+
/** True once a subscription is driving `apply()`. */
|
|
245
|
+
private attached;
|
|
246
|
+
constructor(cfg: MaintainerConfig);
|
|
247
|
+
/**
|
|
248
|
+
* Start accepting deltas. Every read before this rebuilds from the snapshot,
|
|
249
|
+
* so a detached maintainer is just an eager executor.
|
|
250
|
+
*
|
|
251
|
+
* ⚠️ Call this in the SAME synchronous turn as a read — either immediately
|
|
252
|
+
* before the first `rows()` (the `.live()` path) or immediately after the
|
|
253
|
+
* initial one (the `.aggregate().live()` path, where the reduction computes
|
|
254
|
+
* before it subscribes). Attaching in a turn of its own would let a mutation
|
|
255
|
+
* slip past unrecorded: it arrives with no subscription to `apply()` it, and
|
|
256
|
+
* the maintained state would then be trusted while already behind.
|
|
257
|
+
*/
|
|
258
|
+
attach(): void;
|
|
259
|
+
/**
|
|
260
|
+
* Stop accepting deltas — the subscription feeding them has gone. Every
|
|
261
|
+
* later read rebuilds, because nothing is keeping the state current any
|
|
262
|
+
* more. Without this, a `Reduction` whose `.live()` was stopped would keep
|
|
263
|
+
* serving its last maintained value from `.run()`.
|
|
264
|
+
*/
|
|
265
|
+
detach(): void;
|
|
266
|
+
/** Force the next read to rebuild — the caller saw something it can't patch. */
|
|
267
|
+
invalidate(): void;
|
|
268
|
+
/**
|
|
269
|
+
* Fold one upstream change into the maintained set. A change with no
|
|
270
|
+
* payload (the source could not say which record moved) invalidates
|
|
271
|
+
* instead — the next read pays for a full rebuild.
|
|
272
|
+
*/
|
|
273
|
+
apply(change: SourceChange | undefined): PatchOutcome;
|
|
274
|
+
/** The current result window — a fresh array on every call. */
|
|
275
|
+
rows(): unknown[];
|
|
276
|
+
/**
|
|
277
|
+
* The whole maintained set — every matching record, in maintained order,
|
|
278
|
+
* paired with its id and snapshot sequence. Ignores `offset`/`limit`/
|
|
279
|
+
* `decode` on purpose: this is the input a DERIVED maintainer rebuilds from,
|
|
280
|
+
* and grouped aggregation reduces the full match set, never a window.
|
|
281
|
+
*
|
|
282
|
+
* Rebuilds first when detached or stale, exactly as `rows()` does, so a
|
|
283
|
+
* caller can read it at any time.
|
|
284
|
+
*/
|
|
285
|
+
maintainedEntries(): readonly MaintainedEntry[];
|
|
286
|
+
/**
|
|
287
|
+
* Full recompute from the source snapshot. Equivalent to the eager path by
|
|
288
|
+
* construction: filter in snapshot order, then sort with snapshot sequence
|
|
289
|
+
* as the tiebreak — which is what a stable sort of the same input does.
|
|
290
|
+
*/
|
|
291
|
+
private rebuild;
|
|
292
|
+
private patch;
|
|
293
|
+
private removeEntry;
|
|
294
|
+
/** First index whose entry does not sort before `probe`. */
|
|
295
|
+
private lowerBound;
|
|
296
|
+
private keyOf;
|
|
297
|
+
/**
|
|
298
|
+
* The eager path's ordering, made total.
|
|
299
|
+
*
|
|
300
|
+
* `order.compare` is the query's own `compareOrderKeys`, the identical
|
|
301
|
+
* function `sortRecords` sorts with, so sort keys cannot be read or ranked
|
|
302
|
+
* differently here. It returns 0 for equal keys — it can do nothing else,
|
|
303
|
+
* having been handed the keys rather than the records — and the eager sort
|
|
304
|
+
* then leaves those in the order they arrived, which is candidate order,
|
|
305
|
+
* which is snapshot order given `canMaintainIncrementally` has refused every
|
|
306
|
+
* plan whose candidates arrive in index order. The sequence number below is
|
|
307
|
+
* that same resolution, made explicit so a binary search has an exact
|
|
308
|
+
* position to find. ⚠️ If the eager path ever grows a tiebreak of its own
|
|
309
|
+
* (an id, say), this stops agreeing with it — which is what
|
|
310
|
+
* `__tests__/query-incremental.test.ts`'s "inherits an order key plan that
|
|
311
|
+
* leaves equal keys to the tiebreak" is there to catch.
|
|
312
|
+
*/
|
|
313
|
+
private compareEntries;
|
|
314
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@noy-db/hub/query/live` — **the Live group of the query DSL.**
|
|
3
|
+
*
|
|
4
|
+
* ```ts
|
|
5
|
+
* import '@noy-db/hub/query/live' // once, in your app's entry
|
|
6
|
+
*
|
|
7
|
+
* const stop = invoices.query().where('status', '==', 'paid').subscribe(rows => render(rows))
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* ⭐ **Imported for its side effect** — it patches `subscribe` and `live` onto
|
|
11
|
+
* `Query.prototype` and merges their types into `Query`. See
|
|
12
|
+
* `../relate/index.ts` for the full note on why `package.json`'s `sideEffects`
|
|
13
|
+
* array must keep naming this file.
|
|
14
|
+
*/
|
|
15
|
+
import type { LiveSurface } from './methods.js';
|
|
16
|
+
declare module '../builder.js' {
|
|
17
|
+
interface Query<T, S extends keyof T = never, Q extends keyof T & string = never, M extends keyof T & string = never> extends LiveSurface<T, S, Q, M> {
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export { buildLiveQuery } from './live.js';
|
|
21
|
+
export type { LiveQuery, LiveUpstream, LiveBuildOptions } from './live.js';
|
|
22
|
+
export type { SourceChange } from './incremental.js';
|
|
@@ -38,18 +38,26 @@
|
|
|
38
38
|
* vault + name. Vault's `resolveSource` reads from
|
|
39
39
|
* `collectionCache` so this assumption holds.
|
|
40
40
|
*
|
|
41
|
-
* **
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
41
|
+
* **Delta maintenance (#1341).** A live query over a plan
|
|
42
|
+
* `canMaintainIncrementally()` admits no longer re-runs: the change event
|
|
43
|
+
* carries which record moved, and `LiveMaintainer` patches the result set —
|
|
44
|
+
* one predicate evaluation, a binary search, a splice. The emitted value is
|
|
45
|
+
* identical to a re-run's, because the maintainer is handed the query's OWN
|
|
46
|
+
* membership test and sort comparator. Every other plan, and every
|
|
47
|
+
* notification that arrives without a delta, re-runs exactly as before.
|
|
48
|
+
*
|
|
49
|
+
* **What .live() still does NOT do:**
|
|
50
|
+
* - No batching unless asked — `live({ batch: true })` coalesces a burst
|
|
51
|
+
* into one recompute + one notification on a microtask; the default stays
|
|
52
|
+
* one event in, one notification out, because batching makes `value`
|
|
53
|
+
* stale until the microtask runs.
|
|
54
|
+
* - No async notifications — every unbatched notification is synchronous
|
|
48
55
|
* within the source's change handler.
|
|
49
56
|
* - No re-planning under live mutations — the planner picks once
|
|
50
57
|
* at subscription time and reuses the same plan for every
|
|
51
58
|
* re-run.
|
|
52
59
|
*/
|
|
60
|
+
import type { LiveMaintainer, SourceChange } from './incremental.js';
|
|
53
61
|
/**
|
|
54
62
|
* The reactive primitive returned by `Query.live()`.
|
|
55
63
|
*
|
|
@@ -118,7 +126,29 @@ export interface LiveQuery<T> {
|
|
|
118
126
|
* `JoinableSource.subscribe` (added in ).
|
|
119
127
|
*/
|
|
120
128
|
export interface LiveUpstream {
|
|
121
|
-
|
|
129
|
+
/**
|
|
130
|
+
* `cb` may be handed the delta that caused the notification (#1341) so the
|
|
131
|
+
* live query can patch its result set instead of re-running. Calling it with
|
|
132
|
+
* NO argument is always valid and always correct — it means "something
|
|
133
|
+
* changed, I can't say what", and the live query answers with a full re-run.
|
|
134
|
+
*/
|
|
135
|
+
subscribe(cb: (change?: SourceChange) => void): () => void;
|
|
136
|
+
}
|
|
137
|
+
/** Options for {@link buildLiveQuery}. */
|
|
138
|
+
export interface LiveBuildOptions {
|
|
139
|
+
/**
|
|
140
|
+
* Coalesce a burst of upstream changes into ONE recompute and ONE
|
|
141
|
+
* notification, flushed on a microtask (#1341). Off by default: with it on,
|
|
142
|
+
* `live.value` is stale until the microtask runs, so a consumer that reads
|
|
143
|
+
* synchronously after an `await put()` would see the old value.
|
|
144
|
+
*/
|
|
145
|
+
readonly batch?: boolean;
|
|
146
|
+
/**
|
|
147
|
+
* Incremental maintainer for this query's result set. When present it
|
|
148
|
+
* REPLACES `recompute` as the value source — it patches per delta and
|
|
149
|
+
* rebuilds itself whenever a delta is not provably patchable.
|
|
150
|
+
*/
|
|
151
|
+
readonly maintainer?: LiveMaintainer;
|
|
122
152
|
}
|
|
123
153
|
/**
|
|
124
154
|
* Build a LiveQuery from a `recompute` callback (typically the
|
|
@@ -130,4 +160,4 @@ export interface LiveUpstream {
|
|
|
130
160
|
* thrown by recompute are caught and stored in `error` instead of
|
|
131
161
|
* propagating — see the file docstring for the rationale.
|
|
132
162
|
*/
|
|
133
|
-
export declare function buildLiveQuery<T>(recompute: () => T[], upstreams: readonly LiveUpstream[]): LiveQuery<T>;
|
|
163
|
+
export declare function buildLiveQuery<T>(recompute: () => T[], upstreams: readonly LiveUpstream[], options?: LiveBuildOptions): LiveQuery<T>;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1458 — **Live**: the same plan, re-run on change.
|
|
3
|
+
*
|
|
4
|
+
* `subscribe` · `live`
|
|
5
|
+
*
|
|
6
|
+
* Bodies moved out of `kernel/query/builder.ts` unchanged; see
|
|
7
|
+
* `../relate/methods.ts` for why `this.plan` still resolves.
|
|
8
|
+
*/
|
|
9
|
+
import type { DeclaredPredicate, InternalSource, QueryPlan } from '../builder.js';
|
|
10
|
+
import type { JoinContext } from '../relate/join.js';
|
|
11
|
+
import type { ReduceStrategy } from '../../../with-lookup/reduce/strategy.js';
|
|
12
|
+
import type { LiveQuery } from './live.js';
|
|
13
|
+
import type { LiveMaintainer } from './incremental.js';
|
|
14
|
+
import type { DateTruncKey } from '../reduce/date-trunc.js';
|
|
15
|
+
import type { GroupMaintenanceSource } from './incremental.js';
|
|
16
|
+
/** @internal — the mixin whose prototype `./index.ts` copies onto `Query`. */
|
|
17
|
+
export declare class LiveMethods<T, S extends keyof T = never, Q extends keyof T & string = never, M extends keyof T & string = never> {
|
|
18
|
+
protected readonly source: InternalSource;
|
|
19
|
+
protected readonly plan: QueryPlan;
|
|
20
|
+
protected readonly joinContext: JoinContext | undefined;
|
|
21
|
+
protected readonly reduceStrategy: ReduceStrategy;
|
|
22
|
+
protected readonly predicates: ReadonlyMap<string, DeclaredPredicate> | undefined;
|
|
23
|
+
protected decodeVia: (records: readonly unknown[], locale?: string) => unknown[];
|
|
24
|
+
protected incrementalMaintainer: (mode: 'rows' | 'records') => LiveMaintainer | undefined;
|
|
25
|
+
protected groupMaintenance: (derived: readonly DateTruncKey[]) => GroupMaintenanceSource | undefined;
|
|
26
|
+
toArray: (opts?: {
|
|
27
|
+
locale?: string;
|
|
28
|
+
}) => T[];
|
|
29
|
+
/**
|
|
30
|
+
* Re-run the query whenever the source notifies of changes.
|
|
31
|
+
* Returns an unsubscribe function. The callback receives the latest result.
|
|
32
|
+
* Throws if the source does not support subscriptions.
|
|
33
|
+
*
|
|
34
|
+
* **For joined queries, prefer `.live()`** — `subscribe()`
|
|
35
|
+
* only re-fires on LEFT-side changes, so joined data can be
|
|
36
|
+
* stale if the right side mutates between emissions. `.live()`
|
|
37
|
+
* merges change streams from every join target.
|
|
38
|
+
*/
|
|
39
|
+
subscribe(cb: (result: T[]) => void): () => void;
|
|
40
|
+
/**
|
|
41
|
+
* Reactive terminal — returns a `LiveQuery<T>` that re-runs the
|
|
42
|
+
* query and updates its `value` whenever any source feeding it
|
|
43
|
+
* mutates..
|
|
44
|
+
*
|
|
45
|
+
* For non-joined queries, `.live()` is a convenience over the
|
|
46
|
+
* existing `.subscribe()` callback shape: a hand-rolled reactive
|
|
47
|
+
* primitive with `value` / `error` fields and a `subscribe(cb)`
|
|
48
|
+
* notification channel. Frame-agnostic — Vue / React / Solid
|
|
49
|
+
* adapters wrap it in their own primitive.
|
|
50
|
+
*
|
|
51
|
+
* For joined queries, `.live()` additionally subscribes to every
|
|
52
|
+
* join target's change stream. Mutations on a right-side
|
|
53
|
+
* collection (insert / update / delete of a client referenced by
|
|
54
|
+
* an invoice) re-fire the live query and re-evaluate every
|
|
55
|
+
* dependent left row. Right-side targets are deduped by
|
|
56
|
+
* collection name, so a chain that joins the same target twice
|
|
57
|
+
* (e.g. billing client + shipping client → both 'clients') only
|
|
58
|
+
* subscribes once.
|
|
59
|
+
*
|
|
60
|
+
* **Ref-mode behavior on right-side disappearance** — matches the
|
|
61
|
+
* eager `.toArray()` contract from :
|
|
62
|
+
* - `strict` → re-run throws `DanglingReferenceError`. The
|
|
63
|
+
* LiveQuery catches the throw, stores it in `live.error`, and
|
|
64
|
+
* notifies listeners (the throw does NOT propagate out of
|
|
65
|
+
* the source's change handler — that would tear down the
|
|
66
|
+
* emitter). Consumers check `live.error` after each
|
|
67
|
+
* notification and render an error state in the UI.
|
|
68
|
+
* - `warn` → joined value flips to `null`; the existing
|
|
69
|
+
* warn-channel deduplication keeps repeated re-runs from
|
|
70
|
+
* spamming the console.
|
|
71
|
+
* - `cascade` → no special handling needed; the cascade-
|
|
72
|
+
* delete mechanism propagates the right-side delete into the
|
|
73
|
+
* left collection on the next tick, and the live query
|
|
74
|
+
* naturally re-fires with the orphaned left rows gone.
|
|
75
|
+
*
|
|
76
|
+
* Always call `live.stop()` when finished — it tears down every
|
|
77
|
+
* upstream subscription. The Vue layer's `onUnmounted` hook
|
|
78
|
+
* should call `stop()` automatically; raw consumers must do it
|
|
79
|
+
* themselves.
|
|
80
|
+
*
|
|
81
|
+
* **Incremental maintenance (#1341).** For a plan
|
|
82
|
+
* `incrementalMaintainer()` accepts — no joins, no `.filter(fn)`, no
|
|
83
|
+
* label-sort, and nothing an index would serve in index order (an `==`/`in`
|
|
84
|
+
* probe, #1344's sorted-index range, or #1344's `orderBy(f).limit(n)`
|
|
85
|
+
* index page) — the result set is PATCHED per change
|
|
86
|
+
* event instead of re-run: one predicate evaluation for the changed record,
|
|
87
|
+
* a binary search, a splice. Everything else, and any change event that
|
|
88
|
+
* arrives without a delta, still re-runs the whole plan. Either way the
|
|
89
|
+
* emitted value is identical to `toArray()` — the maintainer reuses this
|
|
90
|
+
* query's own membership test and sort comparator.
|
|
91
|
+
*
|
|
92
|
+
* `options.batch` coalesces a burst of changes into one recompute and one
|
|
93
|
+
* notification on a microtask. It is OFF by default because it makes
|
|
94
|
+
* `live.value` stale until the microtask runs: a consumer that reads
|
|
95
|
+
* synchronously after `await put()` would see the previous value.
|
|
96
|
+
*
|
|
97
|
+
* **Limitations:**
|
|
98
|
+
* - No re-planning under live mutations — the planner picks
|
|
99
|
+
* once at subscription time and reuses the same plan.
|
|
100
|
+
* - Streaming live joins are deferred.
|
|
101
|
+
*/
|
|
102
|
+
live(options?: {
|
|
103
|
+
batch?: boolean;
|
|
104
|
+
}): LiveQuery<T>;
|
|
105
|
+
}
|
|
106
|
+
/** The public Live surface — merged into `Query` by `./index.ts`. */
|
|
107
|
+
export type LiveSurface<T, S extends keyof T = never, Q extends keyof T & string = never, M extends keyof T & string = never> = Pick<LiveMethods<T, S, Q, M>, 'subscribe' | 'live'>;
|
|
@@ -7,7 +7,45 @@
|
|
|
7
7
|
* dependency on any Via feature's implementation — still tree-shakeable.
|
|
8
8
|
*/
|
|
9
9
|
/** Comparison operators supported by the where() builder. */
|
|
10
|
-
export type Operator = '==' | '!=' | '<' | '<=' | '>' | '>=' | 'in'
|
|
10
|
+
export type Operator = '==' | '!=' | '<' | '<=' | '>' | '>=' | 'in'
|
|
11
|
+
/**
|
|
12
|
+
* Set non-membership (#1351) — the anti-semi-join half of `in`.
|
|
13
|
+
*
|
|
14
|
+
* ⚠️ A NULLISH stored value MATCHES `!in`, deliberately: this module
|
|
15
|
+
* treats an absent field as "not equal" everywhere (`!=`, and money's
|
|
16
|
+
* `evaluateMoneyClause`), so `!in` follows. SQL's `NOT IN (…)` is
|
|
17
|
+
* three-valued and would EXCLUDE the row; noy-db has no NULL logic and
|
|
18
|
+
* inventing one here would make `!in` disagree with `!=` on the same
|
|
19
|
+
* record. Spell the SQL behaviour as `.where(f, '!=', undefined)` before
|
|
20
|
+
* the `!in`.
|
|
21
|
+
*
|
|
22
|
+
* ⛔ Never index-served. A hash bucket answers "which ids hold this
|
|
23
|
+
* value"; a negation needs the complement, which is the whole
|
|
24
|
+
* collection minus a bucket — so `!in` always falls to the scan, the
|
|
25
|
+
* same as `!=`.
|
|
26
|
+
*/
|
|
27
|
+
| '!in' | 'contains' | 'startsWith' | 'between'
|
|
28
|
+
/**
|
|
29
|
+
* Regex / SQL-LIKE pattern match (#1357). Operand: a `RegExp`, or a
|
|
30
|
+
* LIKE string. Normalized at `where()` time by {@link normalizeMatches}
|
|
31
|
+
* — an anchored literal prefix is LOWERED to `startsWith` (so it takes
|
|
32
|
+
* the sorted index), everything else is stored as `{ source, flags }`
|
|
33
|
+
* and evaluated per record.
|
|
34
|
+
*/
|
|
35
|
+
| 'matches'
|
|
36
|
+
/**
|
|
37
|
+
* Proximity (#1355) — operand `{ lat, lng, radiusKm }`, matching a
|
|
38
|
+
* record whose stored point is within `radiusKm` great-circle
|
|
39
|
+
* kilometres of the centre.
|
|
40
|
+
*
|
|
41
|
+
* ⛔ MEANINGFUL ONLY OVER A `geo()`-DECLARED FIELD. Every other field
|
|
42
|
+
* has no point to measure, so the case below returns false rather than
|
|
43
|
+
* guessing at a `{lat,lng}`-shaped object — the geo binding owns both
|
|
44
|
+
* the comparison and the index cover, and an undeclared field has
|
|
45
|
+
* neither. `where()` is where a malformed operand throws; here a
|
|
46
|
+
* type mismatch is simply "no match", as it is for every operator.
|
|
47
|
+
*/
|
|
48
|
+
| 'near';
|
|
11
49
|
/**
|
|
12
50
|
* A single field comparison clause inside a query plan.
|
|
13
51
|
* Plans are JSON-serializable, so this type uses primitives only.
|
|
@@ -41,6 +79,21 @@ export interface FieldClause {
|
|
|
41
79
|
*/
|
|
42
80
|
readonly indexValue?: unknown;
|
|
43
81
|
};
|
|
82
|
+
/**
|
|
83
|
+
* Provenance of an `in`/`!in` operand that arrived as a SUBQUERY (#1351)
|
|
84
|
+
* rather than as a literal array. Set by {@link normalizeSubqueryOperand};
|
|
85
|
+
* `value` already holds the RESOLVED id array by the time this is present.
|
|
86
|
+
*
|
|
87
|
+
* Plain data on purpose — it is part of the plan JSON, so it folds into an
|
|
88
|
+
* MV's `queryHash` and discriminates two queries whose resolved id sets
|
|
89
|
+
* happen to coincide but whose inner sources differ.
|
|
90
|
+
*/
|
|
91
|
+
readonly subquery?: {
|
|
92
|
+
/** The inner source's `identity` (`<vault>/<collection>`), or `'(unnamed)'`. */
|
|
93
|
+
readonly from: string;
|
|
94
|
+
/** How many ids the inner query produced. */
|
|
95
|
+
readonly ids: number;
|
|
96
|
+
};
|
|
44
97
|
}
|
|
45
98
|
/**
|
|
46
99
|
* A user-supplied predicate function escape hatch. Not serializable.
|
|
@@ -95,6 +148,18 @@ export interface CrossJoinClause {
|
|
|
95
148
|
readonly target: string;
|
|
96
149
|
/** Alias under which the right-side record is exposed on each result row. */
|
|
97
150
|
readonly as: string;
|
|
151
|
+
/**
|
|
152
|
+
* Alias under which the LEFT row is exposed (#1289, `.crossJoinWith()`).
|
|
153
|
+
* `undefined` — every clause `.crossJoin()` builds — spreads the left row's
|
|
154
|
+
* own fields at the top level, which is the pre-#1289 shape.
|
|
155
|
+
*
|
|
156
|
+
* Set, the row becomes `{ [leftAs]: left, [as]: right }` and NO field sits
|
|
157
|
+
* at the top level. That is the whole point (a self-join needs both sides
|
|
158
|
+
* distinguishable) and also its whole cost: Via dressing keys by bare field
|
|
159
|
+
* name, so an aliased row is invisible to the top-level decode and must be
|
|
160
|
+
* dressed per alias instead. See `dressAliases` in `builder.ts`.
|
|
161
|
+
*/
|
|
162
|
+
readonly leftAs?: string;
|
|
98
163
|
/**
|
|
99
164
|
* Lateral filter callback. `undefined` → full cartesian product.
|
|
100
165
|
* Two call shapes:
|
|
@@ -128,6 +193,59 @@ export declare function readPath(record: unknown, path: string): unknown;
|
|
|
128
193
|
* exclude non-matching records by definition.
|
|
129
194
|
*/
|
|
130
195
|
export declare function evaluateFieldClause(record: unknown, clause: FieldClause): boolean;
|
|
196
|
+
/**
|
|
197
|
+
* The generic comparison, with no record and no Via involved.
|
|
198
|
+
*
|
|
199
|
+
* Split out of {@link evaluateFieldClause} (#1355) so a Via binding can
|
|
200
|
+
* DELEGATE the operators it does not itself define. That matters more than
|
|
201
|
+
* it sounds: a binding that claims a field for one operator and declines
|
|
202
|
+
* the rest leaves the others with `clause.via` unset, and an unset `via` is
|
|
203
|
+
* exactly what tells `candidateRecords()` a secondary index may serve the
|
|
204
|
+
* clause. For a binding that also rewrites the index KEY
|
|
205
|
+
* (`canonicalizeIndexKey`), that combination lets the index and the scan
|
|
206
|
+
* answer the same clause differently. Claiming every operator and routing
|
|
207
|
+
* the uninteresting ones back here keeps the two in step.
|
|
208
|
+
*/
|
|
209
|
+
export declare function evaluateOperator(actual: unknown, op: Operator, value: unknown): boolean;
|
|
210
|
+
/**
|
|
211
|
+
* Resolve a SUBQUERY operand of `in`/`!in` into the literal id array the rest
|
|
212
|
+
* of the engine already knows how to handle (#1351).
|
|
213
|
+
*
|
|
214
|
+
* ⭐ THE INNER QUERY RUNS HERE — ONCE, at `where()` BUILD time — and never
|
|
215
|
+
* again. That is the whole design, and it is what keeps an O(n) filter from
|
|
216
|
+
* becoming O(n·m): by the time a record is evaluated the clause holds a plain
|
|
217
|
+
* array, so `candidateRecords()` dispatches it through the hash index exactly
|
|
218
|
+
* as it does a hand-written list. `__tests__/query-subquery-in.test.ts`
|
|
219
|
+
* witnesses it with an evaluation counter, not by inspection.
|
|
220
|
+
*
|
|
221
|
+
* ⚠️ THE PRICE, stated once: the operand is a SNAPSHOT taken when `where()`
|
|
222
|
+
* was called. A query object built now and executed later — `.live()` being
|
|
223
|
+
* the case that matters — keeps the id set it was built with, so a change to
|
|
224
|
+
* the INNER collection does not re-fire the outer live query and does not
|
|
225
|
+
* change its answer. Rebuild the query to pick up a new inner result.
|
|
226
|
+
*
|
|
227
|
+
* Every other operator, and an operand that is not a Query, passes through
|
|
228
|
+
* untouched — including a malformed one, which keeps this a resolution step
|
|
229
|
+
* and not a new validation gate.
|
|
230
|
+
*/
|
|
231
|
+
export declare function normalizeSubqueryOperand(op: Operator, value: unknown): {
|
|
232
|
+
op: Operator;
|
|
233
|
+
value: unknown;
|
|
234
|
+
subquery?: FieldClause['subquery'];
|
|
235
|
+
};
|
|
236
|
+
/**
|
|
237
|
+
* Normalize a `where(field, 'matches', operand)` at BUILD time: refuse an
|
|
238
|
+
* unsafe pattern, lower an anchored literal prefix to `startsWith`, and
|
|
239
|
+
* otherwise serialize to `{ source, flags }`. Every other operator passes
|
|
240
|
+
* through untouched.
|
|
241
|
+
*
|
|
242
|
+
* Called by every `where()` (`Query`, `ScanBuilder`, `LazyQuery`) so all
|
|
243
|
+
* three build the same clause for the same call.
|
|
244
|
+
*/
|
|
245
|
+
export declare function normalizeMatches(op: Operator, value: unknown): {
|
|
246
|
+
op: Operator;
|
|
247
|
+
value: unknown;
|
|
248
|
+
};
|
|
131
249
|
/**
|
|
132
250
|
* Evaluate any clause (field / filter / group) against a record.
|
|
133
251
|
* The recursion depth is bounded by the user's query expression — no risk of
|