@noy-db/hub 0.3.0-pre.8 → 0.3.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/dist/aggregate/index.js +9 -8
- package/dist/aggregate/index.js.map +1 -1
- package/dist/api-ZGS6LCOF.js +20 -0
- package/dist/as/index.js +11 -11
- package/dist/attestation/index.js +18 -18
- package/dist/backup-BJ57IKAO.js +242 -0
- package/dist/backup-BJ57IKAO.js.map +1 -0
- package/dist/blobs/index.js +13 -11
- package/dist/blobs/index.js.map +1 -1
- package/dist/broker/index.js +92 -0
- package/dist/broker/index.js.map +1 -0
- package/dist/bundle/index.js +25 -22
- package/dist/bundle/index.js.map +1 -1
- package/dist/by/index.js +2 -2
- package/dist/cargo/index.js +31 -31
- package/dist/chunk-2NVOWNI3.js +167 -0
- package/dist/chunk-2NVOWNI3.js.map +1 -0
- package/dist/chunk-3B5VVCNY.js +71 -0
- package/dist/chunk-3LQ2YKO4.js +230 -0
- package/dist/chunk-3QCRBHCY.js +54 -0
- package/dist/chunk-454JXE57.js +1697 -0
- package/dist/chunk-454JXE57.js.map +1 -0
- package/dist/chunk-4CTHCN4J.js +480 -0
- package/dist/chunk-4CTHCN4J.js.map +1 -0
- package/dist/chunk-4GPE63GU.js +111 -0
- package/dist/chunk-4GPE63GU.js.map +1 -0
- package/dist/chunk-4JBYV75E.js +150 -0
- package/dist/chunk-4NXKCLLQ.js +97 -0
- package/dist/chunk-4VNQOLML.js +29 -0
- package/dist/chunk-4VNQOLML.js.map +1 -0
- package/dist/chunk-5M5DVGV7.js +69 -0
- package/dist/chunk-5O3XF4DV.js +150 -0
- package/dist/chunk-5O3XF4DV.js.map +1 -0
- package/dist/chunk-5YOLBEQ6.js +30 -0
- package/dist/chunk-6CRIV7DE.js +129 -0
- package/dist/chunk-6JTIAGHD.js +621 -0
- package/dist/chunk-6JTIAGHD.js.map +1 -0
- package/dist/chunk-6QTNZJBS.js +255 -0
- package/dist/chunk-6T2SCQRU.js +86 -0
- package/dist/chunk-7DSTRQIJ.js +45 -0
- package/dist/chunk-AUSTCW2X.js +589 -0
- package/dist/chunk-B3HJYUOF.js +209 -0
- package/dist/chunk-BDVFPG6Y.js +164 -0
- package/dist/chunk-BIOUI4HL.js +1554 -0
- package/dist/chunk-BIOUI4HL.js.map +1 -0
- package/dist/chunk-CAF6WOK7.js +36 -0
- package/dist/chunk-CDUQTA3Z.js +381 -0
- package/dist/chunk-CDUQTA3Z.js.map +1 -0
- package/dist/chunk-CIE2BASH.js +404 -0
- package/dist/chunk-CRI4OUV4.js +42 -0
- package/dist/chunk-DLG74CNB.js +91 -0
- package/dist/chunk-E5ZQT5KX.js +30 -0
- package/dist/chunk-E5ZQT5KX.js.map +1 -0
- package/dist/chunk-EQO2UVP4.js +247 -0
- package/dist/chunk-EQO2UVP4.js.map +1 -0
- package/dist/chunk-ERJ7FU55.js +367 -0
- package/dist/chunk-EVVGJDRQ.js +205 -0
- package/dist/chunk-EVX47VBM.js +74 -0
- package/dist/chunk-EVX47VBM.js.map +1 -0
- package/dist/chunk-EXK7QRWF.js +59 -0
- package/dist/chunk-EYZ6IQ6X.js +202 -0
- package/dist/chunk-F64IRYG3.js +45 -0
- package/dist/chunk-FHS2HQSH.js +823 -0
- package/dist/chunk-FM3G3NOY.js +206 -0
- package/dist/chunk-FM3G3NOY.js.map +1 -0
- package/dist/chunk-FUG4SFN3.js +36 -0
- package/dist/chunk-FUG4SFN3.js.map +1 -0
- package/dist/chunk-GKEWXIV5.js +80 -0
- package/dist/chunk-GTGPO5KW.js +59 -0
- package/dist/chunk-HB3RFQSC.js +95 -0
- package/dist/chunk-HDMEGAQE.js +957 -0
- package/dist/chunk-HDMEGAQE.js.map +1 -0
- package/dist/chunk-HDQIIUPH.js +135 -0
- package/dist/chunk-HDQIIUPH.js.map +1 -0
- package/dist/chunk-HTJQYHZP.js +344 -0
- package/dist/chunk-HTJQYHZP.js.map +1 -0
- package/dist/chunk-I6GALP6E.js +99 -0
- package/dist/chunk-IGJCYUT5.js +99 -0
- package/dist/chunk-IGJCYUT5.js.map +1 -0
- package/dist/chunk-IL6POWCW.js +130 -0
- package/dist/chunk-IU6SNYX6.js +117 -0
- package/dist/chunk-J2ZX2XUV.js +778 -0
- package/dist/chunk-JIF24JPM.js +495 -0
- package/dist/chunk-JIF24JPM.js.map +1 -0
- package/dist/chunk-JK733I5V.js +23 -0
- package/dist/chunk-JK733I5V.js.map +1 -0
- package/dist/chunk-JKJOGPZN.js +29 -0
- package/dist/chunk-JNAI2HN2.js +32 -0
- package/dist/chunk-JNAI2HN2.js.map +1 -0
- package/dist/chunk-JZUV47FZ.js +41 -0
- package/dist/chunk-K5IMOGHB.js +30 -0
- package/dist/chunk-KPZS5QAQ.js +151 -0
- package/dist/chunk-KPZS5QAQ.js.map +1 -0
- package/dist/chunk-KSKBRKGJ.js +291 -0
- package/dist/chunk-KSKBRKGJ.js.map +1 -0
- package/dist/chunk-LASZKVMO.js +382 -0
- package/dist/chunk-LXEXBTKL.js +515 -0
- package/dist/chunk-LXEXBTKL.js.map +1 -0
- package/dist/chunk-M4CV6BRT.js +524 -0
- package/dist/chunk-M4CV6BRT.js.map +1 -0
- package/dist/chunk-MEFJPTZ4.js +371 -0
- package/dist/chunk-MEFJPTZ4.js.map +1 -0
- package/dist/chunk-MV43JSJF.js +265 -0
- package/dist/chunk-MV43JSJF.js.map +1 -0
- package/dist/chunk-NJ4EOKMB.js +392 -0
- package/dist/chunk-NJ4EOKMB.js.map +1 -0
- package/dist/chunk-NR5LT5RY.js +135 -0
- package/dist/chunk-NWSGI5C7.js +261 -0
- package/dist/chunk-NWSGI5C7.js.map +1 -0
- package/dist/chunk-OSDB5WW3.js +739 -0
- package/dist/chunk-OSDB5WW3.js.map +1 -0
- package/dist/chunk-PN2XMATY.js +37 -0
- package/dist/chunk-PN2XMATY.js.map +1 -0
- package/dist/chunk-Q5VNKNE5.js +70 -0
- package/dist/chunk-QLWMEXCT.js +21 -0
- package/dist/chunk-QRB7NAOJ.js +123 -0
- package/dist/chunk-R4ROFEYC.js +74 -0
- package/dist/chunk-RCVJZMFE.js +164 -0
- package/dist/chunk-RCVJZMFE.js.map +1 -0
- package/dist/chunk-RIX4V2TB.js +367 -0
- package/dist/chunk-RYCTDFUX.js +40 -0
- package/dist/chunk-RZ5SVOYR.js +155 -0
- package/dist/chunk-SLFHQTTW.js +99 -0
- package/dist/chunk-SNZ6URZZ.js +2782 -0
- package/dist/chunk-SNZ6URZZ.js.map +1 -0
- package/dist/chunk-T2FFWNPK.js +75 -0
- package/dist/chunk-T2FFWNPK.js.map +1 -0
- package/dist/chunk-UNFPPVNI.js +23 -0
- package/dist/chunk-VFUPHI2Z.js +333 -0
- package/dist/chunk-VFUPHI2Z.js.map +1 -0
- package/dist/chunk-VLFCJYTL.js +235 -0
- package/dist/chunk-VN3DBQAU.js +124 -0
- package/dist/chunk-VYYM3MEN.js +98 -0
- package/dist/chunk-VYYM3MEN.js.map +1 -0
- package/dist/chunk-VZRODIM3.js +49 -0
- package/dist/chunk-W22IKJE2.js +94 -0
- package/dist/chunk-X3YYQWOQ.js +155 -0
- package/dist/chunk-X7QBD67R.js +14405 -0
- package/dist/chunk-X7QBD67R.js.map +1 -0
- package/dist/chunk-XDYREZWE.js +1128 -0
- package/dist/chunk-XDYREZWE.js.map +1 -0
- package/dist/chunk-XWZVFISC.js +720 -0
- package/dist/chunk-XWZVFISC.js.map +1 -0
- package/dist/chunk-YFXZEAYK.js +85 -0
- package/dist/chunk-ZAJAVEXY.js +50 -0
- package/dist/chunk-ZICD77GM.js +34 -0
- package/dist/chunk-ZJ2AK4V7.js +38 -0
- package/dist/chunk-ZJ2AK4V7.js.map +1 -0
- package/dist/chunk-ZUODRVHY.js +14 -0
- package/dist/classified/index.js +5 -3
- package/dist/classified-marker-CZKA6ITE.js +28 -0
- package/dist/classified-marker-CZKA6ITE.js.map +1 -0
- package/dist/collection-facade-TLWIPI76.js +44 -0
- package/dist/computed-ZIQTYTDI.js +11 -0
- package/dist/consent/index.js +9 -9
- package/dist/crdt/index.js +1 -1
- package/dist/dead-filter-ESOBZZP5.js +28 -0
- package/dist/delegation-W7ZV2322.js +25 -0
- package/dist/derivations/index.js +12 -11
- package/dist/derive-H2BJTLUI.js +21 -0
- package/dist/enclave-AP3I5W7O.js +141 -0
- package/dist/executor-KGWTNEQD.js +9 -0
- package/dist/executor-OVEXR6RT.js +9 -0
- package/dist/executor-UNEH5ZYH.js +25 -0
- package/dist/export-accessible-PCMXSUZS.js +23 -0
- package/dist/extract-partition-SWHFSYJO.js +38 -0
- package/dist/fanout-sidecar-A765THMX.js +74 -0
- package/dist/find-N6345CNT.js +11 -0
- package/dist/forget/index.js +10 -10
- package/dist/forget/index.js.map +1 -1
- package/dist/guards/index.js +6 -6
- package/dist/history/index.js +14 -11
- package/dist/history/index.js.map +1 -1
- package/dist/i18n/index.js +50 -37
- package/dist/i18n/index.js.map +1 -1
- package/dist/index.d.ts +307 -1459
- package/dist/index.js +595 -198
- package/dist/index.js.map +1 -1
- package/dist/indexing/index.js +7 -7
- package/dist/indexing/index.js.map +1 -1
- package/dist/issue-5OKB6I2R.js +19 -0
- package/dist/kernel/best-effort-revert.d.ts +52 -0
- package/dist/kernel/cache/index.d.ts +10 -0
- package/dist/kernel/cache/lru.d.ts +97 -0
- package/dist/kernel/cache/policy.d.ts +32 -0
- package/dist/kernel/collection-config.d.ts +809 -0
- package/dist/kernel/collection.d.ts +1522 -0
- package/dist/kernel/constants.d.ts +18 -0
- package/dist/kernel/debug.d.ts +25 -0
- package/dist/kernel/enclave/broker/proof.d.ts +154 -0
- package/dist/kernel/enclave/classify/bidx.d.ts +77 -0
- package/dist/kernel/enclave/classify/compare.d.ts +10 -0
- package/dist/kernel/enclave/classify/digest.d.ts +8 -0
- package/dist/kernel/enclave/classify/find.d.ts +36 -0
- package/dist/kernel/enclave/classify/kofn.d.ts +7 -0
- package/dist/kernel/enclave/classify/normalize.d.ts +7 -0
- package/dist/kernel/enclave/classify/reveal.d.ts +10 -0
- package/dist/kernel/enclave/classify/vdig.d.ts +39 -0
- package/dist/kernel/enclave/classify/verify.d.ts +36 -0
- package/dist/kernel/enclave/classify/write.d.ts +8 -0
- package/dist/kernel/enclave/crypto.d.ts +263 -0
- package/dist/kernel/enclave/index.d.ts +79 -0
- package/dist/kernel/enclave/record-keys/deterministic.d.ts +55 -0
- package/dist/kernel/enclave/record-keys/envelope-body.d.ts +79 -0
- package/dist/kernel/enclave/record-keys/lifecycle.d.ts +107 -0
- package/dist/kernel/enclave/record-keys/record-codec.d.ts +328 -0
- package/dist/kernel/enclave/record-keys/sealed-slot.d.ts +14 -0
- package/dist/kernel/enclave/record-keys/sealed-slots.d.ts +123 -0
- package/dist/kernel/enclave/record-keys/sealing.d.ts +70 -0
- package/dist/kernel/enclave/record-keys/tombstone.d.ts +57 -0
- package/dist/kernel/env-check.d.ts +1 -0
- package/dist/kernel/errors.d.ts +1922 -0
- package/dist/kernel/events.d.ts +11 -0
- package/dist/kernel/lazy-count.d.ts +13 -0
- package/dist/kernel/memory-store.d.ts +17 -0
- package/dist/kernel/mutation.d.ts +14 -0
- package/dist/kernel/noydb.d.ts +826 -0
- package/dist/kernel/paths.d.ts +25 -0
- package/dist/kernel/query/builder.d.ts +520 -0
- package/dist/kernel/query/index.d.ts +31 -0
- package/dist/kernel/query/join.d.ts +205 -0
- package/dist/kernel/query/live.d.ts +111 -0
- package/dist/kernel/query/predicate.d.ts +139 -0
- package/dist/kernel/query/scan-builder.d.ts +334 -0
- package/dist/kernel/refs.d.ts +205 -0
- package/dist/kernel/schema.d.ts +134 -0
- package/dist/kernel/sync-policy.d.ts +188 -0
- package/dist/kernel/tier-visibility.d.ts +54 -0
- package/dist/kernel/types.d.ts +3239 -0
- package/dist/kernel/util/discriminant.d.ts +58 -0
- package/dist/kernel/util/index.d.ts +14 -0
- package/dist/kernel/util/sanitize-filename.d.ts +75 -0
- package/dist/kernel/validation.d.ts +130 -0
- package/dist/kernel/vault.d.ts +1740 -0
- package/dist/kernel/via/compose.d.ts +144 -0
- package/dist/kernel/via/dispatch.d.ts +195 -0
- package/dist/kernel/via/graph-wiring.d.ts +145 -0
- package/dist/kernel/via/graph.d.ts +166 -0
- package/dist/kernel/via/index.d.ts +200 -0
- package/dist/kernel/via/pipeline.d.ts +266 -0
- package/dist/kernel/via/reconcile.d.ts +153 -0
- package/dist/kernel/via/taint-binding.d.ts +66 -0
- package/dist/kernel/write-queue.d.ts +46 -0
- package/dist/ledger-GFBKVPV4.js +42 -0
- package/dist/legacy/bundle.d.ts +30 -0
- package/dist/legacy/kernel.d.ts +33 -0
- package/dist/liberate-3VDOT4KO.js +24 -0
- package/dist/link-set-Z7Q2ASFX.js +31 -0
- package/dist/materialized-views/index.js +19 -15
- package/dist/noydb-ZCJOYBDI.js +68 -0
- package/dist/on/index.js +9 -9
- package/dist/overlay-views/index.js +4 -4
- package/dist/periods/index.js +12 -12
- package/dist/pod/index.js +11 -11
- package/dist/policy-Z3RUAIY2.js +41 -0
- package/dist/port/as/index.d.ts +26 -0
- package/dist/port/at/index.d.ts +18 -0
- package/dist/port/by/default-provider.d.ts +9 -0
- package/dist/port/by/index.d.ts +17 -0
- package/dist/port/by/types.d.ts +86 -0
- package/dist/port/in/index.d.ts +21 -0
- package/dist/port/on/index.d.ts +27 -0
- package/dist/port/to/index.d.ts +19 -0
- package/dist/port/ui/index.d.ts +21 -0
- package/dist/port/with/blob-strategy.d.ts +98 -0
- package/dist/port/with/broker-strategy.d.ts +84 -0
- package/dist/port/with/capabilities.d.ts +31 -0
- package/dist/port/with/classified-marker.d.ts +9 -0
- package/dist/port/with/classified-strategy.d.ts +62 -0
- package/dist/port/with/computed-strategy.d.ts +19 -0
- package/dist/port/with/i18n-strategy.d.ts +175 -0
- package/dist/port/with/index.d.ts +18 -0
- package/dist/port/with/lazy-strategy.d.ts +48 -0
- package/dist/port/with/lookup-strategy.d.ts +129 -0
- package/dist/port/with/service-bus.d.ts +156 -0
- package/dist/port/with/team-strategy.d.ts +36 -0
- package/dist/port/with/write-hooks.d.ts +34 -0
- package/dist/portability/index.js +8 -8
- package/dist/post-register-JTH76BLY.js +60 -0
- package/dist/post-register-JTH76BLY.js.map +1 -0
- package/dist/public-envelope-B4KNWVUA.js +32 -0
- package/dist/purge-scope-FGNNLWHD.js +24 -0
- package/dist/purge-scope-FGNNLWHD.js.map +1 -0
- package/dist/query/index.js +9 -6
- package/dist/read-only-facade-CHCKSEPD.js +8 -0
- package/dist/register-VAHONCID.js +23 -0
- package/dist/registry-7MLVD3VO.js +19 -0
- package/dist/registry-EPKPD5SM.js +18 -0
- package/dist/registry-P5T7PS2U.js +9 -0
- package/dist/request-withdrawal-TI3A5WPS.js +31 -0
- package/dist/reveal-DIBHLUZX.js +38 -0
- package/dist/reveal-DIBHLUZX.js.map +1 -0
- package/dist/revoke-FDRD6GRW.js +24 -0
- package/dist/satellites/index.js +1 -1
- package/dist/sealed-record/index.js +12 -12
- package/dist/seed-Q6M2IZFL.js +231 -0
- package/dist/seed-Q6M2IZFL.js.map +1 -0
- package/dist/session/index.js +9 -9
- package/dist/shadow/index.js +2 -2
- package/dist/signer-MUWEIUI6.js +25 -0
- package/dist/snapshots/index.js +10 -10
- package/dist/stale-OSQ7J3AA.js +29 -0
- package/dist/storage-MVFCGEQE.js +23 -0
- package/dist/store-coordination-provider-64OEZFGS.js +142 -0
- package/dist/sync/index.js +9 -9
- package/dist/team/index.js +15 -15
- package/dist/tiers/index.js +14 -10
- package/dist/to/index.js +1 -2
- package/dist/tx/index.js +3 -3
- package/dist/util/index.js +1 -1
- package/dist/verify-ZASTRNPR.js +140 -0
- package/dist/verify-ZASTRNPR.js.map +1 -0
- package/dist/via/blob/active.d.ts +34 -0
- package/dist/via/blob/binding.d.ts +86 -0
- package/dist/via/blob/index.d.ts +34 -0
- package/dist/via/classified/active.d.ts +3 -0
- package/dist/via/classified/binding.d.ts +83 -0
- package/dist/via/classified/config-drift.d.ts +34 -0
- package/dist/via/classified/descriptor.d.ts +66 -0
- package/dist/via/classified/errors.d.ts +19 -0
- package/dist/via/classified/guards.d.ts +23 -0
- package/dist/via/classified/index.d.ts +11 -0
- package/dist/via/classified/presets.d.ts +65 -0
- package/dist/via/classified/resolve.d.ts +9 -0
- package/dist/via/classified/strategy.d.ts +11 -0
- package/dist/via/classified/validators.d.ts +3 -0
- package/dist/via/classified/write.d.ts +4 -0
- package/dist/via/computed/binding.d.ts +34 -0
- package/dist/via/computed/descriptor.d.ts +35 -0
- package/dist/via/i18n/active.d.ts +28 -0
- package/dist/via/i18n/binding.d.ts +36 -0
- package/dist/via/i18n/core.d.ts +267 -0
- package/dist/via/i18n/densify.d.ts +24 -0
- package/dist/via/i18n/dictionary.d.ts +200 -0
- package/dist/via/i18n/index.d.ts +21 -0
- package/dist/via/i18n/policy.d.ts +44 -0
- package/dist/via/i18n/script.d.ts +26 -0
- package/dist/via/i18n/strategy.d.ts +13 -0
- package/dist/via/lookup/active.d.ts +19 -0
- package/dist/via/lookup/binding.d.ts +99 -0
- package/dist/via/lookup/descriptor.d.ts +123 -0
- package/dist/via/lookup/handle.d.ts +220 -0
- package/dist/via/lookup/index.d.ts +17 -0
- package/dist/via/lookup/registry.d.ts +228 -0
- package/dist/via/lookup/snapshot.d.ts +67 -0
- package/dist/via/money/arith.d.ts +68 -0
- package/dist/via/money/binding.d.ts +21 -0
- package/dist/via/money/branded.d.ts +61 -0
- package/dist/via/money/descriptor.d.ts +73 -0
- package/dist/via/money/fixed-point.d.ts +51 -0
- package/dist/via/money/index.d.ts +15 -0
- package/dist/via/money/iso4217.d.ts +6 -0
- package/dist/via/money/money-reducer.d.ts +33 -0
- package/dist/via/money/normalize.d.ts +105 -0
- package/dist/via/money/paths.d.ts +61 -0
- package/dist/via/money/where.d.ts +127 -0
- package/dist/walk-SVNDIZ62.js +241 -0
- package/dist/with/index.js +11 -11
- package/dist/with-audit/attestation/active.d.ts +10 -0
- package/dist/with-audit/attestation/index.d.ts +16 -0
- package/dist/with-audit/attestation/issue.d.ts +29 -0
- package/dist/with-audit/attestation/revoke.d.ts +15 -0
- package/dist/with-audit/attestation/signer.d.ts +33 -0
- package/dist/with-audit/attestation/strategy.d.ts +44 -0
- package/dist/with-audit/attestation/vault-facade.d.ts +62 -0
- package/dist/with-audit/consent/active.d.ts +14 -0
- package/dist/with-audit/consent/consent.d.ts +114 -0
- package/dist/with-audit/consent/index.d.ts +14 -0
- package/dist/with-audit/consent/strategy.d.ts +36 -0
- package/dist/with-audit/forget/active.d.ts +31 -0
- package/dist/with-audit/forget/index.d.ts +28 -0
- package/dist/with-audit/forget/purge-scope.d.ts +54 -0
- package/dist/with-audit/forget/strategy.d.ts +199 -0
- package/dist/with-audit/forget/subject-index.d.ts +83 -0
- package/dist/with-audit/guards/executor.d.ts +26 -0
- package/dist/with-audit/guards/immutable-guard.d.ts +63 -0
- package/dist/with-audit/guards/index.d.ts +10 -0
- package/dist/with-audit/guards/read-only-facade.d.ts +31 -0
- package/dist/with-audit/guards/registry.d.ts +83 -0
- package/dist/with-audit/guards/transition-guard.d.ts +82 -0
- package/dist/with-audit/guards/types.d.ts +134 -0
- package/dist/with-audit/guards/with-guard.d.ts +15 -0
- package/dist/with-audit/periods/active.d.ts +11 -0
- package/dist/with-audit/periods/index.d.ts +18 -0
- package/dist/with-audit/periods/periods.d.ts +417 -0
- package/dist/with-audit/periods/strategy.d.ts +32 -0
- package/dist/with-audit/periods/vault-facade.d.ts +95 -0
- package/dist/with-audit/portability/active.d.ts +11 -0
- package/dist/with-audit/portability/export-accessible.d.ts +46 -0
- package/dist/with-audit/portability/index.d.ts +18 -0
- package/dist/with-audit/portability/request-withdrawal.d.ts +85 -0
- package/dist/with-audit/portability/strategy.d.ts +31 -0
- package/dist/with-audit/portability/withdraw-accessible.d.ts +82 -0
- package/dist/with-audit/sealed-record/active.d.ts +9 -0
- package/dist/with-audit/sealed-record/index.d.ts +55 -0
- package/dist/with-audit/sealed-record/strategy.d.ts +34 -0
- package/dist/with-audit/sealed-record/types.d.ts +27 -0
- package/dist/with-audit/tiers/active.d.ts +9 -0
- package/dist/with-audit/tiers/index.d.ts +394 -0
- package/dist/with-audit/tiers/strategy.d.ts +36 -0
- package/dist/with-cargo/active.d.ts +11 -0
- package/dist/with-cargo/adopt-partition.d.ts +81 -0
- package/dist/with-cargo/decrypt-partition.d.ts +19 -0
- package/dist/with-cargo/describe-extraction.d.ts +41 -0
- package/dist/with-cargo/extract-partition.d.ts +155 -0
- package/dist/with-cargo/index.d.ts +33 -0
- package/dist/with-cargo/strategy.d.ts +30 -0
- package/dist/with-cargo/vault-diff.d.ts +144 -0
- package/dist/with-cargo/walk-closure.d.ts +67 -0
- package/dist/with-commit/crdt/active.d.ts +25 -0
- package/dist/with-commit/crdt/crdt.d.ts +42 -0
- package/dist/with-commit/crdt/index.d.ts +16 -0
- package/dist/with-commit/crdt/strategy.d.ts +25 -0
- package/dist/with-commit/history/active.d.ts +40 -0
- package/dist/with-commit/history/diff.d.ts +23 -0
- package/dist/with-commit/history/history.d.ts +73 -0
- package/dist/with-commit/history/index.d.ts +30 -0
- package/dist/with-commit/history/ledger/constants.d.ts +37 -0
- package/dist/with-commit/history/ledger/entry.d.ts +195 -0
- package/dist/with-commit/history/ledger/hash.d.ts +30 -0
- package/dist/with-commit/history/ledger/index.d.ts +19 -0
- package/dist/with-commit/history/ledger/patch.d.ts +99 -0
- package/dist/with-commit/history/ledger/store.d.ts +356 -0
- package/dist/with-commit/history/strategy.d.ts +136 -0
- package/dist/with-commit/history/time-machine.d.ts +202 -0
- package/dist/with-commit/numbering/descriptor.d.ts +27 -0
- package/dist/with-commit/numbering/index.d.ts +69 -0
- package/dist/with-commit/sequence/active.d.ts +10 -0
- package/dist/with-commit/sequence/index.d.ts +150 -0
- package/dist/with-commit/sequence/strategy.d.ts +26 -0
- package/dist/with-commit/tx/active.d.ts +27 -0
- package/dist/with-commit/tx/dry-run.d.ts +29 -0
- package/dist/with-commit/tx/elevated-handle.d.ts +59 -0
- package/dist/with-commit/tx/index.d.ts +13 -0
- package/dist/with-commit/tx/invariants.d.ts +68 -0
- package/dist/with-commit/tx/strategy.d.ts +23 -0
- package/dist/with-commit/tx/transaction.d.ts +212 -0
- package/dist/with-fork/archive/engine.d.ts +71 -0
- package/dist/with-fork/archive/index.d.ts +23 -0
- package/dist/with-fork/shadow/active.d.ts +6 -0
- package/dist/with-fork/shadow/index.d.ts +14 -0
- package/dist/with-fork/shadow/strategy.d.ts +28 -0
- package/dist/with-fork/shadow/vault-frame.d.ts +93 -0
- package/dist/with-fork/snapshots/active.d.ts +20 -0
- package/dist/with-fork/snapshots/engine.d.ts +36 -0
- package/dist/with-fork/snapshots/index.d.ts +5 -0
- package/dist/with-fork/snapshots/noydb-facade.d.ts +64 -0
- package/dist/with-fork/snapshots/policy.d.ts +23 -0
- package/dist/with-fork/snapshots/scheduler.d.ts +34 -0
- package/dist/with-fork/snapshots/strategy.d.ts +48 -0
- package/dist/with-formula/computed/index.d.ts +48 -0
- package/dist/with-formula/computed/lazy.d.ts +13 -0
- package/dist/with-formula/derivations/executor.d.ts +61 -0
- package/dist/with-formula/derivations/fanout-sidecar.d.ts +75 -0
- package/dist/with-formula/derivations/index.d.ts +6 -0
- package/dist/with-formula/derivations/registry.d.ts +67 -0
- package/dist/with-formula/derivations/stale.d.ts +39 -0
- package/dist/with-formula/derivations/strategy-hash.d.ts +1 -0
- package/dist/with-formula/derivations/types.d.ts +248 -0
- package/dist/with-formula/derivations/with-derivation.d.ts +10 -0
- package/dist/with-formula/derivations/with-rollup.d.ts +34 -0
- package/dist/with-formula/materialized-views/dependency-analyzer.d.ts +58 -0
- package/dist/with-formula/materialized-views/executor.d.ts +80 -0
- package/dist/with-formula/materialized-views/index.d.ts +11 -0
- package/dist/with-formula/materialized-views/query-hash.d.ts +23 -0
- package/dist/with-formula/materialized-views/registry.d.ts +99 -0
- package/dist/with-formula/materialized-views/stale.d.ts +113 -0
- package/dist/with-formula/materialized-views/types.d.ts +318 -0
- package/dist/with-formula/materialized-views/with-materialized-view.d.ts +24 -0
- package/dist/with-formula/overlay-views/index.d.ts +5 -0
- package/dist/with-formula/overlay-views/registry.d.ts +42 -0
- package/dist/with-formula/overlay-views/types.d.ts +97 -0
- package/dist/with-formula/overlay-views/virtual-collection.d.ts +90 -0
- package/dist/with-formula/overlay-views/with-overlayed-view.d.ts +9 -0
- package/dist/with-lookup/aggregate/active.d.ts +33 -0
- package/dist/with-lookup/aggregate/aggregation.d.ts +166 -0
- package/dist/with-lookup/aggregate/canonical-key.d.ts +16 -0
- package/dist/with-lookup/aggregate/groupby.d.ts +280 -0
- package/dist/with-lookup/aggregate/index.d.ts +23 -0
- package/dist/with-lookup/aggregate/reducers.d.ts +257 -0
- package/dist/with-lookup/aggregate/strategy.d.ts +59 -0
- package/dist/with-lookup/embeddings/cosine.d.ts +2 -0
- package/dist/with-lookup/embeddings/descriptor.d.ts +8 -0
- package/dist/with-lookup/embeddings/index.d.ts +4 -0
- package/dist/with-lookup/embeddings/vec-id.d.ts +47 -0
- package/dist/with-lookup/embeddings/vector-set.d.ts +19 -0
- package/dist/with-lookup/indexing/active.d.ts +30 -0
- package/dist/with-lookup/indexing/collection-facade.d.ts +157 -0
- package/dist/with-lookup/indexing/eager-indexes.d.ts +122 -0
- package/dist/with-lookup/indexing/index.d.ts +27 -0
- package/dist/with-lookup/indexing/lazy-builder.d.ts +102 -0
- package/dist/with-lookup/indexing/persisted-indexes.d.ts +229 -0
- package/dist/with-lookup/indexing/strategy.d.ts +56 -0
- package/dist/with-lookup/indexing/unique-constraints.d.ts +74 -0
- package/dist/with-lookup/search/active.d.ts +10 -0
- package/dist/with-lookup/search/build-docs.d.ts +15 -0
- package/dist/with-lookup/search/collection-facade.d.ts +163 -0
- package/dist/with-lookup/search/fuse.d.ts +22 -0
- package/dist/with-lookup/search/index-store.d.ts +19 -0
- package/dist/with-lookup/search/index.d.ts +19 -0
- package/dist/with-lookup/search/inverted-index.d.ts +47 -0
- package/dist/with-lookup/search/persisted-index-store.d.ts +121 -0
- package/dist/with-lookup/search/retrieve-types.d.ts +29 -0
- package/dist/with-lookup/search/scan.d.ts +28 -0
- package/dist/with-lookup/search/segment.d.ts +15 -0
- package/dist/with-lookup/search/serialize.d.ts +4 -0
- package/dist/with-lookup/search/snippet.d.ts +5 -0
- package/dist/with-lookup/search/strategy.d.ts +41 -0
- package/dist/with-lookup/search/tokenize.d.ts +12 -0
- package/dist/with-party/auth-introspection/index.d.ts +44 -0
- package/dist/with-party/broker/active.d.ts +23 -0
- package/dist/with-party/broker/index.d.ts +28 -0
- package/dist/with-party/broker/seed.d.ts +77 -0
- package/dist/with-party/custody/active.d.ts +10 -0
- package/dist/with-party/custody/index.d.ts +69 -0
- package/dist/with-party/custody/liberate.d.ts +64 -0
- package/dist/with-party/custody/strategy.d.ts +48 -0
- package/dist/with-party/directory/index.d.ts +11 -0
- package/dist/with-party/directory/public-envelope/index.d.ts +12 -0
- package/dist/with-party/directory/public-envelope/schema.d.ts +24 -0
- package/dist/with-party/directory/public-envelope/storage.d.ts +59 -0
- package/dist/with-party/directory/public-envelope/types.d.ts +80 -0
- package/dist/with-party/directory/storage.d.ts +33 -0
- package/dist/with-party/directory/types.d.ts +43 -0
- package/dist/with-party/directory/user-envelope/api.d.ts +201 -0
- package/dist/with-party/directory/user-envelope/index.d.ts +12 -0
- package/dist/with-party/directory/user-envelope/storage.d.ts +54 -0
- package/dist/with-party/directory/visibility.d.ts +47 -0
- package/dist/with-party/policy/engine.d.ts +60 -0
- package/dist/with-party/policy/index.d.ts +15 -0
- package/dist/with-party/policy/noydb-facade.d.ts +39 -0
- package/dist/with-party/policy/presets.d.ts +38 -0
- package/dist/with-party/policy/storage.d.ts +31 -0
- package/dist/with-party/session/active.d.ts +34 -0
- package/dist/with-party/session/dev-unlock.d.ts +128 -0
- package/dist/with-party/session/index.d.ts +23 -0
- package/dist/with-party/session/session-policy.d.ts +92 -0
- package/dist/with-party/session/session.d.ts +131 -0
- package/dist/with-party/session/strategy.d.ts +42 -0
- package/dist/with-party/session/unlock-state.d.ts +47 -0
- package/dist/with-party/sync/index.d.ts +31 -0
- package/dist/with-party/tab-coordination.d.ts +73 -0
- package/dist/with-party/tab-write-relay.d.ts +39 -0
- package/dist/with-party/team/active.d.ts +13 -0
- package/dist/with-party/team/authenticators.d.ts +95 -0
- package/dist/with-party/team/deed.d.ts +97 -0
- package/dist/with-party/team/delegation.d.ts +88 -0
- package/dist/with-party/team/index.d.ts +38 -0
- package/dist/with-party/team/keyring.d.ts +318 -0
- package/dist/with-party/team/magic-link-grant.d.ts +152 -0
- package/dist/with-party/team/managed-passphrase.d.ts +280 -0
- package/dist/with-party/team/noydb-facade.d.ts +484 -0
- package/dist/with-party/team/peer-recover.d.ts +81 -0
- package/dist/with-party/team/presence.d.ts +81 -0
- package/dist/with-party/team/recovery.d.ts +191 -0
- package/dist/with-party/team/reserved-secret-collections.d.ts +41 -0
- package/dist/with-party/team/rotate-recover.d.ts +275 -0
- package/dist/with-party/team/shamir-recovery-provider.d.ts +15 -0
- package/dist/with-party/team/strategy.d.ts +9 -0
- package/dist/with-party/team/sync-active.d.ts +33 -0
- package/dist/with-party/team/sync-credentials.d.ts +113 -0
- package/dist/with-party/team/sync-strategy.d.ts +67 -0
- package/dist/with-party/team/sync-transaction.d.ts +39 -0
- package/dist/with-party/team/sync.d.ts +174 -0
- package/dist/with-party/team/tiers.d.ts +39 -0
- package/dist/with-party/team/wrapped-deks.d.ts +86 -0
- package/dist/with-pod/backup.d.ts +74 -0
- package/dist/with-pod/bundle.d.ts +414 -0
- package/dist/with-pod/format.d.ts +203 -0
- package/dist/with-pod/index.d.ts +20 -0
- package/dist/with-pod/pod-store.d.ts +54 -0
- package/dist/with-pod/ulid.d.ts +64 -0
- package/dist/with-shape/blobs/blob-compaction.d.ts +170 -0
- package/dist/with-shape/blobs/blob-intent.d.ts +153 -0
- package/dist/with-shape/blobs/blob-set.d.ts +1286 -0
- package/dist/with-shape/blobs/export-blobs.d.ts +110 -0
- package/dist/with-shape/blobs/import-external.d.ts +50 -0
- package/dist/with-shape/blobs/mime-magic.d.ts +48 -0
- package/dist/with-shape/blobs/object-projection.d.ts +70 -0
- package/dist/with-shape/introspection/describe.d.ts +237 -0
- package/dist/with-shape/introspection/field-meta.d.ts +61 -0
- package/dist/with-shape/introspection/fields.d.ts +14 -0
- package/dist/with-shape/introspection/index.d.ts +12 -0
- package/dist/with-shape/introspection/json-schema.d.ts +13 -0
- package/dist/with-shape/introspection/meta.d.ts +22 -0
- package/dist/with-shape/introspection/projection.d.ts +13 -0
- package/dist/with-shape/introspection/types.d.ts +154 -0
- package/dist/with-shape/introspection/walk.d.ts +50 -0
- package/dist/with-shape/links/lazy-handle.d.ts +36 -0
- package/dist/with-shape/links/link-set.d.ts +67 -0
- package/dist/with-shape/links/names.d.ts +65 -0
- package/dist/with-shape/links/vault-facade.d.ts +211 -0
- package/dist/with-shape/persisted-schemas/canonicalize.d.ts +11 -0
- package/dist/with-shape/persisted-schemas/derive.d.ts +29 -0
- package/dist/with-shape/persisted-schemas/index.d.ts +21 -0
- package/dist/with-shape/persisted-schemas/register.d.ts +66 -0
- package/dist/with-shape/persisted-schemas/storage.d.ts +61 -0
- package/dist/with-shape/persisted-schemas/types.d.ts +54 -0
- package/dist/with-shape/satellites/dead-filter.d.ts +21 -0
- package/dist/with-shape/satellites/declare.d.ts +60 -0
- package/dist/with-shape/satellites/existence.d.ts +5 -0
- package/dist/with-shape/satellites/fanout.d.ts +38 -0
- package/dist/with-shape/satellites/forget.d.ts +47 -0
- package/dist/with-shape/satellites/index.d.ts +3 -0
- package/dist/with-shape/satellites/joined.d.ts +19 -0
- package/dist/with-shape/satellites/marker.d.ts +10 -0
- package/dist/with-shape/satellites/migrate-cek.d.ts +26 -0
- package/dist/with-shape/satellites/post-register.d.ts +6 -0
- package/dist/with-shape/satellites/proxy.d.ts +37 -0
- package/dist/with-shape/satellites/raw-target.d.ts +14 -0
- package/dist/with-shape/satellites/registry.d.ts +19 -0
- package/dist/with-shape/satellites/types.d.ts +37 -0
- package/dist/with-shape/satellites/validate.d.ts +17 -0
- package/dist/with-shape/schema-update/client-registry.d.ts +35 -0
- package/dist/with-shape/schema-update/cutover.d.ts +5 -0
- package/dist/with-shape/schema-update/delta.d.ts +2 -0
- package/dist/with-shape/schema-update/dispatch.d.ts +3 -0
- package/dist/with-shape/schema-update/fence-controller.d.ts +62 -0
- package/dist/with-shape/schema-update/fence-watcher.d.ts +37 -0
- package/dist/with-shape/schema-update/fence.d.ts +15 -0
- package/dist/with-shape/schema-update/gate.d.ts +16 -0
- package/dist/with-shape/schema-update/index.d.ts +6 -0
- package/dist/with-shape/schema-update/store-coordination-provider.d.ts +29 -0
- package/dist/with-shape/schema-update/strategies.d.ts +12 -0
- package/dist/with-shape/schema-update/types.d.ts +53 -0
- package/dist/with-store/index.d.ts +15 -0
- package/dist/with-store/lazy/active.d.ts +12 -0
- package/dist/with-store/lazy/index.d.ts +14 -0
- package/dist/with-store/lazy/strategy.d.ts +9 -0
- package/dist/with-store/route-store.d.ts +259 -0
- package/dist/with-store/store-middleware.d.ts +189 -0
- package/dist/withdraw-accessible-WZIEVWSR.js +28 -0
- package/package.json +47 -55
- package/dist/adapter/index.d.ts +0 -5
- package/dist/adapter/index.js +0 -15
- package/dist/aggregate/index.d.ts +0 -42
- package/dist/api-JDWL67WL.js +0 -20
- package/dist/as/index.d.ts +0 -7
- package/dist/at/index.d.ts +0 -5
- package/dist/attestation/index.d.ts +0 -20
- package/dist/backup-WRGNTGJF.js +0 -225
- package/dist/backup-WRGNTGJF.js.map +0 -1
- package/dist/blobs/index.d.ts +0 -44
- package/dist/bundle/index.d.ts +0 -122
- package/dist/bundle-DzWtVw7w.d.ts +0 -548
- package/dist/by/index.d.ts +0 -1
- package/dist/cargo/index.d.ts +0 -9
- package/dist/chunk-25G7PUTA.js +0 -235
- package/dist/chunk-26FSVNBL.js +0 -34
- package/dist/chunk-2PJB6H3H.js +0 -167
- package/dist/chunk-2PJB6H3H.js.map +0 -1
- package/dist/chunk-37JZR7CY.js +0 -91
- package/dist/chunk-3KBK5LU4.js +0 -117
- package/dist/chunk-3YKBGS3I.js +0 -686
- package/dist/chunk-3YKBGS3I.js.map +0 -1
- package/dist/chunk-44DV37ZV.js +0 -75
- package/dist/chunk-44DV37ZV.js.map +0 -1
- package/dist/chunk-47C4CI7R.js +0 -108
- package/dist/chunk-47C4CI7R.js.map +0 -1
- package/dist/chunk-4VDFUBTS.js +0 -275
- package/dist/chunk-4VDFUBTS.js.map +0 -1
- package/dist/chunk-55LSDABW.js +0 -94
- package/dist/chunk-56JB2BGI.js +0 -13003
- package/dist/chunk-56JB2BGI.js.map +0 -1
- package/dist/chunk-5GQE5IDB.js +0 -513
- package/dist/chunk-5GQE5IDB.js.map +0 -1
- package/dist/chunk-5HRJQSKN.js +0 -202
- package/dist/chunk-5HZULLHE.js +0 -404
- package/dist/chunk-5JQMX2EH.js +0 -50
- package/dist/chunk-5UOPIPZC.js +0 -95
- package/dist/chunk-5YBUFCFF.js +0 -135
- package/dist/chunk-62APEMF3.js +0 -280
- package/dist/chunk-62APEMF3.js.map +0 -1
- package/dist/chunk-6P5AJ2ZS.js +0 -120
- package/dist/chunk-6P5AJ2ZS.js.map +0 -1
- package/dist/chunk-6PALJTC2.js +0 -430
- package/dist/chunk-6PALJTC2.js.map +0 -1
- package/dist/chunk-6S7T6WC4.js +0 -111
- package/dist/chunk-6S7T6WC4.js.map +0 -1
- package/dist/chunk-6Z435B6N.js +0 -1656
- package/dist/chunk-6Z435B6N.js.map +0 -1
- package/dist/chunk-723XB5NX.js +0 -86
- package/dist/chunk-7CZ6YXMO.js +0 -124
- package/dist/chunk-7KTL4RHZ.js +0 -120
- package/dist/chunk-7KTL4RHZ.js.map +0 -1
- package/dist/chunk-7TAV3BFQ.js +0 -766
- package/dist/chunk-7TAV3BFQ.js.map +0 -1
- package/dist/chunk-BASCPHNM.js +0 -380
- package/dist/chunk-BASCPHNM.js.map +0 -1
- package/dist/chunk-BGIZAFY7.js +0 -1
- package/dist/chunk-BJ2XF2RC.js +0 -823
- package/dist/chunk-BM6E4MUT.js +0 -881
- package/dist/chunk-BM6E4MUT.js.map +0 -1
- package/dist/chunk-BTFTHF6Q.js +0 -42
- package/dist/chunk-C4NOLA5X.js +0 -132
- package/dist/chunk-C4NOLA5X.js.map +0 -1
- package/dist/chunk-CHK5VVMI.js +0 -155
- package/dist/chunk-DCVVCJVB.js +0 -45
- package/dist/chunk-EU7HDMT3.js +0 -54
- package/dist/chunk-F3EKFGUS.js +0 -99
- package/dist/chunk-FCOZ7DEC.js +0 -355
- package/dist/chunk-FCOZ7DEC.js.map +0 -1
- package/dist/chunk-FWART3VA.js +0 -205
- package/dist/chunk-FZK3JJJK.js +0 -150
- package/dist/chunk-GDOOG5YQ.js +0 -382
- package/dist/chunk-GLVXQU3E.js +0 -155
- package/dist/chunk-HU55NPHZ.js +0 -80
- package/dist/chunk-I6JJ6VJS.js +0 -97
- package/dist/chunk-I6URUNTD.js +0 -59
- package/dist/chunk-IARAK3PK.js +0 -14
- package/dist/chunk-II6DLDZM.js +0 -30
- package/dist/chunk-J5YUA6JB.js +0 -23
- package/dist/chunk-J7OH6R4K.js +0 -49
- package/dist/chunk-K2WCO3NX.js +0 -1
- package/dist/chunk-L6Q5NA22.js +0 -40
- package/dist/chunk-LFGJG4XZ.js +0 -30
- package/dist/chunk-M3OYTM5Z.js +0 -85
- package/dist/chunk-MOQ5M46U.js +0 -209
- package/dist/chunk-NTPWQH4S.js +0 -589
- package/dist/chunk-OJ64XMPJ.js +0 -1434
- package/dist/chunk-OJ64XMPJ.js.map +0 -1
- package/dist/chunk-OWGAXPRE.js +0 -129
- package/dist/chunk-P2PEPSPK.js +0 -230
- package/dist/chunk-P6TZ3IVN.js +0 -453
- package/dist/chunk-P6TZ3IVN.js.map +0 -1
- package/dist/chunk-PAJCRV7O.js +0 -123
- package/dist/chunk-PMMV5SQC.js +0 -416
- package/dist/chunk-PMMV5SQC.js.map +0 -1
- package/dist/chunk-PPPZIBKY.js +0 -261
- package/dist/chunk-PPPZIBKY.js.map +0 -1
- package/dist/chunk-PVC2FBCQ.js +0 -45
- package/dist/chunk-PYIUDUGS.js +0 -36
- package/dist/chunk-QABECTNN.js +0 -255
- package/dist/chunk-QYMMMKOO.js +0 -164
- package/dist/chunk-R4IVPJHN.js +0 -130
- package/dist/chunk-REWTMYSF.js +0 -32
- package/dist/chunk-REWTMYSF.js.map +0 -1
- package/dist/chunk-RNYDHIQL.js +0 -367
- package/dist/chunk-RUIMKQTA.js +0 -23
- package/dist/chunk-RUIMKQTA.js.map +0 -1
- package/dist/chunk-TCGVRKOS.js +0 -367
- package/dist/chunk-TIAYXOEI.js +0 -99
- package/dist/chunk-TQ3REHVF.js +0 -95
- package/dist/chunk-TQ3REHVF.js.map +0 -1
- package/dist/chunk-TUL5YQWF.js +0 -777
- package/dist/chunk-U7LV2DUN.js +0 -74
- package/dist/chunk-UB3XHGFG.js +0 -181
- package/dist/chunk-UB3XHGFG.js.map +0 -1
- package/dist/chunk-UMH35AQV.js +0 -70
- package/dist/chunk-UWZ7O4NR.js +0 -29
- package/dist/chunk-V76PHWLE.js +0 -41
- package/dist/chunk-VFQOE76I.js +0 -69
- package/dist/chunk-VIWOGJ2O.js +0 -71
- package/dist/chunk-VK6OC22R.js +0 -37
- package/dist/chunk-VK6OC22R.js.map +0 -1
- package/dist/chunk-VVLOWY74.js +0 -150
- package/dist/chunk-VVLOWY74.js.map +0 -1
- package/dist/chunk-W3JABOVB.js +0 -53
- package/dist/chunk-W3JABOVB.js.map +0 -1
- package/dist/chunk-WPNP3NF5.js +0 -1221
- package/dist/chunk-WPNP3NF5.js.map +0 -1
- package/dist/chunk-X5QZAJDB.js +0 -59
- package/dist/chunk-X6VNIRHS.js +0 -239
- package/dist/chunk-X6VNIRHS.js.map +0 -1
- package/dist/chunk-XBPUVQDO.js +0 -664
- package/dist/chunk-XBPUVQDO.js.map +0 -1
- package/dist/chunk-XW5LZYV4.js +0 -21
- package/dist/chunk-YTCCC6NG.js +0 -320
- package/dist/chunk-YTCCC6NG.js.map +0 -1
- package/dist/classified/index.d.ts +0 -17
- package/dist/collection-facade-EJVIN2BY.js +0 -39
- package/dist/computed-6FOFXQPE.js +0 -11
- package/dist/config-drift-RFEVGBKR.js +0 -24
- package/dist/config-drift-RFEVGBKR.js.map +0 -1
- package/dist/consent/index.d.ts +0 -23
- package/dist/crdt/index.d.ts +0 -34
- package/dist/dead-filter-RHMNYOXP.js +0 -28
- package/dist/decrypt-partition-IHtxEnTi.d.ts +0 -21
- package/dist/delegation-IHXOASHV.js +0 -25
- package/dist/derivations/index.d.ts +0 -70
- package/dist/derive-CD3ZVIXK.js +0 -21
- package/dist/describe/index.d.ts +0 -1
- package/dist/describe/index.js +0 -1
- package/dist/describe-C6iHNlqJ.d.ts +0 -162
- package/dist/dev-unlock-wgQ7Ci5I.d.ts +0 -263
- package/dist/discriminant-BN9REW3o.d.ts +0 -60
- package/dist/enclave-KGEUW2GL.js +0 -123
- package/dist/executor-EUPYHCLU.js +0 -9
- package/dist/executor-KZ4B3PRT.js +0 -9
- package/dist/executor-MHUM2VZK.js +0 -21
- package/dist/export-accessible-Z3NSZZHN.js +0 -23
- package/dist/extract-partition-VSKT35JG.js +0 -36
- package/dist/fanout-sidecar-NBDKKCHT.js +0 -74
- package/dist/find-OH4BEULF.js +0 -11
- package/dist/forget/index.d.ts +0 -36
- package/dist/guards/index.d.ts +0 -35
- package/dist/hash-CwHnoKyW.d.ts +0 -72
- package/dist/history/index.d.ts +0 -61
- package/dist/i18n/index.d.ts +0 -37
- package/dist/in/index.d.ts +0 -5
- package/dist/index-B9QdHytu.d.ts +0 -123
- package/dist/index-CTvUp94-.d.ts +0 -123
- package/dist/index-Dn5GzPg_.d.ts +0 -22138
- package/dist/indexing/index.d.ts +0 -39
- package/dist/issue-AEOL6RXA.js +0 -19
- package/dist/kernel/index.d.ts +0 -32
- package/dist/kernel/index.js +0 -59
- package/dist/lazy/index.d.ts +0 -21
- package/dist/ledger-3LR3YO2W.js +0 -42
- package/dist/liberate-XSEPRWEA.js +0 -24
- package/dist/link-set-NSUIX6BR.js +0 -31
- package/dist/materialized-views/index.d.ts +0 -173
- package/dist/mime-magic-CYbFNQ4h.d.ts +0 -103
- package/dist/noydb-POVTIVQ6.js +0 -62
- package/dist/on/index.d.ts +0 -5
- package/dist/overlay-views/index.d.ts +0 -98
- package/dist/periods/index.d.ts +0 -20
- package/dist/pod/index.d.ts +0 -63
- package/dist/policy-Y7HL2KGA.js +0 -41
- package/dist/portability/index.d.ts +0 -20
- package/dist/post-register-KOFRTCDD.js +0 -55
- package/dist/post-register-KOFRTCDD.js.map +0 -1
- package/dist/public-envelope-NC7SPNMV.js +0 -32
- package/dist/query/index.d.ts +0 -5
- package/dist/read-only-facade-5ADRJVTM.js +0 -8
- package/dist/register-3D6R2MKN.js +0 -23
- package/dist/registry-AI4E46PD.js +0 -19
- package/dist/registry-HSNQ4NBP.js +0 -9
- package/dist/registry-WIX6QCV5.js +0 -17
- package/dist/request-withdrawal-GU4XS2R5.js +0 -31
- package/dist/reveal-5Y777N5Q.js +0 -38
- package/dist/reveal-5Y777N5Q.js.map +0 -1
- package/dist/revoke-ZFETCLYV.js +0 -24
- package/dist/revoke-ZFETCLYV.js.map +0 -1
- package/dist/satellites/index.d.ts +0 -5
- package/dist/sealed-record/index.d.ts +0 -69
- package/dist/session/index.d.ts +0 -44
- package/dist/shadow/index.d.ts +0 -15
- package/dist/signer-GAIMQQ2J.js +0 -25
- package/dist/signer-GAIMQQ2J.js.map +0 -1
- package/dist/snapshots/index.d.ts +0 -26
- package/dist/stale-77LP2EEF.js +0 -14
- package/dist/stale-77LP2EEF.js.map +0 -1
- package/dist/storage-KEXIXLGM.js +0 -23
- package/dist/storage-KEXIXLGM.js.map +0 -1
- package/dist/store-coordination-provider-NJDDZ264.js +0 -142
- package/dist/subject-index-O75wKshW.d.ts +0 -362
- package/dist/sync/index.d.ts +0 -41
- package/dist/team/index.d.ts +0 -155
- package/dist/tiers/index.d.ts +0 -5
- package/dist/to/index.d.ts +0 -5
- package/dist/transition-guard-D5RLJv8S.d.ts +0 -165
- package/dist/tx/index.d.ts +0 -35
- package/dist/ui/index.d.ts +0 -1
- package/dist/ulid-DRH25k3y.d.ts +0 -66
- package/dist/util/index.d.ts +0 -79
- package/dist/validators-C3lrVF-c.d.ts +0 -101
- package/dist/vault-diff-_LSIcOMv.d.ts +0 -147
- package/dist/verify-CAYGXYNO.js +0 -139
- package/dist/verify-CAYGXYNO.js.map +0 -1
- package/dist/walk-SMAE4IEI.js +0 -241
- package/dist/with/index.d.ts +0 -38
- package/dist/with-materialized-view-Xv1-9Bh0.d.ts +0 -27
- package/dist/with-overlayed-view-CuWhq_-C.d.ts +0 -12
- package/dist/with-rollup-K_iwal4b.d.ts +0 -47
- package/dist/withdraw-accessible-Q7BULAN5.js +0 -28
- package/dist/withdraw-accessible-Q7BULAN5.js.map +0 -1
- /package/dist/{adapter/index.js.map → api-ZGS6LCOF.js.map} +0 -0
- /package/dist/{chunk-VIWOGJ2O.js.map → chunk-3B5VVCNY.js.map} +0 -0
- /package/dist/{chunk-P2PEPSPK.js.map → chunk-3LQ2YKO4.js.map} +0 -0
- /package/dist/{chunk-EU7HDMT3.js.map → chunk-3QCRBHCY.js.map} +0 -0
- /package/dist/{chunk-FZK3JJJK.js.map → chunk-4JBYV75E.js.map} +0 -0
- /package/dist/{chunk-I6JJ6VJS.js.map → chunk-4NXKCLLQ.js.map} +0 -0
- /package/dist/{chunk-VFQOE76I.js.map → chunk-5M5DVGV7.js.map} +0 -0
- /package/dist/{chunk-LFGJG4XZ.js.map → chunk-5YOLBEQ6.js.map} +0 -0
- /package/dist/{chunk-OWGAXPRE.js.map → chunk-6CRIV7DE.js.map} +0 -0
- /package/dist/{chunk-QABECTNN.js.map → chunk-6QTNZJBS.js.map} +0 -0
- /package/dist/{chunk-723XB5NX.js.map → chunk-6T2SCQRU.js.map} +0 -0
- /package/dist/{chunk-PVC2FBCQ.js.map → chunk-7DSTRQIJ.js.map} +0 -0
- /package/dist/{chunk-NTPWQH4S.js.map → chunk-AUSTCW2X.js.map} +0 -0
- /package/dist/{chunk-MOQ5M46U.js.map → chunk-B3HJYUOF.js.map} +0 -0
- /package/dist/{chunk-QYMMMKOO.js.map → chunk-BDVFPG6Y.js.map} +0 -0
- /package/dist/{chunk-PYIUDUGS.js.map → chunk-CAF6WOK7.js.map} +0 -0
- /package/dist/{chunk-5HZULLHE.js.map → chunk-CIE2BASH.js.map} +0 -0
- /package/dist/{chunk-BTFTHF6Q.js.map → chunk-CRI4OUV4.js.map} +0 -0
- /package/dist/{chunk-37JZR7CY.js.map → chunk-DLG74CNB.js.map} +0 -0
- /package/dist/{chunk-TCGVRKOS.js.map → chunk-ERJ7FU55.js.map} +0 -0
- /package/dist/{chunk-FWART3VA.js.map → chunk-EVVGJDRQ.js.map} +0 -0
- /package/dist/{chunk-X5QZAJDB.js.map → chunk-EXK7QRWF.js.map} +0 -0
- /package/dist/{chunk-5HRJQSKN.js.map → chunk-EYZ6IQ6X.js.map} +0 -0
- /package/dist/{chunk-DCVVCJVB.js.map → chunk-F64IRYG3.js.map} +0 -0
- /package/dist/{chunk-BJ2XF2RC.js.map → chunk-FHS2HQSH.js.map} +0 -0
- /package/dist/{chunk-HU55NPHZ.js.map → chunk-GKEWXIV5.js.map} +0 -0
- /package/dist/{chunk-I6URUNTD.js.map → chunk-GTGPO5KW.js.map} +0 -0
- /package/dist/{chunk-5UOPIPZC.js.map → chunk-HB3RFQSC.js.map} +0 -0
- /package/dist/{chunk-F3EKFGUS.js.map → chunk-I6GALP6E.js.map} +0 -0
- /package/dist/{chunk-R4IVPJHN.js.map → chunk-IL6POWCW.js.map} +0 -0
- /package/dist/{chunk-3KBK5LU4.js.map → chunk-IU6SNYX6.js.map} +0 -0
- /package/dist/{chunk-TUL5YQWF.js.map → chunk-J2ZX2XUV.js.map} +0 -0
- /package/dist/{chunk-UWZ7O4NR.js.map → chunk-JKJOGPZN.js.map} +0 -0
- /package/dist/{chunk-V76PHWLE.js.map → chunk-JZUV47FZ.js.map} +0 -0
- /package/dist/{chunk-II6DLDZM.js.map → chunk-K5IMOGHB.js.map} +0 -0
- /package/dist/{chunk-GDOOG5YQ.js.map → chunk-LASZKVMO.js.map} +0 -0
- /package/dist/{chunk-5YBUFCFF.js.map → chunk-NR5LT5RY.js.map} +0 -0
- /package/dist/{chunk-UMH35AQV.js.map → chunk-Q5VNKNE5.js.map} +0 -0
- /package/dist/{chunk-XW5LZYV4.js.map → chunk-QLWMEXCT.js.map} +0 -0
- /package/dist/{chunk-PAJCRV7O.js.map → chunk-QRB7NAOJ.js.map} +0 -0
- /package/dist/{chunk-U7LV2DUN.js.map → chunk-R4ROFEYC.js.map} +0 -0
- /package/dist/{chunk-RNYDHIQL.js.map → chunk-RIX4V2TB.js.map} +0 -0
- /package/dist/{chunk-L6Q5NA22.js.map → chunk-RYCTDFUX.js.map} +0 -0
- /package/dist/{chunk-CHK5VVMI.js.map → chunk-RZ5SVOYR.js.map} +0 -0
- /package/dist/{chunk-TIAYXOEI.js.map → chunk-SLFHQTTW.js.map} +0 -0
- /package/dist/{chunk-J5YUA6JB.js.map → chunk-UNFPPVNI.js.map} +0 -0
- /package/dist/{chunk-25G7PUTA.js.map → chunk-VLFCJYTL.js.map} +0 -0
- /package/dist/{chunk-7CZ6YXMO.js.map → chunk-VN3DBQAU.js.map} +0 -0
- /package/dist/{chunk-J7OH6R4K.js.map → chunk-VZRODIM3.js.map} +0 -0
- /package/dist/{chunk-55LSDABW.js.map → chunk-W22IKJE2.js.map} +0 -0
- /package/dist/{chunk-GLVXQU3E.js.map → chunk-X3YYQWOQ.js.map} +0 -0
- /package/dist/{chunk-M3OYTM5Z.js.map → chunk-YFXZEAYK.js.map} +0 -0
- /package/dist/{chunk-5JQMX2EH.js.map → chunk-ZAJAVEXY.js.map} +0 -0
- /package/dist/{chunk-26FSVNBL.js.map → chunk-ZICD77GM.js.map} +0 -0
- /package/dist/{chunk-IARAK3PK.js.map → chunk-ZUODRVHY.js.map} +0 -0
- /package/dist/{api-JDWL67WL.js.map → collection-facade-TLWIPI76.js.map} +0 -0
- /package/dist/{chunk-BGIZAFY7.js.map → computed-ZIQTYTDI.js.map} +0 -0
- /package/dist/{dead-filter-RHMNYOXP.js.map → dead-filter-ESOBZZP5.js.map} +0 -0
- /package/dist/{chunk-K2WCO3NX.js.map → delegation-W7ZV2322.js.map} +0 -0
- /package/dist/{collection-facade-EJVIN2BY.js.map → derive-H2BJTLUI.js.map} +0 -0
- /package/dist/{computed-6FOFXQPE.js.map → enclave-AP3I5W7O.js.map} +0 -0
- /package/dist/{delegation-IHXOASHV.js.map → executor-KGWTNEQD.js.map} +0 -0
- /package/dist/{derive-CD3ZVIXK.js.map → executor-OVEXR6RT.js.map} +0 -0
- /package/dist/{describe/index.js.map → executor-UNEH5ZYH.js.map} +0 -0
- /package/dist/{enclave-KGEUW2GL.js.map → export-accessible-PCMXSUZS.js.map} +0 -0
- /package/dist/{executor-EUPYHCLU.js.map → extract-partition-SWHFSYJO.js.map} +0 -0
- /package/dist/{fanout-sidecar-NBDKKCHT.js.map → fanout-sidecar-A765THMX.js.map} +0 -0
- /package/dist/{executor-KZ4B3PRT.js.map → find-N6345CNT.js.map} +0 -0
- /package/dist/{executor-MHUM2VZK.js.map → issue-5OKB6I2R.js.map} +0 -0
- /package/dist/{export-accessible-Z3NSZZHN.js.map → ledger-GFBKVPV4.js.map} +0 -0
- /package/dist/{extract-partition-VSKT35JG.js.map → liberate-3VDOT4KO.js.map} +0 -0
- /package/dist/{find-OH4BEULF.js.map → link-set-Z7Q2ASFX.js.map} +0 -0
- /package/dist/{issue-AEOL6RXA.js.map → noydb-ZCJOYBDI.js.map} +0 -0
- /package/dist/{kernel/index.js.map → policy-Z3RUAIY2.js.map} +0 -0
- /package/dist/{ledger-3LR3YO2W.js.map → public-envelope-B4KNWVUA.js.map} +0 -0
- /package/dist/{liberate-XSEPRWEA.js.map → read-only-facade-CHCKSEPD.js.map} +0 -0
- /package/dist/{link-set-NSUIX6BR.js.map → register-VAHONCID.js.map} +0 -0
- /package/dist/{noydb-POVTIVQ6.js.map → registry-7MLVD3VO.js.map} +0 -0
- /package/dist/{policy-Y7HL2KGA.js.map → registry-EPKPD5SM.js.map} +0 -0
- /package/dist/{public-envelope-NC7SPNMV.js.map → registry-P5T7PS2U.js.map} +0 -0
- /package/dist/{read-only-facade-5ADRJVTM.js.map → request-withdrawal-TI3A5WPS.js.map} +0 -0
- /package/dist/{register-3D6R2MKN.js.map → revoke-FDRD6GRW.js.map} +0 -0
- /package/dist/{registry-AI4E46PD.js.map → signer-MUWEIUI6.js.map} +0 -0
- /package/dist/{registry-HSNQ4NBP.js.map → stale-OSQ7J3AA.js.map} +0 -0
- /package/dist/{registry-WIX6QCV5.js.map → storage-MVFCGEQE.js.map} +0 -0
- /package/dist/{store-coordination-provider-NJDDZ264.js.map → store-coordination-provider-64OEZFGS.js.map} +0 -0
- /package/dist/{walk-SMAE4IEI.js.map → walk-SVNDIZ62.js.map} +0 -0
- /package/dist/{request-withdrawal-GU4XS2R5.js.map → withdraw-accessible-WZIEVWSR.js.map} +0 -0
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Streaming scan builder with filter + aggregate support.
|
|
3
|
+
*
|
|
4
|
+
* `Collection.scan()` now returns a `ScanBuilder<T>` that
|
|
5
|
+
* implements `AsyncIterable<T>` (for existing `for await … of`
|
|
6
|
+
* consumers) AND exposes chainable `.where()` / `.filter()` clauses
|
|
7
|
+
* plus a `.aggregate(spec)` async terminal that reduces the scan
|
|
8
|
+
* stream through the same reducer protocol as `Query.aggregate()`
|
|
9
|
+
*.
|
|
10
|
+
*
|
|
11
|
+
* **Memory model:** O(reducers), not O(records). The aggregate
|
|
12
|
+
* terminal initializes one state per reducer, iterates through the
|
|
13
|
+
* scan one record at a time via `for await`, applies every reducer's
|
|
14
|
+
* `step` per record, and never collects the stream into an array.
|
|
15
|
+
* This is what makes `scan().aggregate()` suitable for collections
|
|
16
|
+
* that don't fit in memory — the bound is a code-level invariant
|
|
17
|
+
* visible in the function body, not a runtime assertion.
|
|
18
|
+
*
|
|
19
|
+
* **Paginated iteration:** the builder holds a `pageProvider`
|
|
20
|
+
* closure that maps `(cursor, limit) → Promise<page>`, plumbed by
|
|
21
|
+
* `Collection.scan()` to `collection.listPage(...)`. The page
|
|
22
|
+
* iterator walks cursors forward until exhaustion, same as the
|
|
23
|
+
* previous async-generator `scan()` did.
|
|
24
|
+
*
|
|
25
|
+
* **Backward compatibility:** existing `for await (const rec of
|
|
26
|
+
* collection.scan()) { … }` code continues to work because
|
|
27
|
+
* `ScanBuilder` implements `[Symbol.asyncIterator]`. The previous
|
|
28
|
+
* signature returned an `AsyncIterableIterator<T>` (which has both
|
|
29
|
+
* `[Symbol.asyncIterator]` and `.next()`). We verified at grep time
|
|
30
|
+
* that no call sites use `.next()` on the scan result directly, so
|
|
31
|
+
* the narrowed interface is safe.
|
|
32
|
+
*
|
|
33
|
+
* **Immutability:** each `.where()` / `.filter()` call returns a
|
|
34
|
+
* fresh builder sharing the same page provider and page size. This
|
|
35
|
+
* lets a base scan be reused for multiple parallel aggregations:
|
|
36
|
+
*
|
|
37
|
+
* ```ts
|
|
38
|
+
* const scan = invoices.scan()
|
|
39
|
+
* const [open, paid] = await Promise.all([
|
|
40
|
+
* scan.where('status', '==', 'open').aggregate({ n: count() }),
|
|
41
|
+
* scan.where('status', '==', 'paid').aggregate({ n: count() }),
|
|
42
|
+
* ])
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* Note that each aggregation pays a full scan — there's no shared
|
|
46
|
+
* iteration across the two. Multi-way aggregation in a single pass
|
|
47
|
+
* is out of scope; consumers who need it should build a compound spec
|
|
48
|
+
* and run a single `.aggregate({ openN, paidN })` at the DSL level.
|
|
49
|
+
*
|
|
50
|
+
* **Out of scope for (tracked separately):**
|
|
51
|
+
* - `scan().aggregate().live()` — unbounded scan + change-stream
|
|
52
|
+
* reconciliation is a design problem, not just a code one
|
|
53
|
+
* - `scan().groupBy().aggregate()` — high-cardinality grouping on
|
|
54
|
+
* huge collections would re-introduce the O(groups) memory
|
|
55
|
+
* problem that aggregate fixes
|
|
56
|
+
* - Parallel scan across pages — race-safe page cursor contracts
|
|
57
|
+
* are not in the adapter API yet
|
|
58
|
+
* - `scan().join(...)` — tracked under (streaming join)
|
|
59
|
+
*/
|
|
60
|
+
import type { QueryField } from '../types.js';
|
|
61
|
+
import type { ReducerBuilder } from '../../with-lookup/aggregate/reducers.js';
|
|
62
|
+
import type { Clause, Operator } from './predicate.js';
|
|
63
|
+
import type { AggregateSpec, AggregateResult } from '../../with-lookup/aggregate/aggregation.js';
|
|
64
|
+
import type { JoinContext, JoinLeg } from './join.js';
|
|
65
|
+
import type { ViaPipeline } from '../via/pipeline.js';
|
|
66
|
+
/**
|
|
67
|
+
* Page provider — the Collection-shaped hook the builder calls to
|
|
68
|
+
* walk cursors forward. Kept as a structural interface so tests can
|
|
69
|
+
* wire up a synthetic provider without pulling in the full
|
|
70
|
+
* Collection class. Collection's `listPage` matches this shape
|
|
71
|
+
* exactly.
|
|
72
|
+
*/
|
|
73
|
+
export interface ScanPageProvider<T> {
|
|
74
|
+
listPage(opts: {
|
|
75
|
+
cursor?: string;
|
|
76
|
+
limit?: number;
|
|
77
|
+
}): Promise<{
|
|
78
|
+
items: T[];
|
|
79
|
+
nextCursor: string | null;
|
|
80
|
+
}>;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Chainable streaming scan. Implements `AsyncIterable<T>` for
|
|
84
|
+
* drop-in use with `for await … of`; adds `.where()` / `.filter()`
|
|
85
|
+
* chainable clauses and a `.aggregate(spec)` async terminal.
|
|
86
|
+
*
|
|
87
|
+
* The builder is immutable per operation — each chained call
|
|
88
|
+
* returns a fresh `ScanBuilder` sharing the same page provider and
|
|
89
|
+
* page size. The original builder is never mutated, so it's safe
|
|
90
|
+
* to reuse across multiple parallel consumers.
|
|
91
|
+
*/
|
|
92
|
+
export declare class ScanBuilder<T, S extends keyof T = never, M extends keyof T & string = never> implements AsyncIterable<T> {
|
|
93
|
+
private readonly pageProvider;
|
|
94
|
+
private readonly pageSize;
|
|
95
|
+
private readonly clauses;
|
|
96
|
+
/**
|
|
97
|
+
* Zero-or-more join legs to apply per record as the stream flows.
|
|
98
|
+
* Each leg attaches the resolved right-side record (or null) under
|
|
99
|
+
* its alias. — streaming joins.
|
|
100
|
+
*
|
|
101
|
+
* Joins are evaluated AFTER clauses, so a `where()` filtered-out
|
|
102
|
+
* record never triggers a right-side lookup. This is the same
|
|
103
|
+
* ordering as `Query.toArray()` (clauses first, joins after) and
|
|
104
|
+
* keeps the streaming path from doing wasted work.
|
|
105
|
+
*/
|
|
106
|
+
private readonly joins;
|
|
107
|
+
/**
|
|
108
|
+
* Join resolution context. Required for `.join()` to translate a
|
|
109
|
+
* field name into a target collection + ref mode and to resolve
|
|
110
|
+
* the right-side `JoinableSource`. Optional because tests
|
|
111
|
+
* construct ScanBuilder directly with synthetic page providers
|
|
112
|
+
* that don't know about ref() — calling `.join()` without a
|
|
113
|
+
* context throws with an actionable error.
|
|
114
|
+
*/
|
|
115
|
+
private readonly joinContext;
|
|
116
|
+
/**
|
|
117
|
+
* The backing collection's compiled Via pipeline (money now; more Via
|
|
118
|
+
* features later). When it declares a result decode, yielded records
|
|
119
|
+
* are decoded (e.g. money: stored scaled-int → canonical decimal) so
|
|
120
|
+
* `scan()` agrees with `get()`/`list()`/`query().toArray()`. Decoded
|
|
121
|
+
* with `'raw'` (canonical decimal, no locale-formatted virtuals) since
|
|
122
|
+
* the scan stream carries no locale context, mirroring `Query.toArray()`.
|
|
123
|
+
*/
|
|
124
|
+
private readonly via;
|
|
125
|
+
constructor(pageProvider: ScanPageProvider<T>, pageSize?: number, clauses?: readonly Clause[], joins?: readonly JoinLeg[], joinContext?: JoinContext, via?: ViaPipeline);
|
|
126
|
+
/**
|
|
127
|
+
* Decode this scan's Via-covered fields on a record (e.g. money: stored
|
|
128
|
+
* scaled-int → canonical decimal). No-op when the Via pipeline declares
|
|
129
|
+
* no result decode. See {@link via}.
|
|
130
|
+
*/
|
|
131
|
+
private decodeVia;
|
|
132
|
+
/**
|
|
133
|
+
* Add a field comparison. Runs per record as the scan stream
|
|
134
|
+
* flows through, so non-matching records are dropped before they
|
|
135
|
+
* reach `.aggregate()` or the iteration consumer. Multiple
|
|
136
|
+
* `.where()` calls are AND-combined — same semantics as
|
|
137
|
+
* `Query.where()`.
|
|
138
|
+
*
|
|
139
|
+
* Clauses cannot use the secondary-index fast path here because
|
|
140
|
+
* the scan sources records from the adapter's paginator, not from
|
|
141
|
+
* the in-memory cache where indexes live. Index-accelerated scans
|
|
142
|
+
* are a future optimization — the current implementation
|
|
143
|
+
* evaluates clauses per record in O(1) per clause.
|
|
144
|
+
*
|
|
145
|
+
* Consults the Via pipeline's posture before building a clause (#629
|
|
146
|
+
* Task 8): a field whose posture is `queryable: 'none'` throws
|
|
147
|
+
* `FieldNotQueryableError` here, at the call site — same gate as
|
|
148
|
+
* `Query.where()`.
|
|
149
|
+
*/
|
|
150
|
+
where(field: QueryField<T, S>, op: Operator, value: unknown): ScanBuilder<T, S, M>;
|
|
151
|
+
/**
|
|
152
|
+
* Escape hatch: add an arbitrary predicate function. Same
|
|
153
|
+
* non-serializable caveat as `Query.filter()` — filter clauses
|
|
154
|
+
* don't round-trip through `toPlan()`. Prefer `.where()` when
|
|
155
|
+
* possible.
|
|
156
|
+
*/
|
|
157
|
+
filter(fn: (record: T) => boolean): ScanBuilder<T, S, M>;
|
|
158
|
+
/**
|
|
159
|
+
* Resolve a `ref()`-declared foreign key per record as the scan
|
|
160
|
+
* stream flows, attaching the right-side record (or null) under
|
|
161
|
+
* `opts.as`. — streaming joins over `scan()`.
|
|
162
|
+
*
|
|
163
|
+
* ```ts
|
|
164
|
+
* for await (const inv of invoices.scan().join('clientId', { as: 'client' })) {
|
|
165
|
+
* await processInvoice(inv) // inv.client is attached
|
|
166
|
+
* }
|
|
167
|
+
*
|
|
168
|
+
* // Or terminate with .aggregate() for streaming joined aggregation
|
|
169
|
+
* const { total } = await invoices.scan()
|
|
170
|
+
* .where('status', '==', 'open')
|
|
171
|
+
* .join('clientId', { as: 'client' })
|
|
172
|
+
* .aggregate({ total: sum('amount') })
|
|
173
|
+
* ```
|
|
174
|
+
*
|
|
175
|
+
* **The key difference from eager `.join()`:** the LEFT
|
|
176
|
+
* side streams page-by-page from the adapter and is never
|
|
177
|
+
* materialized. Memory ceiling on the left is O(pageSize), not
|
|
178
|
+
* O(rowCount). This is what makes streaming joins suitable for
|
|
179
|
+
* collections that exceed the eager join's 50_000-row ceiling.
|
|
180
|
+
*
|
|
181
|
+
* **Right-side strategy** is auto-selected per leg:
|
|
182
|
+
* - **Indexed** — right source exposes `lookupById`, so each
|
|
183
|
+
* left row costs O(1). This is the common path for
|
|
184
|
+
* Collection right sides, which back `lookupById` with a Map
|
|
185
|
+
* lookup over the in-memory cache. The right collection must
|
|
186
|
+
* be in eager mode (the same constraint as eager join's
|
|
187
|
+
* `querySourceForJoin` from ).
|
|
188
|
+
* - **Hash** — right source has only `snapshot()`. Build a
|
|
189
|
+
* `Map<id, record>` once at iteration start, probe per left
|
|
190
|
+
* row. Same correctness, same per-row cost as the indexed
|
|
191
|
+
* path; the difference is the upfront cost of materializing
|
|
192
|
+
* the right side once.
|
|
193
|
+
*
|
|
194
|
+
* Both strategies hold the right side in memory for the duration
|
|
195
|
+
* of the iteration. The "streaming" property applies to the LEFT
|
|
196
|
+
* side only — true left-and-right streaming joins (where neither
|
|
197
|
+
* side fits in memory) require a sort-merge join planner that's
|
|
198
|
+
* out of scope for.
|
|
199
|
+
*
|
|
200
|
+
* **Ref-mode semantics** match eager `.join()` exactly:
|
|
201
|
+
* - `strict` → throws `DanglingReferenceError` mid-stream
|
|
202
|
+
* when a left record points at a non-existent right id.
|
|
203
|
+
* The throw aborts the async iterator — consumers should
|
|
204
|
+
* wrap the `for await` in try/catch if they want to recover.
|
|
205
|
+
* - `warn` → attaches `null` and emits a one-shot warning
|
|
206
|
+
* per unique dangling pair (deduped via the same warn
|
|
207
|
+
* channel as eager join).
|
|
208
|
+
* - `cascade` → attaches `null` silently. A delete-time mode;
|
|
209
|
+
* dangling refs at read time are mid-flight or pre-existing
|
|
210
|
+
* orphans, not a DSL error.
|
|
211
|
+
*
|
|
212
|
+
* Left records with null/undefined FK values attach `null`
|
|
213
|
+
* regardless of mode — same "no reference at all" policy as
|
|
214
|
+
* eager join and write-time `enforceRefsOnPut`.
|
|
215
|
+
*
|
|
216
|
+
* **Multi-FK chaining** is supported via repeated `.join()`
|
|
217
|
+
* calls: each leg resolves an independent ref. Each leg
|
|
218
|
+
* independently picks its right-side strategy and applies its
|
|
219
|
+
* own ref mode.
|
|
220
|
+
*
|
|
221
|
+
* **Joins are NOT applied** to a `.aggregate()` terminal that
|
|
222
|
+
* doesn't reference joined fields — wait, that's not quite
|
|
223
|
+
* right. The streaming path actually DOES apply joins before
|
|
224
|
+
* `.aggregate()` because the join attaches a field that the
|
|
225
|
+
* spec might reference. Unlike `Query.aggregate()` (which skips
|
|
226
|
+
* joins entirely as a projection-only short-circuit), the
|
|
227
|
+
* streaming aggregation can't know whether the spec touches a
|
|
228
|
+
* joined field, so it always applies joins. Consumers who want
|
|
229
|
+
* unjoined streaming aggregation should leave `.join()` off the
|
|
230
|
+
* chain — the chain is composable for a reason.
|
|
231
|
+
*
|
|
232
|
+
* constraint #1 — every JoinLeg carries `partitionScope:
|
|
233
|
+
* 'all'` plumbed through but never read by. Same seam as
|
|
234
|
+
* eager join.
|
|
235
|
+
*/
|
|
236
|
+
join<As extends string, R = unknown>(field: QueryField<T, S>, opts: {
|
|
237
|
+
as: As;
|
|
238
|
+
}): ScanBuilder<T & Record<As, R | null>, S, M>;
|
|
239
|
+
/**
|
|
240
|
+
* Iterate the scan as an async iterable. Walks the page
|
|
241
|
+
* provider's cursors forward until exhaustion, applying every
|
|
242
|
+
* clause per record — only matching records are yielded.
|
|
243
|
+
*
|
|
244
|
+
* Backward-compatible with the previous async-generator `scan()`
|
|
245
|
+
* return type for `for await … of` consumers.
|
|
246
|
+
*/
|
|
247
|
+
[Symbol.asyncIterator](): AsyncIterator<T>;
|
|
248
|
+
/**
|
|
249
|
+
* Per-leg right-side resolution state. Built once at iteration
|
|
250
|
+
* start and reused for every left record. Two strategies:
|
|
251
|
+
*
|
|
252
|
+
* - `lookupById`: present when the right source exposes the
|
|
253
|
+
* hook directly (typical Collection right side). Per-row
|
|
254
|
+
* cost is O(1).
|
|
255
|
+
* - `hashByPrimaryKey`: built from `snapshot()` when no
|
|
256
|
+
* lookupById. Per-row cost is O(1) after the upfront O(N)
|
|
257
|
+
* materialization. Same as eager join's hash strategy.
|
|
258
|
+
*
|
|
259
|
+
* `warnedKeys` is the per-leg dedup set for ref-mode 'warn'. We
|
|
260
|
+
* key on `field→target:refId` so the same dangling pair only
|
|
261
|
+
* warns once per iteration. The dedup is per-iteration, not
|
|
262
|
+
* per-process — a long-running scan that re-iterates would warn
|
|
263
|
+
* again, which is the desired behavior (the data may have
|
|
264
|
+
* changed between iterations).
|
|
265
|
+
*/
|
|
266
|
+
private buildJoinResolvers;
|
|
267
|
+
/**
|
|
268
|
+
* Resolve a single join leg for one left record and return the
|
|
269
|
+
* left record with the joined field attached under
|
|
270
|
+
* `leg.as`. Pure function over `(left, resolver)`; never
|
|
271
|
+
* mutates the input.
|
|
272
|
+
*
|
|
273
|
+
* Ref-mode dispatch matches eager `applyJoins` from :
|
|
274
|
+
* - null/undefined FK → attach null silently (always allowed)
|
|
275
|
+
* - dangling FK + strict → throw `DanglingReferenceError`
|
|
276
|
+
* - dangling FK + warn → attach null, warn-once per pair
|
|
277
|
+
* - dangling FK + cascade → attach null silently
|
|
278
|
+
*/
|
|
279
|
+
private applyOneJoinStreaming;
|
|
280
|
+
/**
|
|
281
|
+
* Reduce the scan stream through a named set of reducers and
|
|
282
|
+
* return the final aggregated shape.
|
|
283
|
+
*
|
|
284
|
+
* Memory is O(reducers): one mutable state slot per spec key.
|
|
285
|
+
* Records flow through the pipeline one at a time via
|
|
286
|
+
* `for await` and are discarded after their `step()` is applied
|
|
287
|
+
* — never collected into an array. This is the distinguishing
|
|
288
|
+
* property from `Query.aggregate()`, which materializes the full
|
|
289
|
+
* match set first.
|
|
290
|
+
*
|
|
291
|
+
* Reuses the same reducer protocol as `Query.aggregate()`,
|
|
292
|
+
* so `count()`, `sum(field)`, `avg(field)`, `min(field)`,
|
|
293
|
+
* `max(field)` all work unchanged. The `{ seed }` parameter
|
|
294
|
+
* plumbing from constraint #2 is honored transparently — the
|
|
295
|
+
* factories ignore it in and the scan executor never
|
|
296
|
+
* touches the per-reducer state construction.
|
|
297
|
+
*
|
|
298
|
+
* **Returns a Promise**, unlike `Query.aggregate().run()` which
|
|
299
|
+
* is synchronous. The scan is inherently async because it walks
|
|
300
|
+
* adapter pages, so the terminal has to be too. Consumers
|
|
301
|
+
* destructure with await:
|
|
302
|
+
*
|
|
303
|
+
* ```ts
|
|
304
|
+
* const { total, n } = await invoices.scan()
|
|
305
|
+
* .where('year', '==', 2025)
|
|
306
|
+
* .aggregate({ total: sum('amount'), n: count() })
|
|
307
|
+
* ```
|
|
308
|
+
*
|
|
309
|
+
* **No `.live()` in.** `scan().aggregate().live()` would
|
|
310
|
+
* require reconciling an unbounded streaming iteration with a
|
|
311
|
+
* change-stream subscription — a design problem, not just a code
|
|
312
|
+
* one. Consumers with huge collections and live needs should
|
|
313
|
+
* narrow with `.where()` enough to fit in the 50k `query()`
|
|
314
|
+
* limit and use `query().aggregate().live()` instead.
|
|
315
|
+
*
|
|
316
|
+
* Consults the Via pipeline's posture before reducing (#629 Task 8 review
|
|
317
|
+
* fix wave 1): a reducer over a field whose posture is `queryable: 'none'`
|
|
318
|
+
* throws `FieldNotQueryableError` here, metadata-only — via
|
|
319
|
+
* `ViaPipeline.refuseUnqueryableReducers`, NOT the full `wrapReducers`
|
|
320
|
+
* (which would also activate money's exact-reducer rewrite, a path this
|
|
321
|
+
* method has never run and must not start running as a side effect of
|
|
322
|
+
* this gate).
|
|
323
|
+
*/
|
|
324
|
+
aggregate<Spec extends AggregateSpec>(spec: Spec): Promise<AggregateResult<Spec>>;
|
|
325
|
+
aggregate<Spec extends AggregateSpec>(build: (b: ReducerBuilder<T, S, M>) => Spec): Promise<AggregateResult<Spec>>;
|
|
326
|
+
/**
|
|
327
|
+
* Evaluate the clause list against a single record. Linear in
|
|
328
|
+
* the clause count; short-circuits on first false. Clauses on a
|
|
329
|
+
* scan are always re-evaluated per record — no index-accelerated
|
|
330
|
+
* path, because the stream sources records from the adapter
|
|
331
|
+
* paginator, not from the in-memory cache where indexes live.
|
|
332
|
+
*/
|
|
333
|
+
private recordMatches;
|
|
334
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Foreign-key references — the soft-FK mechanism.
|
|
3
|
+
*
|
|
4
|
+
* A collection declares its references as metadata at construction
|
|
5
|
+
* time:
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { ref } from '@noy-db/hub'
|
|
9
|
+
*
|
|
10
|
+
* const invoices = company.collection<Invoice>('invoices', {
|
|
11
|
+
* refs: {
|
|
12
|
+
* clientId: ref('clients'), // default: strict
|
|
13
|
+
* categoryId: ref('categories', 'warn'),
|
|
14
|
+
* parentId: ref('invoices', 'cascade'), // self-reference OK
|
|
15
|
+
* },
|
|
16
|
+
* })
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* Three modes:
|
|
20
|
+
*
|
|
21
|
+
* - **strict** — the default. `put()` rejects records whose
|
|
22
|
+
* reference target doesn't exist, and `delete()` of the target
|
|
23
|
+
* rejects if any strict-referencing records still exist.
|
|
24
|
+
* Matches SQL's default FK semantics.
|
|
25
|
+
*
|
|
26
|
+
* - **warn** — both operations succeed unconditionally. Broken
|
|
27
|
+
* references surface only through
|
|
28
|
+
* `vault.checkIntegrity()`, which walks every collection
|
|
29
|
+
* and reports orphans. Use when you want soft validation for
|
|
30
|
+
* imports from messy sources.
|
|
31
|
+
*
|
|
32
|
+
* - **cascade** — `put()` is same as warn. `delete()` of the
|
|
33
|
+
* target deletes every referencing record. Cycles are detected
|
|
34
|
+
* and broken via an in-progress set, so mutual cascades
|
|
35
|
+
* terminate instead of recursing forever.
|
|
36
|
+
*
|
|
37
|
+
* Cross-vault refs are explicitly rejected: if the target
|
|
38
|
+
* name contains a `/`, `ref()` throws `RefScopeError`. Cross-
|
|
39
|
+
* vault refs need an auth story (multi-keyring reads) that
|
|
40
|
+
* doesn't ship — tracked for.
|
|
41
|
+
*/
|
|
42
|
+
import { NoydbError } from './errors.js';
|
|
43
|
+
/** The three enforcement modes. Default for new refs is `'strict'`. */
|
|
44
|
+
export type RefMode = 'strict' | 'warn' | 'cascade';
|
|
45
|
+
/**
|
|
46
|
+
* Descriptor returned by `ref()`. Collections accept a
|
|
47
|
+
* `Record<string, RefDescriptor>` in their options. The key is the
|
|
48
|
+
* field name on the record (top-level only — dotted paths are out of
|
|
49
|
+
* scope), the value describes which target collection the
|
|
50
|
+
* field references and under what mode.
|
|
51
|
+
*
|
|
52
|
+
* The descriptor carries only plain data so it can be serialized,
|
|
53
|
+
* passed around, and introspected without any class machinery.
|
|
54
|
+
*/
|
|
55
|
+
export interface RefDescriptor {
|
|
56
|
+
readonly target: string;
|
|
57
|
+
readonly mode: RefMode;
|
|
58
|
+
/**
|
|
59
|
+
* Present and `true` only for an array ref (`refArray()`): the
|
|
60
|
+
* field holds an ARRAY of ids, each validated against `target`
|
|
61
|
+
* independently (M:N). Absent for a scalar `ref()`. The same `mode`
|
|
62
|
+
* semantics apply per element — strict rejects on a missing element at
|
|
63
|
+
* put + blocks delete of a referenced target; cascade deletes every
|
|
64
|
+
* record whose array contains the deleted id; warn surfaces orphans
|
|
65
|
+
* only via `checkIntegrity()`.
|
|
66
|
+
*/
|
|
67
|
+
readonly isArray?: true;
|
|
68
|
+
}
|
|
69
|
+
/** Runtime predicate: is this an array ref (`refArray()`) vs a scalar `ref()`? */
|
|
70
|
+
export declare function isRefArray(desc: RefDescriptor): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Thrown when a strict reference is violated — either `put()` with a
|
|
73
|
+
* missing target id, or `delete()` of a target that still has
|
|
74
|
+
* strict-referencing records.
|
|
75
|
+
*
|
|
76
|
+
* Carries structured detail so UI code (and a potential future
|
|
77
|
+
* devtools panel) can render "client X cannot be deleted because
|
|
78
|
+
* invoices 1, 2, and 3 reference it" instead of a bare error string.
|
|
79
|
+
*/
|
|
80
|
+
export declare class RefIntegrityError extends NoydbError {
|
|
81
|
+
readonly collection: string;
|
|
82
|
+
readonly id: string;
|
|
83
|
+
readonly field: string;
|
|
84
|
+
readonly refTo: string;
|
|
85
|
+
readonly refId: string | null;
|
|
86
|
+
constructor(opts: {
|
|
87
|
+
collection: string;
|
|
88
|
+
id: string;
|
|
89
|
+
field: string;
|
|
90
|
+
refTo: string;
|
|
91
|
+
refId: string | null;
|
|
92
|
+
message: string;
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Thrown when `ref()` is called with a target name that looks like
|
|
97
|
+
* a cross-vault reference (contains a `/`). Separate error
|
|
98
|
+
* class because the fix is different: RefIntegrityError means "data
|
|
99
|
+
* is wrong"; RefScopeError means "the ref declaration is wrong".
|
|
100
|
+
*/
|
|
101
|
+
export declare class RefScopeError extends NoydbError {
|
|
102
|
+
constructor(target: string);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Helper constructor. Thin wrapper around the object literal so user
|
|
106
|
+
* code reads like `ref('clients')` instead of `{ target: 'clients',
|
|
107
|
+
* mode: 'strict' }` — this is the only ergonomics reason it exists.
|
|
108
|
+
*
|
|
109
|
+
* Validates the target name eagerly so a misconfigured ref declaration
|
|
110
|
+
* fails at collection construction time, not at the first put.
|
|
111
|
+
*/
|
|
112
|
+
export declare function ref(target: string, mode?: RefMode): RefDescriptor;
|
|
113
|
+
/**
|
|
114
|
+
* Array reference — the many-to-many soft-FK. The field holds an
|
|
115
|
+
* array of ids; each element is validated against `target` independently.
|
|
116
|
+
*
|
|
117
|
+
* ```ts
|
|
118
|
+
* const orders = company.collection<Order>('orders', {
|
|
119
|
+
* refs: { productIds: refArray('products', 'warn') },
|
|
120
|
+
* })
|
|
121
|
+
* ```
|
|
122
|
+
*
|
|
123
|
+
* Same three `mode` semantics as `ref()`, applied per element:
|
|
124
|
+
* - **strict** — `put()` rejects if ANY element's target is missing;
|
|
125
|
+
* `delete()` of a target is blocked while any record's array still
|
|
126
|
+
* contains its id.
|
|
127
|
+
* - **warn** — both succeed; orphaned elements surface via
|
|
128
|
+
* `vault.checkIntegrity()` (one violation per dangling element).
|
|
129
|
+
* - **cascade** — `delete()` of a target deletes every record whose
|
|
130
|
+
* array contains its id (cycle-safe, like scalar cascade).
|
|
131
|
+
*
|
|
132
|
+
* A `null`/`undefined` field is allowed (no links). Non-array values, or
|
|
133
|
+
* non-string/number elements, are an integrity error. Cross-vault targets
|
|
134
|
+
* are rejected exactly as in `ref()`.
|
|
135
|
+
*/
|
|
136
|
+
export declare function refArray(target: string, mode?: RefMode): RefDescriptor;
|
|
137
|
+
/**
|
|
138
|
+
* Per-vault registry of reference declarations.
|
|
139
|
+
*
|
|
140
|
+
* The registry is populated by `Collection` constructors (which pass
|
|
141
|
+
* their `refs` option through the Vault) and consulted by the
|
|
142
|
+
* Vault on every `put` / `delete` and by `checkIntegrity`. A
|
|
143
|
+
* single instance lives on the Vault for its lifetime; there's
|
|
144
|
+
* no global state.
|
|
145
|
+
*
|
|
146
|
+
* The data structure is two parallel maps:
|
|
147
|
+
*
|
|
148
|
+
* - `outbound`: `collection → { field → RefDescriptor }` — what
|
|
149
|
+
* refs does `collection` declare? Used on put to check
|
|
150
|
+
* strict-target-exists and on checkIntegrity to walk each
|
|
151
|
+
* collection's outbound refs.
|
|
152
|
+
*
|
|
153
|
+
* - `inbound`: `target → Array<{ collection, field, mode }>` —
|
|
154
|
+
* which collections reference `target`? Used on delete to find
|
|
155
|
+
* the records that might be affected by cascade / strict.
|
|
156
|
+
*
|
|
157
|
+
* The two views are kept in sync by `register()` and never mutated
|
|
158
|
+
* otherwise — refs can't be unregistered at runtime in.
|
|
159
|
+
*/
|
|
160
|
+
export declare class RefRegistry {
|
|
161
|
+
private readonly outbound;
|
|
162
|
+
private readonly inbound;
|
|
163
|
+
/**
|
|
164
|
+
* Register the refs declared by a single collection. Idempotent in
|
|
165
|
+
* the happy path — calling twice with the same data is a no-op.
|
|
166
|
+
* Calling twice with DIFFERENT data throws, because silent
|
|
167
|
+
* overrides would be confusing ("I changed the ref and it doesn't
|
|
168
|
+
* update" vs "I declared the same collection twice with different
|
|
169
|
+
* refs and the second call won").
|
|
170
|
+
*/
|
|
171
|
+
register(collection: string, refs: Record<string, RefDescriptor>): void;
|
|
172
|
+
/** Get the outbound refs declared by a collection (or `{}` if none). */
|
|
173
|
+
getOutbound(collection: string): Record<string, RefDescriptor>;
|
|
174
|
+
/** Get the inbound refs that target a given collection (or `[]`). */
|
|
175
|
+
getInbound(target: string): ReadonlyArray<{
|
|
176
|
+
collection: string;
|
|
177
|
+
field: string;
|
|
178
|
+
mode: RefMode;
|
|
179
|
+
isArray?: true;
|
|
180
|
+
}>;
|
|
181
|
+
/**
|
|
182
|
+
* Iterate every (collection → refs) pair that has at least one
|
|
183
|
+
* declared reference. Used by `checkIntegrity` to walk the full
|
|
184
|
+
* universe of outbound refs without needing to track collection
|
|
185
|
+
* names elsewhere.
|
|
186
|
+
*/
|
|
187
|
+
entries(): Array<[string, Record<string, RefDescriptor>]>;
|
|
188
|
+
/** Clear the registry. Test-only escape hatch; never called from production code. */
|
|
189
|
+
clear(): void;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Shape of a single violation reported by `vault.checkIntegrity()`.
|
|
193
|
+
*
|
|
194
|
+
* `refId` is the value we saw in the referencing field — it's the
|
|
195
|
+
* ID we expected to find in `refTo`, but didn't. Left as `unknown`
|
|
196
|
+
* because records are loosely typed at the integrity-check layer.
|
|
197
|
+
*/
|
|
198
|
+
export interface RefViolation {
|
|
199
|
+
readonly collection: string;
|
|
200
|
+
readonly id: string;
|
|
201
|
+
readonly field: string;
|
|
202
|
+
readonly refTo: string;
|
|
203
|
+
readonly refId: unknown;
|
|
204
|
+
readonly mode: RefMode;
|
|
205
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard Schema v1 integration.
|
|
3
|
+
*
|
|
4
|
+
* This file is the entry point for **schema validation**. Any
|
|
5
|
+
* validator that implements the [Standard Schema v1
|
|
6
|
+
* protocol](https://standardschema.dev) — Zod, Valibot, ArkType, Effect
|
|
7
|
+
* Schema, etc. — can be attached to a `Collection` or `defineNoydbStore`
|
|
8
|
+
* and will:
|
|
9
|
+
*
|
|
10
|
+
* 1. Validate the record BEFORE encryption on `put()` — bad data is
|
|
11
|
+
* rejected at the store boundary with a rich issue list.
|
|
12
|
+
* 2. Validate the record AFTER decryption on `get()`/`list()`/`query()`
|
|
13
|
+
* — stored data that has drifted from the current schema throws
|
|
14
|
+
* loudly instead of silently propagating garbage to the UI.
|
|
15
|
+
*
|
|
16
|
+
* ## Why vendor the types?
|
|
17
|
+
*
|
|
18
|
+
* Standard Schema is a protocol, not a library. The spec is <200 lines of
|
|
19
|
+
* TypeScript and has no runtime. There's an official `@standard-schema/spec`
|
|
20
|
+
* types package on npm, but pulling it in would add a dependency edge
|
|
21
|
+
* purely for type definitions. Vendoring the minimal surface keeps
|
|
22
|
+
* `@noy-db/core` at **zero runtime dependencies** and gives us freedom to
|
|
23
|
+
* evolve the helpers without a version-lock on the spec package.
|
|
24
|
+
*
|
|
25
|
+
* If the spec changes in a breaking way (unlikely — it's frozen at v1),
|
|
26
|
+
* we update this file and bump our minor.
|
|
27
|
+
*
|
|
28
|
+
* ## Why not just run `schema.parse(value)` directly?
|
|
29
|
+
*
|
|
30
|
+
* Because then we'd be locked to whichever validator happens to have
|
|
31
|
+
* `.parse`. Standard Schema's `'~standard'.validate` contract is the same
|
|
32
|
+
* across every implementation and includes a structured issues list,
|
|
33
|
+
* which is much more useful than a thrown error for programmatic error
|
|
34
|
+
* handling (e.g., rendering field-level messages in a Vue component).
|
|
35
|
+
*/
|
|
36
|
+
/**
|
|
37
|
+
* The Standard Schema v1 protocol. A schema is any object that exposes a
|
|
38
|
+
* `'~standard'` property with `version: 1` and a `validate` function.
|
|
39
|
+
*
|
|
40
|
+
* The type parameters are:
|
|
41
|
+
* - `Input` — the type accepted by `validate` (what the user passes in)
|
|
42
|
+
* - `Output` — the type produced by `validate` (what we store/return,
|
|
43
|
+
* may differ from Input if the schema transforms or coerces)
|
|
44
|
+
*
|
|
45
|
+
* In most cases `Input === Output`, but validators that transform
|
|
46
|
+
* (Zod's `.transform`, Valibot's `transform`, etc.) can narrow or widen.
|
|
47
|
+
*
|
|
48
|
+
* We intentionally keep the `types` field `readonly` and optional — the
|
|
49
|
+
* spec marks it as optional because it's only used for inference, and
|
|
50
|
+
* not every implementation bothers populating it at runtime.
|
|
51
|
+
*/
|
|
52
|
+
export interface StandardSchemaV1<Input = unknown, Output = Input> {
|
|
53
|
+
readonly '~standard': {
|
|
54
|
+
readonly version: 1;
|
|
55
|
+
readonly vendor: string;
|
|
56
|
+
readonly validate: (value: unknown) => StandardSchemaV1SyncResult<Output> | Promise<StandardSchemaV1SyncResult<Output>>;
|
|
57
|
+
readonly types?: {
|
|
58
|
+
readonly input: Input;
|
|
59
|
+
readonly output: Output;
|
|
60
|
+
} | undefined;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The result of a single call to `schema['~standard'].validate`. Either
|
|
65
|
+
* `{ value }` on success or `{ issues }` on failure — never both.
|
|
66
|
+
*
|
|
67
|
+
* The spec allows `issues` to be undefined on success (and some
|
|
68
|
+
* validators leave it that way), so consumers should discriminate on
|
|
69
|
+
* `issues?.length` rather than on truthiness of `value`.
|
|
70
|
+
*/
|
|
71
|
+
export type StandardSchemaV1SyncResult<Output> = {
|
|
72
|
+
readonly value: Output;
|
|
73
|
+
readonly issues?: undefined;
|
|
74
|
+
} | {
|
|
75
|
+
readonly value?: undefined;
|
|
76
|
+
readonly issues: readonly StandardSchemaV1Issue[];
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* A single validation issue. The `message` is always present; the `path`
|
|
80
|
+
* is optional and points at the offending field when the schema tracks
|
|
81
|
+
* it (virtually every validator does for object types).
|
|
82
|
+
*
|
|
83
|
+
* The path is deliberately permissive — both a plain `PropertyKey` and a
|
|
84
|
+
* `{ key }` wrapper are allowed so validators that wrap path segments in
|
|
85
|
+
* objects (Zod does this in some modes) don't need special handling.
|
|
86
|
+
*/
|
|
87
|
+
export interface StandardSchemaV1Issue {
|
|
88
|
+
readonly message: string;
|
|
89
|
+
readonly path?: ReadonlyArray<PropertyKey | {
|
|
90
|
+
readonly key: PropertyKey;
|
|
91
|
+
}> | undefined;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Infer the output type of a Standard Schema. Consumers use this to
|
|
95
|
+
* pull the type out of a schema instance when they want to declare a
|
|
96
|
+
* Collection<T> or defineNoydbStore<T> with `T` derived from the schema.
|
|
97
|
+
*
|
|
98
|
+
* Example:
|
|
99
|
+
* ```ts
|
|
100
|
+
* const InvoiceSchema = z.object({ id: z.string(), amount: z.number() })
|
|
101
|
+
* type Invoice = InferOutput<typeof InvoiceSchema>
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
export type InferOutput<T extends StandardSchemaV1> = T extends StandardSchemaV1<unknown, infer O> ? O : never;
|
|
105
|
+
/**
|
|
106
|
+
* Validate an input value against a schema. Throws
|
|
107
|
+
* `SchemaValidationError` if the schema rejects, with the rich issue
|
|
108
|
+
* list attached. Otherwise returns the (possibly transformed) output
|
|
109
|
+
* value.
|
|
110
|
+
*
|
|
111
|
+
* The `context` string is included in the thrown error's message so the
|
|
112
|
+
* caller knows where the failure happened (e.g. `"put(inv-001)"`) without
|
|
113
|
+
* every caller having to wrap the throw in a try/catch.
|
|
114
|
+
*
|
|
115
|
+
* This function is ALWAYS async because some validators (notably Effect
|
|
116
|
+
* Schema and Zod's `.refine` with async predicates) can return a
|
|
117
|
+
* Promise. We `await` the result unconditionally to normalize the
|
|
118
|
+
* contract — the extra microtask is free compared to the cost of an
|
|
119
|
+
* encrypt/decrypt round-trip.
|
|
120
|
+
*/
|
|
121
|
+
export declare function validateSchemaInput<Output>(schema: StandardSchemaV1<unknown, Output>, value: unknown, context: string): Promise<Output>;
|
|
122
|
+
/**
|
|
123
|
+
* Validate an already-stored value coming OUT of the collection. This
|
|
124
|
+
* is a distinct helper from `validateSchemaInput` because the error
|
|
125
|
+
* semantics differ: an output-validation failure means the data in
|
|
126
|
+
* storage has drifted from the current schema (an unexpected state),
|
|
127
|
+
* whereas an input-validation failure means the user passed bad data
|
|
128
|
+
* (an expected state for a UI that isn't guarding its inputs).
|
|
129
|
+
*
|
|
130
|
+
* We still throw — silently returning bad data would be worse — but
|
|
131
|
+
* the error carries `direction: 'output'` so upstream code (and a
|
|
132
|
+
* potential migrate hook) can distinguish the two cases.
|
|
133
|
+
*/
|
|
134
|
+
export declare function validateSchemaOutput<Output>(schema: StandardSchemaV1<unknown, Output>, value: unknown, context: string): Promise<Output>;
|