@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
|
@@ -14,7 +14,26 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import type { Reduction, ReduceSpec, ReduceResult, ReductionUpstream } from './reduction.js';
|
|
16
16
|
import type { GroupedQuery, GroupedQueryN } from './groupby.js';
|
|
17
|
+
import type { GroupMaintenanceSource } from '../../kernel/query/live/incremental.js';
|
|
18
|
+
import type { WindowFactory, WindowSpec, WindowedQuery } from './window.js';
|
|
19
|
+
/**
|
|
20
|
+
* Re-exported so `kernel/query/builder.ts` can name `.window()`'s spec and
|
|
21
|
+
* return type WITHOUT a second spine→service import specifier: this strategy
|
|
22
|
+
* module is the seam the kernel is allowed to reach (`check-architecture.mjs`
|
|
23
|
+
* → PRE_EXISTING_SPINE_SERVICE_IMPORTS), and adding a new grandfathered path
|
|
24
|
+
* there for a type-only import would loosen the ratchet for no gain.
|
|
25
|
+
*/
|
|
26
|
+
export type { WindowSpec, WindowedQuery } from './window.js';
|
|
27
|
+
/**
|
|
28
|
+
* Options for {@link withReduce}. `window` is the {@link WindowFactory}
|
|
29
|
+
* returned by `withWindow()` — omitted, `.window()` throws and the window
|
|
30
|
+
* engine stays out of the bundle entirely (see `window.ts` § "Opting in").
|
|
31
|
+
*/
|
|
32
|
+
export interface ReduceOptions {
|
|
33
|
+
readonly window?: WindowFactory;
|
|
34
|
+
}
|
|
17
35
|
import type { ViaPipeline } from '../../kernel/via/pipeline.js';
|
|
36
|
+
import type { HydrationGate } from '../../kernel/query/hydration.js';
|
|
18
37
|
/**
|
|
19
38
|
* Seam interface. `@internal` — will promote to public only when the
|
|
20
39
|
* aggregate service is extracted into its own package.
|
|
@@ -28,19 +47,40 @@ export interface ReduceStrategy {
|
|
|
28
47
|
* reduction runs. NO_REDUCE throws; the active strategy
|
|
29
48
|
* constructs a real `Reduction`.
|
|
30
49
|
*/
|
|
31
|
-
aggregate<Spec extends ReduceSpec>(executeRecords: () => readonly unknown[], spec: Spec, upstreams: readonly ReductionUpstream[]
|
|
50
|
+
aggregate<Spec extends ReduceSpec>(executeRecords: () => readonly unknown[], spec: Spec, upstreams: readonly ReductionUpstream[],
|
|
51
|
+
/** #1414 — the source collection's cold gate, when there is one. */
|
|
52
|
+
gate?: HydrationGate): Reduction<ReduceResult<Spec>>;
|
|
32
53
|
/**
|
|
33
54
|
* Build a `GroupedQuery<T, F, S>` for `Query.groupBy(field)`. Same
|
|
34
55
|
* closure / upstream inputs as `aggregate` plus the group key field.
|
|
35
56
|
*/
|
|
36
|
-
groupBy<T, F extends string, S extends keyof T = never, M extends keyof T & string = never>(executeRecords: () => readonly unknown[], field: F, upstreams: readonly ReductionUpstream[], dictLabelResolver?: (key: string, locale: string, fallback?: string | readonly string[]) => Promise<string | undefined>, via?: ViaPipeline
|
|
57
|
+
groupBy<T, F extends string, S extends keyof T = never, M extends keyof T & string = never>(executeRecords: () => readonly unknown[], field: F, upstreams: readonly ReductionUpstream[], dictLabelResolver?: (key: string, locale: string, fallback?: string | readonly string[]) => Promise<string | undefined>, via?: ViaPipeline,
|
|
58
|
+
/**
|
|
59
|
+
* #1341 (grouped half) — the delta-maintenance seam. Supplied by
|
|
60
|
+
* `Query.groupBy()` only for a plan `canMaintainIncrementally()` admits;
|
|
61
|
+
* omitted, `.groupBy().aggregate().live()` re-runs in full as before.
|
|
62
|
+
*/
|
|
63
|
+
maintenance?: GroupMaintenanceSource): GroupedQuery<T, F, S, M>;
|
|
37
64
|
/**
|
|
38
65
|
* Variadic-keyed sibling — builds a `GroupedQueryN<T, F, S>` for
|
|
39
66
|
* `Query.groupBy(...fields)`. No dictLabelResolver — `<field>Label`
|
|
40
67
|
* projection only applies to single-field groupings, which dispatch
|
|
41
68
|
* through `groupBy` above.
|
|
42
69
|
*/
|
|
43
|
-
groupByN<T, F extends readonly string[], S extends keyof T = never, M extends keyof T & string = never>(executeRecords: () => readonly unknown[], fields: F, upstreams: readonly ReductionUpstream[], via?: ViaPipeline
|
|
70
|
+
groupByN<T, F extends readonly string[], S extends keyof T = never, M extends keyof T & string = never>(executeRecords: () => readonly unknown[], fields: F, upstreams: readonly ReductionUpstream[], via?: ViaPipeline,
|
|
71
|
+
/** #1341 (grouped half) — see `groupBy` above. */
|
|
72
|
+
maintenance?: GroupMaintenanceSource): GroupedQueryN<T, F, S, M>;
|
|
73
|
+
/**
|
|
74
|
+
* Build a `WindowedQuery<T>` for `Query.window(spec)` (#1349). Same closure
|
|
75
|
+
* / upstream inputs as `groupBy`, plus the window definition. The Via
|
|
76
|
+
* pipeline is threaded so `.select()` gets the same money/distinct reducer
|
|
77
|
+
* rewriting `.aggregate()` gets.
|
|
78
|
+
*
|
|
79
|
+
* Throws unless the strategy was built as `withReduce({ window: withWindow() })`
|
|
80
|
+
* — the second opt-in exists so the window engine is not charged to a
|
|
81
|
+
* consumer who only aggregates. See `window.ts` § "Opting in".
|
|
82
|
+
*/
|
|
83
|
+
window<T>(executeRecords: () => readonly unknown[], spec: WindowSpec, upstreams: readonly ReductionUpstream[], via?: ViaPipeline): WindowedQuery<T>;
|
|
44
84
|
/**
|
|
45
85
|
* Terminal streaming aggregator for `ScanBuilder.aggregate(spec)`.
|
|
46
86
|
* Takes an async iterable of decrypted records + the spec and
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query DSL `.window()` — SQL window functions over the query's result rows
|
|
3
|
+
* (#1349).
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* invoices.query()
|
|
7
|
+
* .where('status', '==', 'open')
|
|
8
|
+
* .window({ partitionBy: 'clientId', orderBy: 'date' })
|
|
9
|
+
* .select({ balance: runningSum('amount'), prev: lag('amount', 1), n: rowNumber() })
|
|
10
|
+
* .run()
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* Pure in-hub post-processing: the store holds ciphertext, so this runs after
|
|
14
|
+
* decryption like every other query stage. No index is consulted — see
|
|
15
|
+
* "Complexity" below for why the sorted-index fast path is deliberately not
|
|
16
|
+
* taken in v1.
|
|
17
|
+
*
|
|
18
|
+
* ## What it is, precisely
|
|
19
|
+
*
|
|
20
|
+
* A window function adds COLUMNS to a row; it never adds, removes or reorders
|
|
21
|
+
* rows. `.select()` therefore returns the query's own rows, in the query's own
|
|
22
|
+
* order, each widened with the window outputs. `orderBy` inside `.window()`
|
|
23
|
+
* decides how a PARTITION is walked; `Query.orderBy()` decides how the RESULT
|
|
24
|
+
* is presented. That is SQL's split and both are honoured independently.
|
|
25
|
+
*
|
|
26
|
+
* ⭐ Distinguished from `.groupBy()` by ARITY: `.groupBy().aggregate()` emits
|
|
27
|
+
* one row per bucket and drops the source rows; `.window().select()` keeps
|
|
28
|
+
* every source row and attaches per-row values computed over its partition.
|
|
29
|
+
*
|
|
30
|
+
* ## The frame — `rows unbounded preceding → current row`, and only that
|
|
31
|
+
*
|
|
32
|
+
* A running aggregate at position `i` of its partition sees exactly rows
|
|
33
|
+
* `0..i`. There is no `RANGE`, no `n preceding`, no `following`, and no
|
|
34
|
+
* `frame` option to pass — explicit frames are a separate feature, and a
|
|
35
|
+
* half-built frame surface is worse than none. `lag`/`lead` are navigation,
|
|
36
|
+
* not aggregation, so they are unaffected by the frame.
|
|
37
|
+
*
|
|
38
|
+
* ## Ordering inside a partition is TOTAL
|
|
39
|
+
*
|
|
40
|
+
* Rows are sorted by the `orderBy` keys and, where those compare equal, by
|
|
41
|
+
* their UPSTREAM POSITION — the sort is a stable sort over an ascending index
|
|
42
|
+
* array, so equal keys keep the order the query produced them in. Without that
|
|
43
|
+
* final key, `lag`/`lead` over equal keys would be a coin flip between runs.
|
|
44
|
+
*
|
|
45
|
+
* The value comparator is {@link compareReduced}, shared with the post-group
|
|
46
|
+
* ordering of #1336 rather than reinvented, and for the same reason: a money
|
|
47
|
+
* value reaches this stage DECODED, as an exact decimal string, and lexical
|
|
48
|
+
* order gets `'9882.00'` vs `'10004.00'` backwards. (The pre-group row
|
|
49
|
+
* pipeline asks `ViaPipeline.compareForOrder` instead — that reads the STORED
|
|
50
|
+
* scaled-integer form, which is not what a decoded row holds, so it cannot
|
|
51
|
+
* serve here.)
|
|
52
|
+
*
|
|
53
|
+
* PEER-ship for `rank` is decided by the `orderBy` keys ALONE, never by the
|
|
54
|
+
* upstream tie-break — otherwise no two rows would ever be peers and `rank`
|
|
55
|
+
* would collapse into `rowNumber`.
|
|
56
|
+
*
|
|
57
|
+
* ## Complexity, and the index question
|
|
58
|
+
*
|
|
59
|
+
* O(n log n): one partition pass, then a sort per partition. #1344's sorted
|
|
60
|
+
* indexes could in principle make the sort a merge, but the input here is the
|
|
61
|
+
* query's already-materialised, already-DECODED result rows — the index is
|
|
62
|
+
* over stored (encoded) values on the collection, and it has no way to express
|
|
63
|
+
* "sorted within each partition of `clientId`". Taking a fast path would mean
|
|
64
|
+
* proving identical output including the upstream tie-break, which the index
|
|
65
|
+
* cannot witness. So v1 sorts. This is the correct path, not a placeholder.
|
|
66
|
+
*
|
|
67
|
+
* ## Opting in — and why there is a second opt-in at all
|
|
68
|
+
*
|
|
69
|
+
* `withReduce()` alone does NOT light this up: `.window()` throws until the
|
|
70
|
+
* strategy is built as `withReduce({ window: withWindow() })`. That is not
|
|
71
|
+
* ceremony for its own sake — it is the SAME no-op-stub-until-opted-in rule
|
|
72
|
+
* that keeps `Reduction`/`GroupedQuery` out of the floor bundle, applied one
|
|
73
|
+
* level down. `withReduce()`'s returned object is a live value the bundler
|
|
74
|
+
* cannot prove unused, so a `window()` method that named {@link WindowedQuery}
|
|
75
|
+
* directly made this whole engine reachable from `withReduce` and charged it
|
|
76
|
+
* to every consumer who opted into ordinary aggregation and will never call
|
|
77
|
+
* `.window()`. Measured: the `analytics` bundle scenario went 960 → 1,845
|
|
78
|
+
* gzipped bytes, +92%. Passing the factory in means the engine is reachable
|
|
79
|
+
* only from a consumer that names `withWindow`.
|
|
80
|
+
* ⛔ Do not "simplify" this back into `withReduce()` — `check-bundle.mjs`'s
|
|
81
|
+
* `analytics` scenario carries a `WindowedQuery` eager-import canary that will
|
|
82
|
+
* fail if you do.
|
|
83
|
+
*
|
|
84
|
+
* ## Not in `explain()`
|
|
85
|
+
*
|
|
86
|
+
* Same shape as #1336's post-group ops: `explain()` is a terminal on `Query`,
|
|
87
|
+
* and `.window()` leaves `Query` for `WindowedQuery`, so there is no
|
|
88
|
+
* `explain()` in the chain past this point to add a node to. The window stage
|
|
89
|
+
* also has nothing to choose — one dispatch, over rows already in memory.
|
|
90
|
+
*/
|
|
91
|
+
import type { Reducer } from './reducers.js';
|
|
92
|
+
import type { ReductionUpstream, LiveReduction } from './reduction.js';
|
|
93
|
+
import type { DateTruncKey } from '../../kernel/query/reduce/date-trunc.js';
|
|
94
|
+
import type { MoneyString } from '../../via/money/branded.js';
|
|
95
|
+
import type { ViaPipeline } from '../../kernel/via/pipeline.js';
|
|
96
|
+
/** One ordering key inside a window: a field name, a `dateTrunc()` key, or either with a direction. */
|
|
97
|
+
export type WindowOrderInput<F extends string = string> = F | DateTruncKey | {
|
|
98
|
+
readonly field: F | DateTruncKey;
|
|
99
|
+
readonly direction?: 'asc' | 'desc';
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* The window definition passed to `.window()`.
|
|
103
|
+
*
|
|
104
|
+
* Both members are optional and mean what SQL's omissions mean: no
|
|
105
|
+
* `partitionBy` is one partition holding the whole relation; no `orderBy`
|
|
106
|
+
* makes every row in a partition a peer (so `rank()` is 1 throughout and a
|
|
107
|
+
* running aggregate sees the rows in upstream order).
|
|
108
|
+
*/
|
|
109
|
+
export interface WindowSpec<F extends string = string> {
|
|
110
|
+
/** Field name(s) and/or `dateTrunc()` key(s) to partition on. */
|
|
111
|
+
readonly partitionBy?: F | DateTruncKey | readonly (F | DateTruncKey)[];
|
|
112
|
+
/** How each partition is walked. Successive keys are tie-breakers. */
|
|
113
|
+
readonly orderBy?: WindowOrderInput<F> | readonly WindowOrderInput<F>[];
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* A non-aggregating window function (ranking or navigation). Built by the
|
|
117
|
+
* factories below — the shape is opaque to consumers.
|
|
118
|
+
*/
|
|
119
|
+
export interface WindowFn<R = unknown> {
|
|
120
|
+
readonly __window: true;
|
|
121
|
+
readonly op: 'rowNumber' | 'rank' | 'lag' | 'lead';
|
|
122
|
+
/**
|
|
123
|
+
* Compute one value per row of an ORDERED partition.
|
|
124
|
+
* `peerStart[i]` is the index of the first row that compares equal to row
|
|
125
|
+
* `i` under the window's `orderBy` keys.
|
|
126
|
+
*/
|
|
127
|
+
evaluate(rows: readonly unknown[], peerStart: readonly number[]): R[];
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* A `.select()` slot: either a window function or an ordinary {@link Reducer},
|
|
131
|
+
* which runs as a RUNNING aggregate under the v1 frame. Any reducer works —
|
|
132
|
+
* `count()`, `sum()`, `countDistinct()`, a custom one — so `runningSum` and
|
|
133
|
+
* `runningMoneySum` below are named conveniences, not a separate mechanism.
|
|
134
|
+
*/
|
|
135
|
+
export type WindowSelectSpec = Readonly<Record<string, WindowFn<unknown> | Reducer<unknown, unknown>>>;
|
|
136
|
+
/** Result type of one `.select()` slot. */
|
|
137
|
+
type WindowSlotResult<V> = V extends WindowFn<infer R> ? R : V extends Reducer<infer R, unknown> ? R : unknown;
|
|
138
|
+
/** A window result row: the source record widened with the selected outputs. */
|
|
139
|
+
export type WindowRow<T, Spec extends WindowSelectSpec> = T & {
|
|
140
|
+
[K in keyof Spec]: WindowSlotResult<Spec[K]>;
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Sequential position of the row within its partition, starting at 1. NEVER
|
|
144
|
+
* repeats — two rows that tie under `orderBy` still get distinct numbers,
|
|
145
|
+
* resolved by the upstream tie-break. Use {@link rank} when ties should share
|
|
146
|
+
* a number.
|
|
147
|
+
*/
|
|
148
|
+
export declare function rowNumber(): WindowFn<number>;
|
|
149
|
+
/**
|
|
150
|
+
* Competition rank within the partition, starting at 1. Rows that compare
|
|
151
|
+
* EQUAL under the window's `orderBy` keys share a rank, and the next distinct
|
|
152
|
+
* value SKIPS the ranks they consumed — `1, 2, 2, 4`. This is the only place
|
|
153
|
+
* `rank` and {@link rowNumber} differ, so a fixture without ties cannot tell
|
|
154
|
+
* them apart.
|
|
155
|
+
*
|
|
156
|
+
* With no `orderBy` every row is a peer and every rank is 1.
|
|
157
|
+
*/
|
|
158
|
+
export declare function rank(): WindowFn<number>;
|
|
159
|
+
/**
|
|
160
|
+
* Value of `field` from the row `offset` positions EARLIER in the partition.
|
|
161
|
+
* Returns `defaultValue` (default `undefined`) for the first `offset` rows.
|
|
162
|
+
*/
|
|
163
|
+
export declare function lag<R = unknown>(field: string, offset?: number, defaultValue?: R): WindowFn<R | undefined>;
|
|
164
|
+
/**
|
|
165
|
+
* Value of `field` from the row `offset` positions LATER in the partition.
|
|
166
|
+
* Returns `defaultValue` (default `undefined`) for the last `offset` rows.
|
|
167
|
+
*/
|
|
168
|
+
export declare function lead<R = unknown>(field: string, offset?: number, defaultValue?: R): WindowFn<R | undefined>;
|
|
169
|
+
/**
|
|
170
|
+
* Running total of a numeric `field` over `rows unbounded preceding → current
|
|
171
|
+
* row`. Identical to passing `sum(field)` — named for the reading.
|
|
172
|
+
*
|
|
173
|
+
* ⚠️ For a declared money field use {@link runningMoneySum}: it is the same
|
|
174
|
+
* reducer, but typed `MoneyString` to match what the exact BigInt rewrite
|
|
175
|
+
* actually returns.
|
|
176
|
+
*/
|
|
177
|
+
export declare function runningSum(field: string): Reducer<number>;
|
|
178
|
+
/**
|
|
179
|
+
* Running total of a **declared money field**, exact at any magnitude.
|
|
180
|
+
*
|
|
181
|
+
* The reducer is the ordinary money `sum`, and it is rewritten by
|
|
182
|
+
* `ViaPipeline.wrapReducers` into `via/money/money-reducer.ts`'s BigInt
|
|
183
|
+
* accumulator at `.select()` time — the SAME rewrite `.aggregate()` and
|
|
184
|
+
* `.groupBy()` get, so a running balance and a grand total cannot disagree.
|
|
185
|
+
* Nothing here touches a float: values accumulate as scaled `bigint`s and each
|
|
186
|
+
* row's value is `formatScaledInt`'d out of the state at that point.
|
|
187
|
+
*/
|
|
188
|
+
export declare function runningMoneySum(field: string): Reducer<MoneyString>;
|
|
189
|
+
/**
|
|
190
|
+
* Execute the window stage. Pure function over a row array — exported for
|
|
191
|
+
* tests and for any future `scan().window()` reuse.
|
|
192
|
+
*
|
|
193
|
+
* Rows are returned in INPUT order, each a shallow copy widened with the
|
|
194
|
+
* selected outputs. A `dateTrunc()` partition key is read off an internal
|
|
195
|
+
* projection and is deliberately NOT stamped on the output row — unlike
|
|
196
|
+
* `.groupBy()`, where the derived key IS the result key.
|
|
197
|
+
*/
|
|
198
|
+
export declare function applyWindow<R>(records: readonly unknown[], spec: WindowSpec, select: WindowSelectSpec): R[];
|
|
199
|
+
/**
|
|
200
|
+
* What `withWindow()` hands to `withReduce()`. Named as a type so
|
|
201
|
+
* `strategy.ts` / `active.ts` can speak it in a TYPE-ONLY import and never
|
|
202
|
+
* pull this module into their runtime graph.
|
|
203
|
+
*/
|
|
204
|
+
export type WindowFactory = <T>(executeRecords: () => readonly unknown[], spec: WindowSpec, upstreams: readonly ReductionUpstream[], via?: ViaPipeline) => WindowedQuery<T>;
|
|
205
|
+
/**
|
|
206
|
+
* Light up `.window()` on `Query`.
|
|
207
|
+
*
|
|
208
|
+
* ```ts
|
|
209
|
+
* import { withReduce, withWindow } from '@noy-db/hub/reduce'
|
|
210
|
+
* createNoydb({ store, user, secret, reduceStrategy: withReduce({ window: withWindow() }) })
|
|
211
|
+
* ```
|
|
212
|
+
*
|
|
213
|
+
* The only reference to {@link WindowedQuery} outside this module's own
|
|
214
|
+
* consumers — see "Opting in" in the module docs for why that matters.
|
|
215
|
+
*/
|
|
216
|
+
export declare function withWindow(): WindowFactory;
|
|
217
|
+
/**
|
|
218
|
+
* Chainable wrapper returned by `Query.window(spec)`. Terminates with
|
|
219
|
+
* `.select(spec)`, which is the only operation on it — a window with nothing
|
|
220
|
+
* selected computes nothing.
|
|
221
|
+
*/
|
|
222
|
+
export declare class WindowedQuery<T> {
|
|
223
|
+
private readonly executeRecords;
|
|
224
|
+
private readonly spec;
|
|
225
|
+
private readonly upstreams;
|
|
226
|
+
private readonly via?;
|
|
227
|
+
constructor(executeRecords: () => readonly unknown[], spec: WindowSpec, upstreams: readonly ReductionUpstream[], via?: ViaPipeline | undefined);
|
|
228
|
+
/**
|
|
229
|
+
* Attach window outputs to every row. Each slot is either a
|
|
230
|
+
* {@link WindowFn} (`rowNumber`, `rank`, `lag`, `lead`) or a `Reducer`,
|
|
231
|
+
* which runs as a running aggregate over `rows unbounded preceding →
|
|
232
|
+
* current row`.
|
|
233
|
+
*
|
|
234
|
+
* Reducers are rewritten through the collection's Via pipeline exactly as
|
|
235
|
+
* `.aggregate()` rewrites them, so a `sum` over a declared money field
|
|
236
|
+
* becomes the exact BigInt accumulator and a `countDistinct` dedups on the
|
|
237
|
+
* canonical index key.
|
|
238
|
+
*/
|
|
239
|
+
select<Spec extends WindowSelectSpec>(spec: Spec): WindowSelection<WindowRow<T, Spec>>;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* The `.window(...).select(...)` terminal. Mirrors `GroupedReduction`'s shape
|
|
243
|
+
* — `.run()` and `.live()` — minus the post-group stage: ordering and limiting
|
|
244
|
+
* of window OUTPUT rows belong on the underlying `Query`, before `.window()`,
|
|
245
|
+
* because a window never changes the row set.
|
|
246
|
+
*/
|
|
247
|
+
export declare class WindowSelection<R> {
|
|
248
|
+
private readonly executeRecords;
|
|
249
|
+
private readonly spec;
|
|
250
|
+
private readonly select;
|
|
251
|
+
private readonly upstreams;
|
|
252
|
+
constructor(executeRecords: () => readonly unknown[], spec: WindowSpec, select: WindowSelectSpec, upstreams: readonly ReductionUpstream[]);
|
|
253
|
+
/** Execute the query and return every row, widened with the window outputs. */
|
|
254
|
+
run(): R[];
|
|
255
|
+
/**
|
|
256
|
+
* Reactive terminal — re-runs the whole window pipeline on every upstream
|
|
257
|
+
* change, the same naive-recompute contract `GroupedReduction.live()` has.
|
|
258
|
+
* Always call `live.stop()` when finished.
|
|
259
|
+
*/
|
|
260
|
+
live(): LiveReduction<R[]>;
|
|
261
|
+
}
|
|
262
|
+
export {};
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* Internal service — not exported as a `@noy-db/hub/*` subpath.
|
|
23
23
|
*/
|
|
24
24
|
import type { NoydbStore } from '../../kernel/types.js';
|
|
25
|
-
import type { RecordCodec } from '../../
|
|
25
|
+
import type { RecordCodec } from '../../capsule/index.js';
|
|
26
26
|
import { type I18nTextDescriptor } from '../../via/i18n/core.js';
|
|
27
27
|
import { type DictKeyDescriptor, type StaticDictDescriptor, type DictionaryHandle } from '../../via/i18n/dictionary.js';
|
|
28
28
|
import type { BlobSet } from '../../with-shape/blobs/blob-set.js';
|
|
@@ -31,8 +31,8 @@ import { type VectorSet, type EmbeddingDescriptor } from '../embeddings/index.js
|
|
|
31
31
|
import { type SearchOptions, type SearchResult } from './index.js';
|
|
32
32
|
import type { IndexStore } from './index-store.js';
|
|
33
33
|
import type { PersistedIndexCallbacks } from './persisted-index-store.js';
|
|
34
|
-
import type { IndexDoc } from './inverted-index.js';
|
|
35
|
-
import type { RetrieveOptions, RetrieveHit } from './retrieve-types.js';
|
|
34
|
+
import type { IndexDoc, IndexBuildOptions } from './inverted-index.js';
|
|
35
|
+
import type { RetrieveOptions, RetrieveHit, SimilarToOptions } from './retrieve-types.js';
|
|
36
36
|
/** Everything the moving search/retrieval methods touched on `this.*`. */
|
|
37
37
|
export interface SearchContext<T> {
|
|
38
38
|
/** Collection name — error context + `_ftindex` row key. */
|
|
@@ -52,6 +52,8 @@ export interface SearchContext<T> {
|
|
|
52
52
|
readonly lazy: boolean;
|
|
53
53
|
/** Declared text-index fields, or undefined. */
|
|
54
54
|
readonly textIndexes: readonly string[] | undefined;
|
|
55
|
+
/** Subset of `textIndexes` recording token positions for phrase / proximity (#1354). */
|
|
56
|
+
readonly textIndexPositions: readonly string[] | undefined;
|
|
55
57
|
/** Declared i18n fields, or undefined. */
|
|
56
58
|
readonly i18nFields: Record<string, I18nTextDescriptor> | undefined;
|
|
57
59
|
/** Declared dictionary-key fields, or undefined. */
|
|
@@ -78,6 +80,13 @@ export interface SearchContext<T> {
|
|
|
78
80
|
export declare function search<T>(ctx: SearchContext<T>, field: string, query: string, opts?: SearchOptions): Promise<SearchResult<T>[]>;
|
|
79
81
|
/** L1 — build IndexDoc[] for the configured text fields over the live cache. */
|
|
80
82
|
export declare function buildRetrievalDocs<T>(ctx: SearchContext<T>, labelMaps: Map<string, Map<string, Record<string, string>>>, blobFilenames: Map<string, Map<string, string[]>>, only?: readonly string[]): IndexDoc[];
|
|
83
|
+
/**
|
|
84
|
+
* L1 — the positional-postings opt-in for this collection (#1354), or
|
|
85
|
+
* `undefined` when nothing opted in. Returning `undefined` rather than
|
|
86
|
+
* `{ positions: [] }` keeps the no-opt-in path byte-identical to a caller that
|
|
87
|
+
* never heard of positions.
|
|
88
|
+
*/
|
|
89
|
+
export declare function positionBuildOptions<T>(ctx: SearchContext<T>): IndexBuildOptions | undefined;
|
|
81
90
|
/** L1 — true iff any configured text index is also a blob field (gates ALL slot I/O). */
|
|
82
91
|
export declare function hasIndexedBlobFields<T>(ctx: SearchContext<T>, only?: readonly string[]): boolean;
|
|
83
92
|
/** L1.5 — force-persist the lexical index now (e.g. on save/idle). Persists only when textIndexPersist is enabled; a no-op otherwise. */
|
|
@@ -103,15 +112,42 @@ export declare function flushIndex<T>(ctx: SearchContext<T>): Promise<void>;
|
|
|
103
112
|
export declare function buildPersistedIndexCallbacks<T>(provideCtx: () => SearchContext<T>): PersistedIndexCallbacks;
|
|
104
113
|
/** L1 — pre-build the lexical index (e.g. on open) so the first retrieve() pays no build scan. */
|
|
105
114
|
export declare function warmIndex<T>(ctx: SearchContext<T>): Promise<void>;
|
|
106
|
-
/**
|
|
115
|
+
/**
|
|
116
|
+
* Retrieval. mode: 'lexical' (default) | 'semantic' (L2) | 'hybrid' (L3).
|
|
117
|
+
*
|
|
118
|
+
* ## `within` — the typed half of retrieval (#1343)
|
|
119
|
+
*
|
|
120
|
+
* Money / number / date / boolean fields are NOT tokenised into the lexical
|
|
121
|
+
* index and never will be: instead of a second (typed-token) index format, a
|
|
122
|
+
* typed match is expressed as an ordinary `Query` and handed to `within`, so
|
|
123
|
+
* the comparison runs in the query engine — over the sorted / compound range
|
|
124
|
+
* indexes — in each field's CANONICAL space (money as its scaled integer, not
|
|
125
|
+
* as a lexically-compared string). `retrieve()` contributes the text half and
|
|
126
|
+
* intersects.
|
|
127
|
+
*
|
|
128
|
+
* Two ordering properties, both load-bearing:
|
|
129
|
+
*
|
|
130
|
+
* - **Scoring is global; narrowing is not.** BM25 runs over the WHOLE corpus
|
|
131
|
+
* (df / N / avgdl unchanged by `within`), so a document's score is the same
|
|
132
|
+
* whichever `within` it is paired with — a filter re-ranks nothing. Narrowing
|
|
133
|
+
* the postings instead would make IDF filter-dependent and scores
|
|
134
|
+
* incomparable between two calls. It also costs nothing to score first: the
|
|
135
|
+
* index already scores every doc and only slices at the end.
|
|
136
|
+
* - **`limit` counts hits from the NARROWED set.** Truncating corpus-wide first
|
|
137
|
+
* and filtering after would under-return (`limit: 10` yielding 1), so the
|
|
138
|
+
* mode branches run unlimited and the caller's `limit` is applied last.
|
|
139
|
+
*
|
|
140
|
+
* An empty `within` result set yields NO hits — never all of them.
|
|
141
|
+
*
|
|
142
|
+
* A `within` with an empty text query is **typed-only retrieval**: the typed
|
|
143
|
+
* predicate is the whole query, returned in the usual hit shape (score 0,
|
|
144
|
+
* `field: '(within)'`, empty snippet) so a typed and a text search are read the
|
|
145
|
+
* same way. An empty query with NO `within` still matches nothing.
|
|
146
|
+
*/
|
|
107
147
|
export declare function retrieve<T>(ctx: SearchContext<T>, query: string, opts?: RetrieveOptions<T>): Promise<RetrieveHit<T>[]>;
|
|
108
148
|
/** L2 — raw-vector kNN over the encrypted vector set (decrypted in the trusted tier).
|
|
109
149
|
* Snippet is '' for vector hits in v1 (semantic match isn't span-located). */
|
|
110
|
-
export declare function similarTo<T>(ctx: SearchContext<T>, vector: Float32Array, opts?:
|
|
111
|
-
k?: number;
|
|
112
|
-
minScore?: number;
|
|
113
|
-
includeRecord?: boolean;
|
|
114
|
-
}): Promise<RetrieveHit<T>[]>;
|
|
150
|
+
export declare function similarTo<T>(ctx: SearchContext<T>, vector: Float32Array, opts?: SimilarToOptions): Promise<RetrieveHit<T>[]>;
|
|
115
151
|
/**
|
|
116
152
|
* L2 — the embedding write-hook: derive a record's embedding vector at
|
|
117
153
|
* write and persist it as the encrypted `_vec` side-car. Routed through the
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
* lazy; an opaque-blob backend implements the same interface so the
|
|
4
4
|
* collection call-site is unchanged.
|
|
5
5
|
*/
|
|
6
|
-
import { InvertedIndex, type IndexDoc } from './inverted-index.js';
|
|
6
|
+
import { InvertedIndex, type IndexDoc, type IndexBuildOptions } from './inverted-index.js';
|
|
7
7
|
export interface IndexStore {
|
|
8
|
-
|
|
8
|
+
/** `opts` carries the positional-postings opt-in (#1354); a persisted store also
|
|
9
|
+
* uses it to decide whether a loaded sidecar still matches the live config. */
|
|
10
|
+
ensureBuilt(build: () => ReadonlyArray<IndexDoc>, opts?: IndexBuildOptions): Promise<InvertedIndex>;
|
|
9
11
|
markDirty(): void;
|
|
10
12
|
flush(): Promise<void>;
|
|
11
13
|
readonly built: boolean;
|
|
@@ -13,7 +15,7 @@ export interface IndexStore {
|
|
|
13
15
|
export declare class MemoryIndexStore implements IndexStore {
|
|
14
16
|
private index;
|
|
15
17
|
get built(): boolean;
|
|
16
|
-
ensureBuilt(build: () => ReadonlyArray<IndexDoc
|
|
18
|
+
ensureBuilt(build: () => ReadonlyArray<IndexDoc>, opts?: IndexBuildOptions): Promise<InvertedIndex>;
|
|
17
19
|
markDirty(): void;
|
|
18
20
|
flush(): Promise<void>;
|
|
19
21
|
}
|
|
@@ -8,12 +8,14 @@
|
|
|
8
8
|
export { tokenize, type Tokenizer } from './tokenize.js';
|
|
9
9
|
export { searchScan, type SearchOptions, type SearchResult, type SearchEntry } from './scan.js';
|
|
10
10
|
export { segmentTokens, segmentTokenizer, type Token } from './segment.js';
|
|
11
|
-
export { InvertedIndex, type IndexDoc, type IndexHit, type QueryOptions } from './inverted-index.js';
|
|
11
|
+
export { InvertedIndex, type IndexDoc, type IndexHit, type QueryOptions, type IndexBuildOptions, type IndexSnapshot } from './inverted-index.js';
|
|
12
12
|
export { extractSnippet } from './snippet.js';
|
|
13
13
|
export { MemoryIndexStore, type IndexStore } from './index-store.js';
|
|
14
14
|
export { buildStringFieldEntries, type FieldEntry } from './build-docs.js';
|
|
15
|
-
export type { RetrieveOptions, RetrieveHit } from './retrieve-types.js';
|
|
15
|
+
export type { RetrieveOptions, RetrieveHit, SimilarToOptions } from './retrieve-types.js';
|
|
16
16
|
export { fuseRetrieval, type FuseOptions } from './fuse.js';
|
|
17
|
+
export { withVectorIndex, DEFAULT_INDEX_MIN_VECTORS, type VectorIndexOptions } from '../embeddings/with-vector-index.js';
|
|
18
|
+
export type { VectorIndex, VectorIndexConfig, VectorIndexSearchOptions } from '../embeddings/vector-index.js';
|
|
17
19
|
export { withSearch } from './active.js';
|
|
18
20
|
export { NO_SEARCH, type SearchStrategy } from './strategy.js';
|
|
19
21
|
export { SearchNotEnabledError } from '../../kernel/errors.js';
|
|
@@ -14,14 +14,43 @@ export interface IndexHit {
|
|
|
14
14
|
readonly text: string;
|
|
15
15
|
readonly offset: number;
|
|
16
16
|
}
|
|
17
|
+
/** Build-time index shape. The only knob is which fields carry positions. */
|
|
18
|
+
export interface IndexBuildOptions {
|
|
19
|
+
/** Fields whose postings record token positions (phrase / proximity). Opt-in: index size grows. */
|
|
20
|
+
readonly positions?: readonly string[];
|
|
21
|
+
}
|
|
17
22
|
export interface QueryOptions {
|
|
18
23
|
readonly limit?: number;
|
|
19
24
|
readonly match?: 'any' | 'all';
|
|
20
25
|
readonly prefix?: boolean;
|
|
21
26
|
readonly fields?: readonly string[];
|
|
27
|
+
/**
|
|
28
|
+
* Per-field score weights (BM25F-style, #1354). Purely query-side — nothing
|
|
29
|
+
* in the index changes. A field with no entry weighs 1, and the no-boost path
|
|
30
|
+
* performs no multiplication at all, so an unboosted query's scores are
|
|
31
|
+
* bit-for-bit what they were before boosts existed.
|
|
32
|
+
*
|
|
33
|
+
* ⚠️ Textbook BM25F pools term frequencies ACROSS fields before one
|
|
34
|
+
* saturation step. This index scores each field independently and keeps the
|
|
35
|
+
* best (see the class doc), so a boost weights the per-field score instead.
|
|
36
|
+
* Same intent — "a hit in `name` is worth more than a hit in `notes`" —
|
|
37
|
+
* different arithmetic; do not expect Lucene's BM25F numbers.
|
|
38
|
+
*/
|
|
39
|
+
readonly boost?: Readonly<Record<string, number>>;
|
|
22
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Persisted shape. `v` is the format stamp: an older stamp is REJECTED and the
|
|
43
|
+
* index rebuilt, never migrated or read leniently — see
|
|
44
|
+
* {@link parseIndexSnapshot}. v1 (pre-#1354) had no `posFields` and no `pos`,
|
|
45
|
+
* and a v1 blob read as v2 would silently answer "this doc has no positions",
|
|
46
|
+
* i.e. "your phrase does not match", which is a wrong answer rather than a slow
|
|
47
|
+
* one.
|
|
48
|
+
*/
|
|
49
|
+
export declare const INDEX_SNAPSHOT_VERSION = 2;
|
|
23
50
|
export interface IndexSnapshot {
|
|
24
|
-
readonly v:
|
|
51
|
+
readonly v: number;
|
|
52
|
+
/** Fields whose docs carry `pos`. Empty ⇒ nobody opted in. */
|
|
53
|
+
readonly posFields: readonly string[];
|
|
25
54
|
readonly fieldStats: ReadonlyArray<[string, {
|
|
26
55
|
df: [string, number][];
|
|
27
56
|
n: number;
|
|
@@ -35,13 +64,20 @@ export interface IndexSnapshot {
|
|
|
35
64
|
len: number;
|
|
36
65
|
tf: [string, number][];
|
|
37
66
|
firstOffset: [string, number][];
|
|
67
|
+
/** term -> ascending token ordinals. Present iff `field` ∈ `posFields`. */
|
|
68
|
+
pos?: [string, number[]][];
|
|
38
69
|
}>;
|
|
39
70
|
}
|
|
40
71
|
export declare class InvertedIndex {
|
|
41
72
|
private readonly fieldStats;
|
|
42
73
|
private readonly docs;
|
|
43
|
-
|
|
74
|
+
private posFields;
|
|
75
|
+
static build(docs: ReadonlyArray<IndexDoc>, opts?: IndexBuildOptions): InvertedIndex;
|
|
76
|
+
/** Fields this index carries positions for (#1354) — the store compares it against the live config. */
|
|
77
|
+
get positionFields(): ReadonlySet<string>;
|
|
44
78
|
query(query: string, opts?: QueryOptions): IndexHit[];
|
|
79
|
+
/** Token ordinal → char offset in the ORIGINAL text, by re-segmenting this one doc. */
|
|
80
|
+
private charOffsetAt;
|
|
45
81
|
toSnapshot(): IndexSnapshot;
|
|
46
82
|
static fromSnapshot(s: IndexSnapshot): InvertedIndex;
|
|
47
83
|
}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* with the store, which is out of scope for an in-memory debounce layer over an
|
|
20
20
|
* arbitrary opaque-blob backend.
|
|
21
21
|
*/
|
|
22
|
-
import { InvertedIndex, type IndexDoc } from './inverted-index.js';
|
|
22
|
+
import { InvertedIndex, type IndexDoc, type IndexBuildOptions } from './inverted-index.js';
|
|
23
23
|
import type { IndexStore } from './index-store.js';
|
|
24
24
|
export interface Fingerprint {
|
|
25
25
|
readonly count: number;
|
|
@@ -47,6 +47,9 @@ export declare class PersistedIndexStore implements IndexStore {
|
|
|
47
47
|
private index;
|
|
48
48
|
private timer;
|
|
49
49
|
private lastBuild;
|
|
50
|
+
/** The positional-postings opt-in the last caller asked for (#1354). A loaded
|
|
51
|
+
* sidecar that does not carry exactly these fields is discarded, not adapted. */
|
|
52
|
+
private lastOpts;
|
|
50
53
|
private readonly debounceMs;
|
|
51
54
|
/**
|
|
52
55
|
* Bumped by every purge (removePersisted). A save() captured under a since-stale
|
|
@@ -92,7 +95,7 @@ export declare class PersistedIndexStore implements IndexStore {
|
|
|
92
95
|
private pendingCompensation;
|
|
93
96
|
constructor(cb: PersistedIndexCallbacks);
|
|
94
97
|
get built(): boolean;
|
|
95
|
-
ensureBuilt(build: () => ReadonlyArray<IndexDoc
|
|
98
|
+
ensureBuilt(build: () => ReadonlyArray<IndexDoc>, opts?: IndexBuildOptions): Promise<InvertedIndex>;
|
|
96
99
|
markDirty(): void;
|
|
97
100
|
/** Force an immediate persist (cancels any pending debounce). */
|
|
98
101
|
flush(): Promise<void>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** One quoted clause. `slop === undefined` ⇒ strict ordered phrase. */
|
|
2
|
+
export interface PhraseClause {
|
|
3
|
+
readonly terms: readonly string[];
|
|
4
|
+
readonly slop: number | undefined;
|
|
5
|
+
}
|
|
6
|
+
export interface ParsedQuery {
|
|
7
|
+
/** Unquoted terms — scored exactly as before #1354. */
|
|
8
|
+
readonly terms: readonly string[];
|
|
9
|
+
readonly phrases: readonly PhraseClause[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Split a raw query into bare terms + quoted clauses. An unterminated quote
|
|
13
|
+
* has no closing delimiter to match, so it never forms a clause and its text
|
|
14
|
+
* falls through to the bare-term tokenizer — a typo degrades to today's
|
|
15
|
+
* behaviour rather than to an error.
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseSearchQuery(query: string): ParsedQuery;
|
|
18
|
+
/**
|
|
19
|
+
* Occurrences of a clause inside one field's positional postings, plus the
|
|
20
|
+
* token position the first occurrence starts at (`-1` when there is none).
|
|
21
|
+
*
|
|
22
|
+
* `positions` maps term → ascending token ordinals. A term the posting does
|
|
23
|
+
* not carry is an immediate miss.
|
|
24
|
+
*/
|
|
25
|
+
export declare function matchClause(positions: ReadonlyMap<string, readonly number[]>, clause: PhraseClause): {
|
|
26
|
+
count: number;
|
|
27
|
+
start: number;
|
|
28
|
+
};
|