@noy-db/hub 0.3.0-pre.10 → 0.3.0-pre.11
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 +4 -4
- package/dist/api-YGMINAET.js +20 -0
- package/dist/as/index.js +11 -11
- package/dist/attestation/index.js +18 -18
- package/dist/backup-XA5STIYQ.js +225 -0
- package/dist/blobs/index.js +10 -10
- package/dist/broker/index.js +92 -0
- package/dist/broker/index.js.map +1 -0
- package/dist/bundle/index.js +20 -20
- package/dist/by/index.js +2 -2
- package/dist/cargo/index.js +30 -30
- package/dist/chunk-25NDNMQ7.js +70 -0
- package/dist/chunk-2JMMY7HZ.js +188 -0
- package/dist/chunk-3CNQ7FQ3.js +430 -0
- package/dist/chunk-3G4KMVUN.js +291 -0
- package/dist/chunk-3MSQLQNZ.js +74 -0
- package/dist/chunk-45ZZLTFH.js +38 -0
- package/dist/chunk-4GPE63GU.js +111 -0
- package/dist/chunk-4GPE63GU.js.map +1 -0
- package/dist/chunk-4N5QFSNQ.js +150 -0
- package/dist/chunk-4R4Q64W5.js +34 -0
- package/dist/chunk-57V5S7PW.js +130 -0
- package/dist/chunk-5JB73NMC.js +202 -0
- package/dist/chunk-5XIPOCQC.js +155 -0
- package/dist/chunk-5ZOSG3RJ.js +778 -0
- package/dist/chunk-67TNU77I.js +36 -0
- package/dist/chunk-6QILBDZU.js +205 -0
- package/dist/chunk-7E67FJ33.js +155 -0
- package/dist/chunk-7ITPJFGC.js +50 -0
- package/dist/chunk-7NS43EXZ.js +117 -0
- package/dist/chunk-7QIXUSDQ.js +341 -0
- package/dist/chunk-7VSGW5KJ.js +74 -0
- package/dist/chunk-A2QF4JUE.js +14073 -0
- package/dist/chunk-A2QF4JUE.js.map +1 -0
- package/dist/chunk-A2Y6YFVN.js +209 -0
- package/dist/chunk-AOVDSIL3.js +1221 -0
- package/dist/chunk-ARSAMO24.js +29 -0
- package/dist/chunk-AWB5JZW6.js +41 -0
- package/dist/chunk-BCYQA5BK.js +45 -0
- package/dist/chunk-BE7N3AXA.js +621 -0
- package/dist/chunk-BEIRE5K4.js +164 -0
- package/dist/chunk-BZO4WCJI.js +86 -0
- package/dist/chunk-C3YH34IL.js +75 -0
- package/dist/chunk-C7NTK5I3.js +49 -0
- package/dist/chunk-CB25ONKC.js +129 -0
- package/dist/chunk-CIKY6I4W.js +21 -0
- package/dist/chunk-CKZW6P5V.js +32 -0
- package/dist/chunk-CKZW6P5V.js.map +1 -0
- package/dist/chunk-D26JB3LZ.js +54 -0
- package/dist/chunk-D3EFFFOL.js +59 -0
- package/dist/chunk-DGH65E7Q.js +466 -0
- package/dist/chunk-DIRRS7WP.js +42 -0
- package/dist/chunk-DJ3VKYFA.js +150 -0
- package/dist/chunk-DJ3VKYFA.js.map +1 -0
- package/dist/chunk-DMFNPHCX.js +247 -0
- package/dist/chunk-ELNBMFOS.js +392 -0
- package/dist/chunk-FH542DDY.js +1505 -0
- package/dist/chunk-FH542DDY.js.map +1 -0
- package/dist/chunk-FQQF23MC.js +45 -0
- package/dist/chunk-FXK4X4BL.js +91 -0
- package/dist/chunk-GA2QHD6P.js +235 -0
- package/dist/chunk-H44ZE4IE.js +355 -0
- package/dist/chunk-H6CZSDWK.js +1697 -0
- package/dist/chunk-H6HM6CVR.js +279 -0
- package/dist/chunk-HFJIGWJC.js +382 -0
- package/dist/chunk-HUS3J5WM.js +404 -0
- package/dist/chunk-IDIV5NVH.js +99 -0
- package/dist/chunk-IGJHJYM6.js +515 -0
- package/dist/chunk-IP2QBAGS.js +589 -0
- package/dist/chunk-JOQ53DMI.js +255 -0
- package/dist/chunk-K62IUKOD.js +823 -0
- package/dist/chunk-KPGX66PM.js +230 -0
- package/dist/chunk-L2SNBIV7.js +453 -0
- package/dist/chunk-MCEKIAO4.js +367 -0
- package/dist/chunk-MELR46EF.js +280 -0
- package/dist/chunk-MSPNM2OM.js +95 -0
- package/dist/chunk-O2DYPAZY.js +23 -0
- package/dist/chunk-ODJWBC5I.js +30 -0
- package/dist/chunk-OEAATWH5.js +686 -0
- package/dist/chunk-OFJ5GPNA.js +71 -0
- package/dist/chunk-OOLO4LQG.js +99 -0
- package/dist/chunk-P5RY4ZWD.js +662 -0
- package/dist/chunk-PR5LC5YX.js +265 -0
- package/dist/chunk-PXWVF7MC.js +135 -0
- package/dist/chunk-Q3XSMOZM.js +40 -0
- package/dist/chunk-QLLKLFE2.js +94 -0
- package/dist/chunk-QQJXBZCO.js +1056 -0
- package/dist/chunk-QQJXBZCO.js.map +1 -0
- package/dist/chunk-QYPKGVT4.js +261 -0
- package/dist/chunk-RKRGDAS7.js +59 -0
- package/dist/chunk-SRVQHVNX.js +164 -0
- package/dist/chunk-SYMS4546.js +29 -0
- package/dist/chunk-TPH5EO6L.js +54 -0
- package/dist/chunk-UFILRICG.js +14 -0
- package/dist/chunk-UTLEAJXC.js +97 -0
- package/dist/chunk-VA4ZWLFY.js +123 -0
- package/dist/chunk-VR24ILCR.js +367 -0
- package/dist/chunk-W5D62AQD.js +944 -0
- package/dist/chunk-WGV4CUZT.js +167 -0
- package/dist/chunk-WTUNZACT.js +30 -0
- package/dist/chunk-WTUNZACT.js.map +1 -0
- package/dist/chunk-X6CMGUAG.js +69 -0
- package/dist/chunk-XFXUTFWQ.js +85 -0
- package/dist/chunk-XHV25KBM.js +30 -0
- package/dist/chunk-YSXEFGND.js +124 -0
- package/dist/chunk-YXOUQ2H7.js +36 -0
- package/dist/chunk-ZP5PL65C.js +80 -0
- package/dist/classified/index.js +5 -5
- package/dist/classified-marker-LQWWQNIJ.js +24 -0
- package/dist/collection-facade-YE2O4J4O.js +39 -0
- package/dist/computed-W6MVAMWZ.js +11 -0
- package/dist/consent/index.js +9 -9
- package/dist/crdt/index.js +1 -1
- package/dist/dead-filter-4KXZEB3X.js +28 -0
- package/dist/delegation-OPUU3R2E.js +25 -0
- package/dist/derivations/index.js +12 -12
- package/dist/derive-BGUHU663.js +21 -0
- package/dist/enclave-VXAQD4XJ.js +135 -0
- package/dist/executor-GTVSUUBX.js +25 -0
- package/dist/executor-GZWMTOXB.js +9 -0
- package/dist/executor-XXGS4S3K.js +9 -0
- package/dist/export-accessible-BMULIOYB.js +23 -0
- package/dist/extract-partition-JUQTWDXR.js +36 -0
- package/dist/fanout-sidecar-CKYFH33E.js +74 -0
- package/dist/find-XRGCNGNN.js +11 -0
- package/dist/forget/index.js +10 -10
- package/dist/forget/index.js.map +1 -1
- package/dist/guards/index.js +3 -3
- package/dist/history/index.js +11 -11
- package/dist/i18n/index.js +15 -15
- package/dist/index.d.ts +303 -1492
- package/dist/index.js +172 -171
- package/dist/index.js.map +1 -1
- package/dist/indexing/index.js +2 -2
- package/dist/issue-UB6AA5M6.js +19 -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 +781 -0
- package/dist/kernel/collection.d.ts +1505 -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 +33 -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 +78 -0
- package/dist/kernel/enclave/record-keys/deterministic.d.ts +54 -0
- package/dist/kernel/enclave/record-keys/envelope-body.d.ts +79 -0
- package/dist/kernel/enclave/record-keys/lifecycle.d.ts +57 -0
- package/dist/kernel/enclave/record-keys/record-codec.d.ts +301 -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 +1848 -0
- package/dist/kernel/events.d.ts +11 -0
- package/dist/kernel/memory-store.d.ts +17 -0
- package/dist/kernel/mutation.d.ts +14 -0
- package/dist/kernel/noydb.d.ts +818 -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/types.d.ts +3147 -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 +1723 -0
- package/dist/kernel/via/compose.d.ts +144 -0
- package/dist/kernel/via/dispatch.d.ts +185 -0
- package/dist/kernel/via/graph-wiring.d.ts +145 -0
- package/dist/kernel/via/graph.d.ts +165 -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-FU6GH5EH.js +42 -0
- package/dist/legacy/bundle.d.ts +30 -0
- package/dist/legacy/kernel.d.ts +33 -0
- package/dist/liberate-YUN7W5QG.js +24 -0
- package/dist/link-set-MNADSH5M.js +31 -0
- package/dist/materialized-views/index.js +19 -19
- package/dist/noydb-6JLBZU4U.js +67 -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-JTFOPPUU.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 +81 -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 +128 -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-HAWO3O7O.js +55 -0
- package/dist/public-envelope-NJVB7LPA.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 +5 -5
- package/dist/register-VCKOBWKT.js +23 -0
- package/dist/registry-72UKJ2L4.js +9 -0
- package/dist/registry-BZFLJNEH.js +18 -0
- package/dist/registry-YJEYSYI5.js +19 -0
- package/dist/request-withdrawal-6MJRMFHF.js +31 -0
- package/dist/reveal-BOY7XYFH.js +38 -0
- package/dist/revoke-4KUNSVJC.js +24 -0
- package/dist/satellites/index.js +1 -1
- package/dist/sealed-record/index.js +12 -12
- package/dist/seed-4RRXT42N.js +231 -0
- package/dist/seed-4RRXT42N.js.map +1 -0
- package/dist/session/index.js +9 -9
- package/dist/shadow/index.js +2 -2
- package/dist/signer-DDDXP5JD.js +25 -0
- package/dist/snapshots/index.js +10 -10
- package/dist/stale-NXPT56JA.js +14 -0
- package/dist/storage-IR6EEAV2.js +23 -0
- package/dist/store-coordination-provider-HPYVFJCV.js +142 -0
- package/dist/sync/index.js +9 -9
- package/dist/team/index.js +15 -15
- package/dist/tiers/index.js +10 -10
- package/dist/to/index.js +1 -1
- package/dist/tx/index.js +3 -3
- package/dist/util/index.js +1 -1
- package/dist/verify-66RHOW7N.js +139 -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 +219 -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 +106 -0
- package/dist/walk-2RWEOCAS.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 +177 -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 +122 -0
- package/dist/with-audit/tiers/strategy.d.ts +35 -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 +33 -0
- package/dist/with-cargo/extract-partition.d.ts +147 -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 +38 -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 +27 -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 +335 -0
- package/dist/with-commit/history/strategy.d.ts +126 -0
- package/dist/with-commit/history/time-machine.d.ts +179 -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 +58 -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 +207 -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 +71 -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 +62 -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 +3 -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 +120 -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 +69 -0
- package/dist/with-lookup/indexing/persisted-indexes.d.ts +186 -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 +123 -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 +41 -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 +37 -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 +165 -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-set.d.ts +342 -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 +37 -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/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 +26 -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-CLMZEHQT.js +28 -0
- package/package.json +47 -43
- package/dist/aggregate/index.d.ts +0 -41
- package/dist/api-TX2EX2FX.js +0 -20
- package/dist/as/index.d.ts +0 -6
- package/dist/at/index.d.ts +0 -4
- package/dist/attestation/index.d.ts +0 -19
- package/dist/backup-R7NTDFKY.js +0 -225
- package/dist/blobs/index.d.ts +0 -43
- package/dist/bundle/index.d.ts +0 -121
- package/dist/bundle-D6GxiUfq.d.ts +0 -548
- package/dist/by/index.d.ts +0 -1
- package/dist/cargo/index.d.ts +0 -7
- package/dist/chunk-2OV5NVE7.js +0 -95
- package/dist/chunk-2OZXVKVP.js +0 -367
- package/dist/chunk-2REPHKET.js +0 -54
- package/dist/chunk-3JXPAHOZ.js +0 -686
- package/dist/chunk-3MATJ6O4.js +0 -367
- package/dist/chunk-3OPY6MK2.js +0 -404
- package/dist/chunk-3QSIU3UT.js +0 -291
- package/dist/chunk-4OMCIY6F.js +0 -99
- package/dist/chunk-5I35DOHK.js +0 -94
- package/dist/chunk-5VG4IJR7.js +0 -235
- package/dist/chunk-5YESYH2C.js +0 -155
- package/dist/chunk-6G5ORS5D.js +0 -202
- package/dist/chunk-6P5XCKSD.js +0 -71
- package/dist/chunk-6S7T6WC4.js +0 -111
- package/dist/chunk-6S7T6WC4.js.map +0 -1
- package/dist/chunk-7BWJHO2A.js +0 -34
- package/dist/chunk-7P2SDJG3.js +0 -279
- package/dist/chunk-ANB77BVV.js +0 -150
- package/dist/chunk-ANB77BVV.js.map +0 -1
- package/dist/chunk-BKARNZJN.js +0 -382
- package/dist/chunk-BQISD5ZV.js +0 -261
- package/dist/chunk-BUAQ7YI3.js +0 -1697
- package/dist/chunk-CB7CWSKW.js +0 -430
- package/dist/chunk-DFVUTGT2.js +0 -515
- package/dist/chunk-DJ7KIPLV.js +0 -23
- package/dist/chunk-DSKDQP3G.js +0 -14066
- package/dist/chunk-DSKDQP3G.js.map +0 -1
- package/dist/chunk-DV4HUP5G.js +0 -99
- package/dist/chunk-EOXAAJTY.js +0 -621
- package/dist/chunk-ET67AY6B.js +0 -74
- package/dist/chunk-F4CEK5YM.js +0 -123
- package/dist/chunk-FORYWFN6.js +0 -130
- package/dist/chunk-FRP6D2DM.js +0 -91
- package/dist/chunk-FUOE7UUV.js +0 -341
- package/dist/chunk-G4JYND6L.js +0 -42
- package/dist/chunk-G6XV4H65.js +0 -59
- package/dist/chunk-GNMXXTMN.js +0 -85
- package/dist/chunk-HPWKV3YB.js +0 -21
- package/dist/chunk-HY3AUMFI.js +0 -41
- package/dist/chunk-HYR4WZZ3.js +0 -69
- package/dist/chunk-ICXIFFYZ.js +0 -355
- package/dist/chunk-IVLTXX4W.js +0 -280
- package/dist/chunk-J4LPNIGK.js +0 -777
- package/dist/chunk-JJZ2LW6T.js +0 -36
- package/dist/chunk-KJ2BCBTL.js +0 -589
- package/dist/chunk-KNZB6JMR.js +0 -129
- package/dist/chunk-LEJIKBBB.js +0 -124
- package/dist/chunk-LL2NIVUR.js +0 -188
- package/dist/chunk-MCHVVJIA.js +0 -968
- package/dist/chunk-MCHVVJIA.js.map +0 -1
- package/dist/chunk-NUEQU36L.js +0 -392
- package/dist/chunk-O45M6LDB.js +0 -38
- package/dist/chunk-OBKWYKYC.js +0 -117
- package/dist/chunk-OHHKHSJP.js +0 -209
- package/dist/chunk-OT76OZL6.js +0 -45
- package/dist/chunk-OVYRLHPE.js +0 -150
- package/dist/chunk-OXCSVM3B.js +0 -155
- package/dist/chunk-P33LUIML.js +0 -205
- package/dist/chunk-PLS64NCS.js +0 -59
- package/dist/chunk-PS2NEWEX.js +0 -36
- package/dist/chunk-QA2KUPCP.js +0 -45
- package/dist/chunk-QOC3VYL2.js +0 -30
- package/dist/chunk-QSFOZUYL.js +0 -823
- package/dist/chunk-RHK32N73.js +0 -30
- package/dist/chunk-RW3Y22MW.js +0 -97
- package/dist/chunk-S7VFUQM2.js +0 -1484
- package/dist/chunk-S7VFUQM2.js.map +0 -1
- package/dist/chunk-T7WSLRAU.js +0 -49
- package/dist/chunk-TAKWLZZX.js +0 -944
- package/dist/chunk-TMBXVJKT.js +0 -75
- package/dist/chunk-TWKKOM55.js +0 -54
- package/dist/chunk-U3WZCU7E.js +0 -14
- package/dist/chunk-UF362QVH.js +0 -70
- package/dist/chunk-UN4FVIBH.js +0 -135
- package/dist/chunk-VEAVKDDB.js +0 -29
- package/dist/chunk-VEPTFUJY.js +0 -29
- package/dist/chunk-VJV7GKQK.js +0 -662
- package/dist/chunk-VQRAIPYF.js +0 -50
- package/dist/chunk-VRIYFLBA.js +0 -74
- package/dist/chunk-VWM3DAVB.js +0 -265
- package/dist/chunk-VWRRVE6D.js +0 -80
- package/dist/chunk-WBJIQSLL.js +0 -167
- package/dist/chunk-WIGQB62E.js +0 -164
- package/dist/chunk-WZSCE6RM.js +0 -466
- package/dist/chunk-XGDAPN6M.js +0 -255
- package/dist/chunk-XH7XP3OL.js +0 -1221
- package/dist/chunk-XREOISSI.js +0 -40
- package/dist/chunk-XUBPSPKD.js +0 -164
- package/dist/chunk-Y3A5CB5G.js +0 -247
- package/dist/chunk-YCXCR7VG.js +0 -230
- package/dist/chunk-YMVQD5Q5.js +0 -453
- package/dist/chunk-YN5IAHN6.js +0 -32
- package/dist/chunk-YN5IAHN6.js.map +0 -1
- package/dist/chunk-ZYJ55N7N.js +0 -86
- package/dist/classified/index.d.ts +0 -16
- package/dist/classified-marker-H6YSHYNK.js +0 -24
- package/dist/collection-facade-LVD22JLM.js +0 -39
- package/dist/computed-EXDMQODG.js +0 -11
- package/dist/consent/index.d.ts +0 -22
- package/dist/crdt/index.d.ts +0 -33
- package/dist/dead-filter-HQIE2YG7.js +0 -28
- package/dist/decrypt-partition-IHtxEnTi.d.ts +0 -21
- package/dist/delegation-BJP73GAP.js +0 -25
- package/dist/derivations/index.d.ts +0 -69
- package/dist/derive-BME7HDWO.js +0 -21
- package/dist/dev-unlock-Bmm2pgJ0.d.ts +0 -263
- package/dist/discriminant-BN9REW3o.d.ts +0 -60
- package/dist/enclave-NHORSWSF.js +0 -125
- package/dist/executor-FE6X4LFX.js +0 -9
- package/dist/executor-KSHKRJXP.js +0 -25
- package/dist/executor-ZHTJJICG.js +0 -9
- package/dist/export-accessible-DACHM5VT.js +0 -23
- package/dist/extract-partition-RNENZZ4T.js +0 -36
- package/dist/fanout-sidecar-OFWN3NM7.js +0 -74
- package/dist/find-BNGBJNKP.js +0 -11
- package/dist/forget/index.d.ts +0 -36
- package/dist/guards/index.d.ts +0 -34
- package/dist/hash-DAJjMsCE.d.ts +0 -72
- package/dist/history/index.d.ts +0 -60
- package/dist/i18n/index.d.ts +0 -56
- package/dist/in/index.d.ts +0 -4
- package/dist/index-B9QdHytu.d.ts +0 -123
- package/dist/index-DjWbxsjb.d.ts +0 -23579
- package/dist/index-qwuNvO2B.d.ts +0 -144
- package/dist/indexing/index.d.ts +0 -38
- package/dist/issue-NDI4CVZU.js +0 -19
- package/dist/lazy/index.d.ts +0 -20
- package/dist/ledger-6NDS2EO4.js +0 -42
- package/dist/liberate-HN3RIGIP.js +0 -24
- package/dist/link-set-SJB2MVJV.js +0 -31
- package/dist/materialized-views/index.d.ts +0 -189
- package/dist/mime-magic-bBj5OgUC.d.ts +0 -103
- package/dist/noydb-BWF6EPIR.js +0 -66
- package/dist/on/index.d.ts +0 -4
- package/dist/overlay-views/index.d.ts +0 -97
- package/dist/periods/index.d.ts +0 -19
- package/dist/pod/index.d.ts +0 -62
- package/dist/policy-WGNAG5H6.js +0 -41
- package/dist/portability/index.d.ts +0 -19
- package/dist/post-register-CWKBQRC7.js +0 -55
- package/dist/public-envelope-EJLVIFX7.js +0 -32
- package/dist/query/index.d.ts +0 -4
- package/dist/register-SBIX7TVV.js +0 -23
- package/dist/registry-3EQG6OOE.js +0 -18
- package/dist/registry-CA327ACV.js +0 -9
- package/dist/registry-E7OXOTSV.js +0 -19
- package/dist/request-withdrawal-KAH2AAXC.js +0 -31
- package/dist/reveal-R3JLHMUF.js +0 -38
- package/dist/revoke-IXLOJ3IH.js +0 -24
- package/dist/satellites/index.d.ts +0 -4
- package/dist/sealed-record/index.d.ts +0 -68
- package/dist/session/index.d.ts +0 -43
- package/dist/shadow/index.d.ts +0 -14
- package/dist/signer-Y46N2GJ3.js +0 -25
- package/dist/snapshots/index.d.ts +0 -25
- package/dist/stale-Z7IW6RIL.js +0 -14
- package/dist/storage-ADNP2UWI.js +0 -23
- package/dist/store-coordination-provider-DTDMI6VL.js +0 -142
- package/dist/subject-index-CyOgGMJL.d.ts +0 -380
- package/dist/sync/index.d.ts +0 -40
- package/dist/team/index.d.ts +0 -154
- package/dist/tiers/index.d.ts +0 -4
- package/dist/to/index.d.ts +0 -4
- package/dist/transition-guard-DI-krBsZ.d.ts +0 -165
- package/dist/tx/index.d.ts +0 -34
- package/dist/ui/index.d.ts +0 -4
- package/dist/ulid-DRH25k3y.d.ts +0 -66
- package/dist/util/index.d.ts +0 -79
- package/dist/validators-BUcli5Nh.d.ts +0 -101
- package/dist/vault-diff-Z2DUayMe.d.ts +0 -147
- package/dist/verify-JPF2YR5E.js +0 -139
- package/dist/walk-XYA2O3LW.js +0 -241
- package/dist/with/index.d.ts +0 -37
- package/dist/with-materialized-view-BUmzlXue.d.ts +0 -27
- package/dist/with-overlayed-view-m4FaXXTO.d.ts +0 -12
- package/dist/with-rollup-DEKGI9vb.d.ts +0 -47
- package/dist/withdraw-accessible-WLV4MTEN.js +0 -28
- /package/dist/{api-TX2EX2FX.js.map → api-YGMINAET.js.map} +0 -0
- /package/dist/{backup-R7NTDFKY.js.map → backup-XA5STIYQ.js.map} +0 -0
- /package/dist/{chunk-UF362QVH.js.map → chunk-25NDNMQ7.js.map} +0 -0
- /package/dist/{chunk-LL2NIVUR.js.map → chunk-2JMMY7HZ.js.map} +0 -0
- /package/dist/{chunk-CB7CWSKW.js.map → chunk-3CNQ7FQ3.js.map} +0 -0
- /package/dist/{chunk-3QSIU3UT.js.map → chunk-3G4KMVUN.js.map} +0 -0
- /package/dist/{chunk-VRIYFLBA.js.map → chunk-3MSQLQNZ.js.map} +0 -0
- /package/dist/{chunk-O45M6LDB.js.map → chunk-45ZZLTFH.js.map} +0 -0
- /package/dist/{chunk-OVYRLHPE.js.map → chunk-4N5QFSNQ.js.map} +0 -0
- /package/dist/{chunk-7BWJHO2A.js.map → chunk-4R4Q64W5.js.map} +0 -0
- /package/dist/{chunk-FORYWFN6.js.map → chunk-57V5S7PW.js.map} +0 -0
- /package/dist/{chunk-6G5ORS5D.js.map → chunk-5JB73NMC.js.map} +0 -0
- /package/dist/{chunk-OXCSVM3B.js.map → chunk-5XIPOCQC.js.map} +0 -0
- /package/dist/{chunk-J4LPNIGK.js.map → chunk-5ZOSG3RJ.js.map} +0 -0
- /package/dist/{chunk-JJZ2LW6T.js.map → chunk-67TNU77I.js.map} +0 -0
- /package/dist/{chunk-P33LUIML.js.map → chunk-6QILBDZU.js.map} +0 -0
- /package/dist/{chunk-5YESYH2C.js.map → chunk-7E67FJ33.js.map} +0 -0
- /package/dist/{chunk-VQRAIPYF.js.map → chunk-7ITPJFGC.js.map} +0 -0
- /package/dist/{chunk-OBKWYKYC.js.map → chunk-7NS43EXZ.js.map} +0 -0
- /package/dist/{chunk-FUOE7UUV.js.map → chunk-7QIXUSDQ.js.map} +0 -0
- /package/dist/{chunk-ET67AY6B.js.map → chunk-7VSGW5KJ.js.map} +0 -0
- /package/dist/{chunk-OHHKHSJP.js.map → chunk-A2Y6YFVN.js.map} +0 -0
- /package/dist/{chunk-XH7XP3OL.js.map → chunk-AOVDSIL3.js.map} +0 -0
- /package/dist/{chunk-VEAVKDDB.js.map → chunk-ARSAMO24.js.map} +0 -0
- /package/dist/{chunk-HY3AUMFI.js.map → chunk-AWB5JZW6.js.map} +0 -0
- /package/dist/{chunk-OT76OZL6.js.map → chunk-BCYQA5BK.js.map} +0 -0
- /package/dist/{chunk-EOXAAJTY.js.map → chunk-BE7N3AXA.js.map} +0 -0
- /package/dist/{chunk-XUBPSPKD.js.map → chunk-BEIRE5K4.js.map} +0 -0
- /package/dist/{chunk-ZYJ55N7N.js.map → chunk-BZO4WCJI.js.map} +0 -0
- /package/dist/{chunk-TMBXVJKT.js.map → chunk-C3YH34IL.js.map} +0 -0
- /package/dist/{chunk-T7WSLRAU.js.map → chunk-C7NTK5I3.js.map} +0 -0
- /package/dist/{chunk-KNZB6JMR.js.map → chunk-CB25ONKC.js.map} +0 -0
- /package/dist/{chunk-HPWKV3YB.js.map → chunk-CIKY6I4W.js.map} +0 -0
- /package/dist/{chunk-TWKKOM55.js.map → chunk-D26JB3LZ.js.map} +0 -0
- /package/dist/{chunk-PLS64NCS.js.map → chunk-D3EFFFOL.js.map} +0 -0
- /package/dist/{chunk-WZSCE6RM.js.map → chunk-DGH65E7Q.js.map} +0 -0
- /package/dist/{chunk-G4JYND6L.js.map → chunk-DIRRS7WP.js.map} +0 -0
- /package/dist/{chunk-Y3A5CB5G.js.map → chunk-DMFNPHCX.js.map} +0 -0
- /package/dist/{chunk-NUEQU36L.js.map → chunk-ELNBMFOS.js.map} +0 -0
- /package/dist/{chunk-QA2KUPCP.js.map → chunk-FQQF23MC.js.map} +0 -0
- /package/dist/{chunk-FRP6D2DM.js.map → chunk-FXK4X4BL.js.map} +0 -0
- /package/dist/{chunk-5VG4IJR7.js.map → chunk-GA2QHD6P.js.map} +0 -0
- /package/dist/{chunk-ICXIFFYZ.js.map → chunk-H44ZE4IE.js.map} +0 -0
- /package/dist/{chunk-BUAQ7YI3.js.map → chunk-H6CZSDWK.js.map} +0 -0
- /package/dist/{chunk-7P2SDJG3.js.map → chunk-H6HM6CVR.js.map} +0 -0
- /package/dist/{chunk-BKARNZJN.js.map → chunk-HFJIGWJC.js.map} +0 -0
- /package/dist/{chunk-3OPY6MK2.js.map → chunk-HUS3J5WM.js.map} +0 -0
- /package/dist/{chunk-DV4HUP5G.js.map → chunk-IDIV5NVH.js.map} +0 -0
- /package/dist/{chunk-DFVUTGT2.js.map → chunk-IGJHJYM6.js.map} +0 -0
- /package/dist/{chunk-KJ2BCBTL.js.map → chunk-IP2QBAGS.js.map} +0 -0
- /package/dist/{chunk-XGDAPN6M.js.map → chunk-JOQ53DMI.js.map} +0 -0
- /package/dist/{chunk-QSFOZUYL.js.map → chunk-K62IUKOD.js.map} +0 -0
- /package/dist/{chunk-YCXCR7VG.js.map → chunk-KPGX66PM.js.map} +0 -0
- /package/dist/{chunk-YMVQD5Q5.js.map → chunk-L2SNBIV7.js.map} +0 -0
- /package/dist/{chunk-2OZXVKVP.js.map → chunk-MCEKIAO4.js.map} +0 -0
- /package/dist/{chunk-IVLTXX4W.js.map → chunk-MELR46EF.js.map} +0 -0
- /package/dist/{chunk-2OV5NVE7.js.map → chunk-MSPNM2OM.js.map} +0 -0
- /package/dist/{chunk-DJ7KIPLV.js.map → chunk-O2DYPAZY.js.map} +0 -0
- /package/dist/{chunk-RHK32N73.js.map → chunk-ODJWBC5I.js.map} +0 -0
- /package/dist/{chunk-3JXPAHOZ.js.map → chunk-OEAATWH5.js.map} +0 -0
- /package/dist/{chunk-6P5XCKSD.js.map → chunk-OFJ5GPNA.js.map} +0 -0
- /package/dist/{chunk-4OMCIY6F.js.map → chunk-OOLO4LQG.js.map} +0 -0
- /package/dist/{chunk-VJV7GKQK.js.map → chunk-P5RY4ZWD.js.map} +0 -0
- /package/dist/{chunk-VWM3DAVB.js.map → chunk-PR5LC5YX.js.map} +0 -0
- /package/dist/{chunk-UN4FVIBH.js.map → chunk-PXWVF7MC.js.map} +0 -0
- /package/dist/{chunk-XREOISSI.js.map → chunk-Q3XSMOZM.js.map} +0 -0
- /package/dist/{chunk-5I35DOHK.js.map → chunk-QLLKLFE2.js.map} +0 -0
- /package/dist/{chunk-BQISD5ZV.js.map → chunk-QYPKGVT4.js.map} +0 -0
- /package/dist/{chunk-G6XV4H65.js.map → chunk-RKRGDAS7.js.map} +0 -0
- /package/dist/{chunk-WIGQB62E.js.map → chunk-SRVQHVNX.js.map} +0 -0
- /package/dist/{chunk-VEPTFUJY.js.map → chunk-SYMS4546.js.map} +0 -0
- /package/dist/{chunk-2REPHKET.js.map → chunk-TPH5EO6L.js.map} +0 -0
- /package/dist/{chunk-U3WZCU7E.js.map → chunk-UFILRICG.js.map} +0 -0
- /package/dist/{chunk-RW3Y22MW.js.map → chunk-UTLEAJXC.js.map} +0 -0
- /package/dist/{chunk-F4CEK5YM.js.map → chunk-VA4ZWLFY.js.map} +0 -0
- /package/dist/{chunk-3MATJ6O4.js.map → chunk-VR24ILCR.js.map} +0 -0
- /package/dist/{chunk-TAKWLZZX.js.map → chunk-W5D62AQD.js.map} +0 -0
- /package/dist/{chunk-WBJIQSLL.js.map → chunk-WGV4CUZT.js.map} +0 -0
- /package/dist/{chunk-HYR4WZZ3.js.map → chunk-X6CMGUAG.js.map} +0 -0
- /package/dist/{chunk-GNMXXTMN.js.map → chunk-XFXUTFWQ.js.map} +0 -0
- /package/dist/{chunk-QOC3VYL2.js.map → chunk-XHV25KBM.js.map} +0 -0
- /package/dist/{chunk-LEJIKBBB.js.map → chunk-YSXEFGND.js.map} +0 -0
- /package/dist/{chunk-PS2NEWEX.js.map → chunk-YXOUQ2H7.js.map} +0 -0
- /package/dist/{chunk-VWRRVE6D.js.map → chunk-ZP5PL65C.js.map} +0 -0
- /package/dist/{classified-marker-H6YSHYNK.js.map → classified-marker-LQWWQNIJ.js.map} +0 -0
- /package/dist/{collection-facade-LVD22JLM.js.map → collection-facade-YE2O4J4O.js.map} +0 -0
- /package/dist/{computed-EXDMQODG.js.map → computed-W6MVAMWZ.js.map} +0 -0
- /package/dist/{dead-filter-HQIE2YG7.js.map → dead-filter-4KXZEB3X.js.map} +0 -0
- /package/dist/{delegation-BJP73GAP.js.map → delegation-OPUU3R2E.js.map} +0 -0
- /package/dist/{derive-BME7HDWO.js.map → derive-BGUHU663.js.map} +0 -0
- /package/dist/{enclave-NHORSWSF.js.map → enclave-VXAQD4XJ.js.map} +0 -0
- /package/dist/{executor-FE6X4LFX.js.map → executor-GTVSUUBX.js.map} +0 -0
- /package/dist/{executor-KSHKRJXP.js.map → executor-GZWMTOXB.js.map} +0 -0
- /package/dist/{executor-ZHTJJICG.js.map → executor-XXGS4S3K.js.map} +0 -0
- /package/dist/{export-accessible-DACHM5VT.js.map → export-accessible-BMULIOYB.js.map} +0 -0
- /package/dist/{extract-partition-RNENZZ4T.js.map → extract-partition-JUQTWDXR.js.map} +0 -0
- /package/dist/{fanout-sidecar-OFWN3NM7.js.map → fanout-sidecar-CKYFH33E.js.map} +0 -0
- /package/dist/{find-BNGBJNKP.js.map → find-XRGCNGNN.js.map} +0 -0
- /package/dist/{issue-NDI4CVZU.js.map → issue-UB6AA5M6.js.map} +0 -0
- /package/dist/{ledger-6NDS2EO4.js.map → ledger-FU6GH5EH.js.map} +0 -0
- /package/dist/{liberate-HN3RIGIP.js.map → liberate-YUN7W5QG.js.map} +0 -0
- /package/dist/{link-set-SJB2MVJV.js.map → link-set-MNADSH5M.js.map} +0 -0
- /package/dist/{noydb-BWF6EPIR.js.map → noydb-6JLBZU4U.js.map} +0 -0
- /package/dist/{policy-WGNAG5H6.js.map → policy-JTFOPPUU.js.map} +0 -0
- /package/dist/{post-register-CWKBQRC7.js.map → post-register-HAWO3O7O.js.map} +0 -0
- /package/dist/{public-envelope-EJLVIFX7.js.map → public-envelope-NJVB7LPA.js.map} +0 -0
- /package/dist/{register-SBIX7TVV.js.map → register-VCKOBWKT.js.map} +0 -0
- /package/dist/{registry-3EQG6OOE.js.map → registry-72UKJ2L4.js.map} +0 -0
- /package/dist/{registry-CA327ACV.js.map → registry-BZFLJNEH.js.map} +0 -0
- /package/dist/{registry-E7OXOTSV.js.map → registry-YJEYSYI5.js.map} +0 -0
- /package/dist/{request-withdrawal-KAH2AAXC.js.map → request-withdrawal-6MJRMFHF.js.map} +0 -0
- /package/dist/{reveal-R3JLHMUF.js.map → reveal-BOY7XYFH.js.map} +0 -0
- /package/dist/{revoke-IXLOJ3IH.js.map → revoke-4KUNSVJC.js.map} +0 -0
- /package/dist/{signer-Y46N2GJ3.js.map → signer-DDDXP5JD.js.map} +0 -0
- /package/dist/{stale-Z7IW6RIL.js.map → stale-NXPT56JA.js.map} +0 -0
- /package/dist/{storage-ADNP2UWI.js.map → storage-IR6EEAV2.js.map} +0 -0
- /package/dist/{store-coordination-provider-DTDMI6VL.js.map → store-coordination-provider-HPYVFJCV.js.map} +0 -0
- /package/dist/{verify-JPF2YR5E.js.map → verify-66RHOW7N.js.map} +0 -0
- /package/dist/{walk-XYA2O3LW.js.map → walk-2RWEOCAS.js.map} +0 -0
- /package/dist/{withdraw-accessible-WLV4MTEN.js.map → withdraw-accessible-CLMZEHQT.js.map} +0 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { SnapshotPolicy } from './policy.js';
|
|
2
|
+
export interface SnapshotMeta {
|
|
3
|
+
readonly version: string;
|
|
4
|
+
readonly label?: string;
|
|
5
|
+
readonly note?: string;
|
|
6
|
+
readonly exportedAt: string;
|
|
7
|
+
readonly exportedBy: string;
|
|
8
|
+
readonly size: number;
|
|
9
|
+
/**
|
|
10
|
+
* `'verified'` — bundle was produced by `writePod(vault, {})`, which embeds
|
|
11
|
+
* ledgerHead metadata; `vault.load()` runs `verifyBackupIntegrity()` on restore.
|
|
12
|
+
* `'legacy-unverifiable'` — reserved for v2 import paths that read pre-existing bundles
|
|
13
|
+
* lacking a ledgerHead; not produced by the current engine.
|
|
14
|
+
*/
|
|
15
|
+
readonly integrity: 'verified' | 'legacy-unverifiable';
|
|
16
|
+
/** `true` for the rolling auto-snapshot; absent on on-demand checkpoints. */
|
|
17
|
+
readonly auto?: true;
|
|
18
|
+
}
|
|
19
|
+
export interface RetentionPolicy {
|
|
20
|
+
readonly keepLast?: number;
|
|
21
|
+
readonly maxAgeDays?: number;
|
|
22
|
+
readonly prune?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/** @internal */
|
|
25
|
+
export interface SnapshotIndex {
|
|
26
|
+
snapshots: SnapshotMeta[];
|
|
27
|
+
nextCounter: number;
|
|
28
|
+
/** Single rolling auto-snapshot slot, separate from the immutable `snapshots` pool. */
|
|
29
|
+
auto?: SnapshotMeta;
|
|
30
|
+
}
|
|
31
|
+
/** @internal */
|
|
32
|
+
export interface SnapshotStrategy {
|
|
33
|
+
snapshot(vault: unknown, by: string, opts?: {
|
|
34
|
+
label?: string;
|
|
35
|
+
note?: string;
|
|
36
|
+
}): Promise<SnapshotMeta>;
|
|
37
|
+
listSnapshots(vaultId: string): Promise<SnapshotMeta[]>;
|
|
38
|
+
restoreSnapshot(vault: unknown, version: string): Promise<void>;
|
|
39
|
+
/** Rolling auto-snapshot to the fixed `<vault>__auto` key. */
|
|
40
|
+
autoSnapshot(vault: unknown, by: string, opts?: {
|
|
41
|
+
label?: string;
|
|
42
|
+
note?: string;
|
|
43
|
+
}): Promise<SnapshotMeta>;
|
|
44
|
+
/** Configured cadence policy. Undefined or `mode:'manual'` ⇒ no scheduler is wired. */
|
|
45
|
+
readonly policy?: SnapshotPolicy;
|
|
46
|
+
}
|
|
47
|
+
/** No-op stub. @internal */
|
|
48
|
+
export declare const NO_SNAPSHOTS: SnapshotStrategy;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Computed scalar fields — schema-owned derived values evaluated on
|
|
3
|
+
* write and materialized onto the record.
|
|
4
|
+
*
|
|
5
|
+
* A `computed` map declares pure, synchronous functions keyed by field
|
|
6
|
+
* path. {@link evalComputedFields} runs them in declaration order — each
|
|
7
|
+
* function sees the record with all prior computed fields already
|
|
8
|
+
* injected, so a later field can read an earlier one (`total` reads
|
|
9
|
+
* `netAmount`). The result is stored like any field: queryable,
|
|
10
|
+
* indexable, and `aggregate(sum())`-able (exactly, when the field is also
|
|
11
|
+
* a `money()` field).
|
|
12
|
+
*
|
|
13
|
+
* Computed evaluation is the FIRST stage of the write pipeline (before
|
|
14
|
+
* schema validation), so the user need not supply computed fields and the
|
|
15
|
+
* schema validates the computed result. Cross-record / async derivation
|
|
16
|
+
* is out of scope here — see the validation service.
|
|
17
|
+
*/
|
|
18
|
+
import { NoydbError } from '../../kernel/errors.js';
|
|
19
|
+
export type ComputedFn<T = Record<string, unknown>> = (record: T) => unknown;
|
|
20
|
+
/**
|
|
21
|
+
* #638 Task 7 — the extended per-field entry: `deps` (source field names, feeds
|
|
22
|
+
* `ViaGraph` for taint propagation) and `mode` (`'materialized' | 'virtual'`,
|
|
23
|
+
* default `'materialized'`) alongside `fn`. Lets `computed: { field: {...} }`
|
|
24
|
+
* declare the same `{deps, mode}` shape `via(computed(fn, {...}))` composes —
|
|
25
|
+
* absorbs the old `computedDeps` sibling option (#638 Task 2, retired here).
|
|
26
|
+
*/
|
|
27
|
+
export interface ComputedFieldEntry<T = Record<string, unknown>> {
|
|
28
|
+
readonly fn: ComputedFn<T>;
|
|
29
|
+
readonly deps?: readonly string[];
|
|
30
|
+
readonly mode?: 'materialized' | 'virtual';
|
|
31
|
+
}
|
|
32
|
+
/** The plain `Record<string, ComputedFn>` sugar keeps working unchanged (materialized,
|
|
33
|
+
* no deps); a field may alternatively carry the extended `ComputedFieldEntry` shape. */
|
|
34
|
+
export type ComputedFields<T = Record<string, unknown>> = Record<string, ComputedFn<T> | ComputedFieldEntry<T>>;
|
|
35
|
+
/** Raised when a computed function throws during a write. */
|
|
36
|
+
export declare class ComputedFieldError extends NoydbError {
|
|
37
|
+
readonly field: string;
|
|
38
|
+
readonly id: string;
|
|
39
|
+
readonly cause: unknown;
|
|
40
|
+
constructor(field: string, id: string, cause: unknown);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Evaluate every computed field in declaration order, injecting each
|
|
44
|
+
* result into a shallow clone. A computed field overwrites any
|
|
45
|
+
* user-supplied value of the same name — the field is schema-owned.
|
|
46
|
+
* Returns the new record; the input is not mutated.
|
|
47
|
+
*/
|
|
48
|
+
export declare function evalComputedFields<T extends Record<string, unknown>>(record: T, computed: ComputedFields, id: string): T;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy loader for the computed-fields engine (#553).
|
|
3
|
+
*
|
|
4
|
+
* The `computed` declaration on `collection({ … })` is the opt-in unit;
|
|
5
|
+
* the engine's only kernel consultation is the (async) write pipeline,
|
|
6
|
+
* so it loads on the first computed-declared put and stays out of the
|
|
7
|
+
* floor bundle otherwise. Cached after first load — mirrors the
|
|
8
|
+
* deferred-load pattern used for guards/derivations.
|
|
9
|
+
*/
|
|
10
|
+
import type * as ComputedModule from './index.js';
|
|
11
|
+
type EvalComputedFieldsFn = typeof ComputedModule.evalComputedFields;
|
|
12
|
+
export declare function loadEvalComputedFields(): Promise<EvalComputedFieldsFn>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { DerivationContext, DerivationStrategy } from './types.js';
|
|
2
|
+
export interface RunResult {
|
|
3
|
+
outputs: Record<string, OutputResult>;
|
|
4
|
+
failed: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Per-output result of a strategy invocation. Discriminated by
|
|
8
|
+
* `kind`:
|
|
9
|
+
*
|
|
10
|
+
* - `record` — the existing v1 shape: one value (or a "skipped"
|
|
11
|
+
* marker if the output was optional and `derive` returned null).
|
|
12
|
+
* - `array` — a list of `(key, value)` entries.
|
|
13
|
+
* The caller diffs these against the previously-emitted key set
|
|
14
|
+
* (loaded from the fanout sidecar) to compute deletes + upserts.
|
|
15
|
+
*/
|
|
16
|
+
export type OutputResult = RecordOutputResult | ArrayOutputResult | FailedOutputResult;
|
|
17
|
+
export interface RecordOutputResult {
|
|
18
|
+
kind: 'record';
|
|
19
|
+
value: Record<string, unknown>;
|
|
20
|
+
ok: true;
|
|
21
|
+
/**
|
|
22
|
+
* `true` when an optional output returned `null` /
|
|
23
|
+
* `undefined`. The caller deletes any previously-emitted output at
|
|
24
|
+
* the same id (mirrors "tombstone for derived data"); a never-emitted
|
|
25
|
+
* output is a silent no-op. `ok: true` because skipping is a
|
|
26
|
+
* successful outcome, not a failure.
|
|
27
|
+
*/
|
|
28
|
+
skipped?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface ArrayOutputResult {
|
|
31
|
+
kind: 'array';
|
|
32
|
+
ok: true;
|
|
33
|
+
/** One `(key, value)` per derived row. Empty array means "all prior outputs for this source go." */
|
|
34
|
+
entries: ReadonlyArray<{
|
|
35
|
+
readonly key: string;
|
|
36
|
+
readonly value: Record<string, unknown>;
|
|
37
|
+
}>;
|
|
38
|
+
}
|
|
39
|
+
export interface FailedOutputResult {
|
|
40
|
+
kind: 'failed';
|
|
41
|
+
ok: false;
|
|
42
|
+
error: Error;
|
|
43
|
+
/** Always empty on failure; present so consumers don't have to narrow. */
|
|
44
|
+
value: Record<string, unknown>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Stateless functions that execute a derivation strategy. Persistence
|
|
48
|
+
* (encrypt + store.put) is the caller's job — typically
|
|
49
|
+
* `DerivationRegistry.onSourceWrite` which iterates run() results and
|
|
50
|
+
* writes each output via `Collection.put`.
|
|
51
|
+
*/
|
|
52
|
+
export declare const DerivationExecutor: {
|
|
53
|
+
/**
|
|
54
|
+
* Run `derive` once, validate output shape against the spec, stamp
|
|
55
|
+
* `_derivedFrom` onto every output. Returns per-output success or
|
|
56
|
+
* failure; throws only for shape mismatches (a contract violation).
|
|
57
|
+
*/
|
|
58
|
+
run<TSource extends Record<string, unknown>, TOutputs extends Record<string, Record<string, unknown> | ReadonlyArray<Record<string, unknown>>>>(strategy: DerivationStrategy<TSource, TOutputs>, source: TSource & {
|
|
59
|
+
id: string;
|
|
60
|
+
}, sourceVersion: number, strategyHash: string, ctx: DerivationContext): Promise<RunResult>;
|
|
61
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-source-row fanout sidecar for `shape: 'array'` derivations.
|
|
3
|
+
*
|
|
4
|
+
* Each `(sourceCollection, sourceId, outputKey)` triple gets its own
|
|
5
|
+
* envelope at:
|
|
6
|
+
*
|
|
7
|
+
* _meta/derivations-fanout/<sourceCollection>/<sourceId>/<outputKey>
|
|
8
|
+
*
|
|
9
|
+
* The envelope records the last-emitted derived row ids so the
|
|
10
|
+
* dispatcher can compute the diff on every source-row update in O(1):
|
|
11
|
+
* read prior keys, compute `toDelete = prev \ new`, write new, persist
|
|
12
|
+
* back.
|
|
13
|
+
*
|
|
14
|
+
* The body is encrypted (AES-GCM under the `_meta` collection DEK) when
|
|
15
|
+
* the vault is encrypted — the `keys[]` are derived-row ids produced by a
|
|
16
|
+
* user-supplied key extractor and can be content-bearing (SKU, tag, email),
|
|
17
|
+
* so a ciphertext-only store must not read them, the derivation graph, or
|
|
18
|
+
* `emittedAt`. Back-compat: sidecars written before this fix are plaintext
|
|
19
|
+
* (`_iv === ''`); `loadFanoutSidecar` dual-reads them.
|
|
20
|
+
*
|
|
21
|
+
* @module
|
|
22
|
+
*/
|
|
23
|
+
import type { NoydbStore } from '../../kernel/types.js';
|
|
24
|
+
import { type EnclaveKey } from '../../kernel/enclave/index.js';
|
|
25
|
+
type GetDEK = (collectionName: string) => Promise<EnclaveKey>;
|
|
26
|
+
/** Magic-prefixed JSON payload at `_meta/<recordId>`. */
|
|
27
|
+
export interface FanoutSidecar {
|
|
28
|
+
readonly _noydb_fanout: 1;
|
|
29
|
+
/** Source collection name. */
|
|
30
|
+
readonly source: string;
|
|
31
|
+
/** Source record id. */
|
|
32
|
+
readonly sourceId: string;
|
|
33
|
+
/** Strategy output key (the key in `strategy.outputs`). */
|
|
34
|
+
readonly outputKey: string;
|
|
35
|
+
/** Output collection name (audit / forensics). */
|
|
36
|
+
readonly outputCollection: string;
|
|
37
|
+
/** Derived-row ids last emitted for this (source, output) pair. */
|
|
38
|
+
readonly keys: ReadonlyArray<string>;
|
|
39
|
+
/** ISO timestamp of last dispatch. */
|
|
40
|
+
readonly emittedAt: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Read the sidecar; returns `undefined` only when it's legitimately absent
|
|
44
|
+
* (no envelope at that id) — the correct signal for callers to skip
|
|
45
|
+
* orphan-row reconciliation because there's nothing to reconcile against.
|
|
46
|
+
*
|
|
47
|
+
* A PRESENT envelope that fails to decrypt or parse is a data-integrity
|
|
48
|
+
* problem, not an absence, and is deliberately NOT caught here: swallowing
|
|
49
|
+
* it to `undefined` would look identical to "no sidecar" and make callers
|
|
50
|
+
* (the array-derivation dispatch in `vault.ts`/`collection.ts`) silently
|
|
51
|
+
* skip deleting stale derived rows on a shrink. Let `openEnvelopeJson`'s
|
|
52
|
+
* `DecryptionError`/`TamperedError` and `JSON.parse` failures propagate,
|
|
53
|
+
* matching the no-catch convention of sibling decrypt call-sites (e.g.
|
|
54
|
+
* `with-audit/consent/consent.ts`'s `decryptEntry`).
|
|
55
|
+
*
|
|
56
|
+
* Dual-reads for back-compat: an envelope with `_iv === ''` is a legacy
|
|
57
|
+
* plaintext sidecar (parse `_data` directly); otherwise the body was
|
|
58
|
+
* encrypted under the `_meta` DEK and is decrypted first.
|
|
59
|
+
*/
|
|
60
|
+
export declare function loadFanoutSidecar(store: NoydbStore, vault: string, source: string, sourceId: string, outputKey: string, getDEK: GetDEK, encrypted: boolean): Promise<FanoutSidecar | undefined>;
|
|
61
|
+
/**
|
|
62
|
+
* Persist (insert/replace) the sidecar with a fresh key set. The body is
|
|
63
|
+
* encrypted under the `_meta` DEK when the vault is encrypted (the `keys[]`
|
|
64
|
+
* can be content-bearing); plaintext only in debug/unencrypted vaults.
|
|
65
|
+
*/
|
|
66
|
+
export declare function saveFanoutSidecar(store: NoydbStore, vault: string, payload: {
|
|
67
|
+
readonly source: string;
|
|
68
|
+
readonly sourceId: string;
|
|
69
|
+
readonly outputKey: string;
|
|
70
|
+
readonly outputCollection: string;
|
|
71
|
+
readonly keys: ReadonlyArray<string>;
|
|
72
|
+
}, getDEK: GetDEK, encrypted: boolean): Promise<void>;
|
|
73
|
+
/** Delete the sidecar (used on source-row delete cascade). */
|
|
74
|
+
export declare function deleteFanoutSidecar(store: NoydbStore, vault: string, source: string, sourceId: string, outputKey: string): Promise<void>;
|
|
75
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { withDerivation } from './with-derivation.js';
|
|
2
|
+
export { withRollup } from './with-rollup.js';
|
|
3
|
+
export { DerivationRegistry } from './registry.js';
|
|
4
|
+
export { DerivationExecutor } from './executor.js';
|
|
5
|
+
export type { DerivationStrategy, DerivationStrategyHandle, DerivedFromMeta, OutputSpec, RecordOutputSpec, ArrayOutputSpec, } from './types.js';
|
|
6
|
+
export { DerivationCycleError, DerivationDepthError, DerivationOutputUnknownError, DerivationOutputShapeError, DerivationCapExceededError, } from '../../kernel/errors.js';
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { ViaGraph, type FieldRef, type EdgeKind, type Grain } from '../../kernel/via/graph.js';
|
|
2
|
+
import type { DerivationStrategy } from './types.js';
|
|
3
|
+
interface RegisteredStrategy {
|
|
4
|
+
spec: DerivationStrategy<any, any>;
|
|
5
|
+
strategyHash: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Vault-internal registry of derivation strategies. Owned by `Vault`;
|
|
9
|
+
* not exported.
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare class DerivationRegistry {
|
|
14
|
+
private readonly _bySource;
|
|
15
|
+
private readonly _byOutput;
|
|
16
|
+
register(spec: DerivationStrategy<any, any>): Promise<void>;
|
|
17
|
+
strategiesForSource(source: string): ReadonlyArray<RegisteredStrategy>;
|
|
18
|
+
strategiesProducingOutput(collection: string): ReadonlyArray<RegisteredStrategy>;
|
|
19
|
+
/**
|
|
20
|
+
* All registered strategies as a flat, deduplicated array.
|
|
21
|
+
* Each strategy is indexed once per source (not once per output key),
|
|
22
|
+
* so iterating `_bySource.values()` naturally yields each strategy
|
|
23
|
+
* exactly once per source — deduplication is handled by flattening
|
|
24
|
+
* the per-source arrays and collecting into a Set by identity.
|
|
25
|
+
*
|
|
26
|
+
* Used by `dumpSchema()` / `describeDerivations()` in the introspection
|
|
27
|
+
* walker to populate the derivations map.
|
|
28
|
+
*/
|
|
29
|
+
all(): ReadonlyArray<RegisteredStrategy>;
|
|
30
|
+
/**
|
|
31
|
+
* Graph edges for #638 Task 2: one `'derivation'`/`'record'` edge per
|
|
32
|
+
* (non-self-write) output key — target = the output collection (a
|
|
33
|
+
* `WHOLE_RECORD` artifact node), sources = every collection that can
|
|
34
|
+
* trigger this strategy (`source`, `sources[]`, `triggerBy[].collection`,
|
|
35
|
+
* and — for a rollup — `rollup.from`), mirroring EXACTLY the trigger keys
|
|
36
|
+
* `register()` indexes under `_bySource`. The self-write reverse-denorm
|
|
37
|
+
* output (`output.collection === source` with `denorm` declared) is
|
|
38
|
+
* skipped — the SAME condition the old local DFS used; it is not a cycle
|
|
39
|
+
* (see the comment `validate()` used to carry, now on this skip).
|
|
40
|
+
* Rollups ADDITIONALLY get a dedicated `'rollup'`/`'aggregate'` edge
|
|
41
|
+
* targeting the real `rollup.field` on the parent (`source`) — the
|
|
42
|
+
* self-write output above only covers the cycle-DFS skip, not
|
|
43
|
+
* dispatch/taint (Tasks 3/4/6), which need the real field.
|
|
44
|
+
*/
|
|
45
|
+
edges(): ReadonlyArray<{
|
|
46
|
+
readonly target: FieldRef;
|
|
47
|
+
readonly sources: readonly FieldRef[];
|
|
48
|
+
readonly kind: EdgeKind;
|
|
49
|
+
readonly grain: Grain;
|
|
50
|
+
}>;
|
|
51
|
+
/**
|
|
52
|
+
* Cycle detection, delegated to `ViaGraph.assertAcyclic()` (#638 Task 2 —
|
|
53
|
+
* retires the local DFS). Call after all `register()` calls complete (i.e.
|
|
54
|
+
* at vault open). Throws `DerivationCycleError` on the first cycle found —
|
|
55
|
+
* SAME class/timing as before; the message/path is byte-identical to the
|
|
56
|
+
* pre-#638 shape for a pure record-shape derivation cycle (the
|
|
57
|
+
* `WHOLE_RECORD` artifact suffix is stripped back to a bare collection
|
|
58
|
+
* name before re-throwing).
|
|
59
|
+
*
|
|
60
|
+
* `graph` is the caller's shared per-vault graph, ALREADY carrying this
|
|
61
|
+
* registry's `edges()` (the caller registers them — see `Vault._initDerivations`)
|
|
62
|
+
* — omit it (e.g. this registry's own unit tests) to validate this
|
|
63
|
+
* registry's edges in isolation against a throwaway graph.
|
|
64
|
+
*/
|
|
65
|
+
validate(graph?: ViaGraph): void;
|
|
66
|
+
}
|
|
67
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Collection } from '../../kernel/collection.js';
|
|
2
|
+
import type { ReadOnlyVaultFacade } from '../../with-audit/guards/types.js';
|
|
3
|
+
import type { TxContext } from '../../with-commit/tx/transaction.js';
|
|
4
|
+
import type { DerivationRegistry } from './registry.js';
|
|
5
|
+
import type { DerivationStrategy } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Accessor shape passed through from the owning Vault. Provides the
|
|
8
|
+
* registry (used to look up strategies and as the WeakMap key) and a
|
|
9
|
+
* resolver from collection name to the live `Collection` instance.
|
|
10
|
+
* Same shape as `Collection.derivationSource` so callers can pass it
|
|
11
|
+
* through directly.
|
|
12
|
+
*/
|
|
13
|
+
export interface DerivationStaleAccessor {
|
|
14
|
+
registry(): DerivationRegistry;
|
|
15
|
+
getCollection(name: string): Collection<any>;
|
|
16
|
+
/**
|
|
17
|
+
* Read-only vault facade handed to `derive(source, ctx)` on the lazy
|
|
18
|
+
* resolve-on-read path. Same instance/shape as the eager path uses.
|
|
19
|
+
*/
|
|
20
|
+
getReadOnlyFacade(): ReadOnlyVaultFacade;
|
|
21
|
+
/**
|
|
22
|
+
* Active multi-record TxContext or `null`. The lazy resolve-on-read
|
|
23
|
+
* path uses this to register tombstone deletes on `_executed` so a
|
|
24
|
+
* later rollback restores the prior emission. Mirrors the eager
|
|
25
|
+
* path's rollback tracking; the lazy `put` was historically
|
|
26
|
+
* unregistered but the tombstone delete (a NEW write path)
|
|
27
|
+
* matches the eager registration for symmetry.
|
|
28
|
+
*/
|
|
29
|
+
getActiveTxContext(): TxContext | null;
|
|
30
|
+
}
|
|
31
|
+
/** Mark every output of (strategy, sourceId) as stale. */
|
|
32
|
+
export declare function markStale(registry: DerivationRegistry, strategy: DerivationStrategy<any, any>, sourceId: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Called from `Collection.get` on lazy-mode output collections. If the
|
|
35
|
+
* id has a pending stale flag for any strategy producing this output
|
|
36
|
+
* collection, re-derive before returning the record. No-op when there
|
|
37
|
+
* is no pending work — keeps the read fast path negligible.
|
|
38
|
+
*/
|
|
39
|
+
export declare function resolveStaleOnRead(accessor: DerivationStaleAccessor, outputCollection: string, id: string): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function computeStrategyHash(source: string, outputKeys: readonly string[], derive: (...args: any[]) => any, sources?: ReadonlyArray<string>): Promise<string>;
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import type { ReadOnlyVaultFacade } from '../../with-audit/guards/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Runtime context handed to `derive(source, ctx)`. Mirrors `GuardContext`'s
|
|
4
|
+
* narrow shape: read-only vault access, no write capability, no
|
|
5
|
+
* transaction handle. Determinism is the consumer's responsibility — the
|
|
6
|
+
* strategy hash includes `derive.toString()`, so the source string fixes
|
|
7
|
+
* the function's inputs; whatever sibling reads `derive` performs must
|
|
8
|
+
* yield the same outputs for the same source.
|
|
9
|
+
*/
|
|
10
|
+
export interface DerivationContext {
|
|
11
|
+
vault: ReadOnlyVaultFacade;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Metadata that travels inside the `_data` payload of a derived record.
|
|
15
|
+
* Lives in encrypted payload, not in the unencrypted envelope — the
|
|
16
|
+
* storage backend cannot infer the derivation graph from listing.
|
|
17
|
+
*/
|
|
18
|
+
export interface DerivedFromMeta {
|
|
19
|
+
/** Source collection name. */
|
|
20
|
+
readonly source: string;
|
|
21
|
+
/** Source record id. */
|
|
22
|
+
readonly sourceId: string;
|
|
23
|
+
/** `_v` of the source at derivation time. */
|
|
24
|
+
readonly sourceVersion: number;
|
|
25
|
+
/** ISO timestamp when this output was derived. */
|
|
26
|
+
readonly derivedAt: string;
|
|
27
|
+
/**
|
|
28
|
+
* SHA-256 of (source + outputs map keys + derive function source).
|
|
29
|
+
* Changes when the strategy changes → forces `vault.deriveAll` to
|
|
30
|
+
* recompute on next visit.
|
|
31
|
+
*/
|
|
32
|
+
readonly strategyHash: string;
|
|
33
|
+
}
|
|
34
|
+
/** Record-shape output — one source row produces (optionally) one output row at the source's id. */
|
|
35
|
+
export interface RecordOutputSpec {
|
|
36
|
+
shape: 'record';
|
|
37
|
+
collection: string;
|
|
38
|
+
/**
|
|
39
|
+
* When `true`, the `derive` function may return `null` (or
|
|
40
|
+
* `undefined`) for this output key. The executor interprets that as
|
|
41
|
+
* "no output for this invocation": a previously-emitted output at
|
|
42
|
+
* the same id is deleted (mirroring the empty-group / empty-aggregate
|
|
43
|
+
* semantics for empty groups); a never-emitted output is a silent
|
|
44
|
+
* no-op. When `false` (default), returning `null` throws
|
|
45
|
+
* `DerivationOutputShapeError` — same as v1.
|
|
46
|
+
*/
|
|
47
|
+
optional?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Field-level provenance for a **self-write** output — an output
|
|
50
|
+
* whose `collection` equals the strategy's `source`, used by
|
|
51
|
+
* reverse-denormalization (`triggerBy`) to patch a denormalized field
|
|
52
|
+
* back onto the source record.
|
|
53
|
+
*
|
|
54
|
+
* `denorm` names the ONLY top-level fields the derivation owns on that
|
|
55
|
+
* record. The engine merges just those fields from the `derive` return
|
|
56
|
+
* value onto the current stored record (`{ ...current, ...pick(out, denorm) }`)
|
|
57
|
+
* — the rest of the user's record is never clobbered by a stale snapshot.
|
|
58
|
+
* The whole-record `_derivedFrom` provenance tag is NOT applied (the
|
|
59
|
+
* record stays user-owned); the derivation only claims `denorm`.
|
|
60
|
+
*
|
|
61
|
+
* Cycle break is value-level: if the patch changes nothing, no write is
|
|
62
|
+
* issued — so the self-write that re-fires the source-path derivation
|
|
63
|
+
* terminates after one idempotent pass.
|
|
64
|
+
*
|
|
65
|
+
* REQUIRED when `collection === source` (validated at construction);
|
|
66
|
+
* ignored for outputs to a different collection.
|
|
67
|
+
*/
|
|
68
|
+
denorm?: readonly string[];
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Array-shape output — one source row produces a variable-length
|
|
72
|
+
* list of output rows, each with its own id (from the `key` extractor).
|
|
73
|
+
*
|
|
74
|
+
* On every source-row change, the dispatcher diffs the previously
|
|
75
|
+
* emitted key set against the new one: removed keys are deleted via
|
|
76
|
+
* `_internalDelete`, new and unchanged keys are upserted via
|
|
77
|
+
* `Collection.put`. Strict-mode rollback is preserved via the existing
|
|
78
|
+
* `_executed` tracking.
|
|
79
|
+
*
|
|
80
|
+
* Storage of the per-source-row key set lives at
|
|
81
|
+
* `_meta/derivations-fanout/<source>/<sourceId>/<outputKey>` as a
|
|
82
|
+
* plain JSON sidecar — keeps dispatch cost O(1) per source row.
|
|
83
|
+
*
|
|
84
|
+
* **Slice 1 limitation**: only `lifecycle: 'eager'` is supported.
|
|
85
|
+
* Registering an array-shape output with `lifecycle: 'lazy'` throws
|
|
86
|
+
* at `withDerivation` construction time.
|
|
87
|
+
*/
|
|
88
|
+
export interface ArrayOutputSpec {
|
|
89
|
+
shape: 'array';
|
|
90
|
+
collection: string;
|
|
91
|
+
/**
|
|
92
|
+
* Stable identity extractor for each derived row. Called on every
|
|
93
|
+
* row returned by `derive`. The string MUST be unique within a
|
|
94
|
+
* single invocation — duplicate keys throw
|
|
95
|
+
* `DerivationOutputShapeError`.
|
|
96
|
+
*
|
|
97
|
+
* Type is intentionally `(out: Record<string, unknown>) => string`
|
|
98
|
+
* (not generic) because OutputSpec is type-erased at the registry
|
|
99
|
+
* level. Strategy-level inference still produces typed `out`
|
|
100
|
+
* through the strategy's `outputs` map.
|
|
101
|
+
*/
|
|
102
|
+
key: (output: Record<string, unknown>) => string;
|
|
103
|
+
/**
|
|
104
|
+
* Cap on derived rows per source-row invocation. Defaults to 64.
|
|
105
|
+
* Raise for carry-forward cases (e.g. monthly expansion of
|
|
106
|
+
* multi-year contracts). Exceeding the cap throws
|
|
107
|
+
* `DerivationCapExceededError` BEFORE any writes — partial fanout
|
|
108
|
+
* is never persisted.
|
|
109
|
+
*/
|
|
110
|
+
maxFanout?: number;
|
|
111
|
+
}
|
|
112
|
+
/** Discriminated union — record + array. */
|
|
113
|
+
export type OutputSpec = RecordOutputSpec | ArrayOutputSpec;
|
|
114
|
+
/**
|
|
115
|
+
* Registration shape passed to `withDerivation()`.
|
|
116
|
+
*
|
|
117
|
+
* @typeParam TSource - the source record type
|
|
118
|
+
* @typeParam TOutputs - map of output-key → output record type. An output
|
|
119
|
+
* value may be a single record, or — for `shape: 'array'` outputs — an
|
|
120
|
+
* array of records (the fanout sidecar upserts/deletes each row).
|
|
121
|
+
*/
|
|
122
|
+
export interface DerivationStrategy<TSource extends Record<string, unknown>, TOutputs extends Record<string, Record<string, unknown> | ReadonlyArray<Record<string, unknown>>>> {
|
|
123
|
+
/** Source collection name. */
|
|
124
|
+
source: string;
|
|
125
|
+
/**
|
|
126
|
+
* Additional collections whose writes ALSO re-fire this derivation.
|
|
127
|
+
* By default only writes to the single declared
|
|
128
|
+
* `source` re-trigger a derivation; a `derive` that reads sibling
|
|
129
|
+
* collections via `ctx.vault` therefore goes stale when those
|
|
130
|
+
* siblings change. Declare those sibling collections here to wire
|
|
131
|
+
* them as extra triggers.
|
|
132
|
+
*
|
|
133
|
+
* **SAME-ID assumption (load-bearing):** when a write lands on one of
|
|
134
|
+
* these declared collections, the derivation re-fires with the
|
|
135
|
+
* PRIMARY `source` record read at the SAME id as the written record
|
|
136
|
+
* — NOT the written sibling record itself. If no primary `source`
|
|
137
|
+
* record exists at that id, the re-fire is a silent no-op (no throw,
|
|
138
|
+
* no output mutation). Model your collections so the sibling and the
|
|
139
|
+
* primary share an id (the common money/accounting case: an
|
|
140
|
+
* `allocations` row and its `payments`/`bills` keyed by the same id),
|
|
141
|
+
* or trigger off a collection you control the id-space of.
|
|
142
|
+
*
|
|
143
|
+
* Declared collections participate in cycle detection and are indexed
|
|
144
|
+
* in the registry's `_bySource` exactly like `source`, so a sibling
|
|
145
|
+
* that is also a derivation output forms a detectable cycle.
|
|
146
|
+
*
|
|
147
|
+
* Each entry must be a non-empty string and must not equal `source`
|
|
148
|
+
* (validated at `withDerivation()` construction time).
|
|
149
|
+
*/
|
|
150
|
+
sources?: ReadonlyArray<string>;
|
|
151
|
+
/**
|
|
152
|
+
* Foreign-key-keyed triggers for reverse-denormalization. Unlike
|
|
153
|
+
* `sources[]` (which re-fires at the SAME id), a `triggerBy` entry fans a
|
|
154
|
+
* write to a PARENT collection OUT to every source record whose FK matches
|
|
155
|
+
* the written parent's id.
|
|
156
|
+
*
|
|
157
|
+
* `{ collection, on }`: a write to `collection` (the parent, e.g.
|
|
158
|
+
* `'buyers'`) re-fires this derivation once per source record where
|
|
159
|
+
* `source[on] === writtenParentId` (`on` is the FK field ON the source,
|
|
160
|
+
* e.g. `'buyerId'`). The matched source record — not the parent — is
|
|
161
|
+
* passed to `derive`.
|
|
162
|
+
*
|
|
163
|
+
* Typical use: keep a denormalized field on the source in sync with a
|
|
164
|
+
* parent change (a buyer rename → refresh `buyerName` on all their sales),
|
|
165
|
+
* via a self-write output (`collection === source`) declaring `denorm`.
|
|
166
|
+
*
|
|
167
|
+
* Fan-out runs through `ctx.vault.collection(source).query().where(on,'==',id)`,
|
|
168
|
+
* which uses the FK index when the source declares `withIndexing()` on
|
|
169
|
+
* `on` (O(children)) and otherwise scans (O(N) — fine for small child
|
|
170
|
+
* sets). Set `maxFanout` as a safety rail; exceeding it throws
|
|
171
|
+
* `DerivationCapExceededError` before any write. `triggerBy` collections
|
|
172
|
+
* participate in cycle detection like `source`/`sources`.
|
|
173
|
+
*
|
|
174
|
+
* Each `collection` must be non-empty and not equal `source`; `on` must
|
|
175
|
+
* be a non-empty field name (validated at construction).
|
|
176
|
+
*/
|
|
177
|
+
triggerBy?: ReadonlyArray<{
|
|
178
|
+
collection: string;
|
|
179
|
+
on: string;
|
|
180
|
+
maxFanout?: number;
|
|
181
|
+
}>;
|
|
182
|
+
/**
|
|
183
|
+
* @internal — set by `withRollup()`. Marks this strategy as
|
|
184
|
+
* an aggregate-onto-parent rollup: a write OR delete of a `from` (child)
|
|
185
|
+
* record recomputes `compute(children where child[key] === parentId)` and
|
|
186
|
+
* patches it onto `source[field]` of the parent at `parentId` (= child[key]).
|
|
187
|
+
* `source` is the parent (`into`) collection; the synthetic self-write
|
|
188
|
+
* output carries `denorm: [field]`. Dispatch handles rollup specially (it
|
|
189
|
+
* does not run the executor). Eager-only in this slice.
|
|
190
|
+
*/
|
|
191
|
+
rollup?: {
|
|
192
|
+
readonly from: string;
|
|
193
|
+
readonly key: string;
|
|
194
|
+
readonly field: string;
|
|
195
|
+
readonly compute: (children: any[]) => unknown;
|
|
196
|
+
};
|
|
197
|
+
/** v1: only deterministic derivations supported. */
|
|
198
|
+
deterministic: true;
|
|
199
|
+
/**
|
|
200
|
+
* Output declarations keyed by name. The `derive` function's return
|
|
201
|
+
* value must have the same keys.
|
|
202
|
+
*/
|
|
203
|
+
outputs: {
|
|
204
|
+
[K in keyof TOutputs]: OutputSpec;
|
|
205
|
+
};
|
|
206
|
+
/**
|
|
207
|
+
* Pure function from source to outputs. Runs on plaintext, after DEK
|
|
208
|
+
* unwrap. Returns a map of named outputs. Each output is encrypted +
|
|
209
|
+
* stored via the existing `Collection.put` pipeline.
|
|
210
|
+
*
|
|
211
|
+
* `ctx.vault` is the same `ReadOnlyVaultFacade` guards see — fetch
|
|
212
|
+
* sibling records via `ctx.vault.collection<T>(name).get(id)` /
|
|
213
|
+
* `.list()` / `.query()`. The vault accessor is read-only; there is
|
|
214
|
+
* no path to a writer from `ctx`.
|
|
215
|
+
*
|
|
216
|
+
* **Per-output omission (runtime-supported):** returning `null` or
|
|
217
|
+
* `undefined` for an individual output key is handled at runtime via
|
|
218
|
+
* the `optional: true` flag on the output's `RecordOutputSpec` —
|
|
219
|
+
* the executor deletes any previously-emitted output at that id, or
|
|
220
|
+
* silently no-ops if none exists. For `shape: 'array'` outputs, null
|
|
221
|
+
* / undefined is treated as an empty array (clears all prior rows for
|
|
222
|
+
* that source). The *top-level* return must always be a `TOutputs`
|
|
223
|
+
* object; returning `null` for the whole result is not supported.
|
|
224
|
+
* (MV `unionSources` map drop-row is the analogous feature for
|
|
225
|
+
* materialized views.)
|
|
226
|
+
*/
|
|
227
|
+
derive: (source: TSource, ctx: DerivationContext) => Promise<TOutputs> | TOutputs;
|
|
228
|
+
/**
|
|
229
|
+
* `'eager'` runs `derive` synchronously inside the source-write
|
|
230
|
+
* transaction. `'lazy'` marks outputs stale on source-change and
|
|
231
|
+
* derives on first read.
|
|
232
|
+
*/
|
|
233
|
+
lifecycle: 'eager' | 'lazy' | {
|
|
234
|
+
mode: 'eager' | 'lazy';
|
|
235
|
+
maxDepth?: number;
|
|
236
|
+
};
|
|
237
|
+
/**
|
|
238
|
+
* `true` = any output failure rolls back the source write (only with
|
|
239
|
+
* `withTransactions`). `false` = isolate per-output failure, log,
|
|
240
|
+
* continue. Default `false`.
|
|
241
|
+
*/
|
|
242
|
+
strict?: boolean;
|
|
243
|
+
}
|
|
244
|
+
/** Returned by `withDerivation()` and consumed by `createNoydb`. */
|
|
245
|
+
export interface DerivationStrategyHandle {
|
|
246
|
+
readonly __noydb_strategy: 'derivation';
|
|
247
|
+
readonly spec: DerivationStrategy<any, any>;
|
|
248
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DerivationStrategy, DerivationStrategyHandle } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Register a deterministic derivation: one source collection → one or
|
|
4
|
+
* more typed outputs, computed by the user's `derive` function on
|
|
5
|
+
* plaintext after DEK unwrap. Outputs are encrypted with the same DEK
|
|
6
|
+
* as the source and written via the standard `Collection.put` path.
|
|
7
|
+
*
|
|
8
|
+
* See docs/superpowers/specs/2026-05-01-dim14-derivation-v1-design.md.
|
|
9
|
+
*/
|
|
10
|
+
export declare function withDerivation<TSource extends Record<string, unknown>, TOutputs extends Record<string, Record<string, unknown> | ReadonlyArray<Record<string, unknown>>>>(spec: DerivationStrategy<TSource, TOutputs>): DerivationStrategyHandle;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { DerivationStrategyHandle } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* `withRollup` — aggregate many child records onto a single field of their
|
|
4
|
+
* parent. The reverse of a join: instead of reading children
|
|
5
|
+
* on demand, the parent carries a maintained summary.
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* withRollup<Sale, Buyer>({
|
|
9
|
+
* from: 'sales', // child collection (the trigger)
|
|
10
|
+
* key: 'buyerId', // FK on the child → parent id
|
|
11
|
+
* into: 'buyers', // parent collection
|
|
12
|
+
* field: 'revenueByYear', // field on the parent to maintain
|
|
13
|
+
* compute: (sales) => groupSumByYear(sales, 'total'),
|
|
14
|
+
* })
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* On every write OR delete of a `from` record, the parent at id `child[key]`
|
|
18
|
+
* is recomputed: `compute(allChildren where child[key] === parentId)` is
|
|
19
|
+
* patched onto `parent[field]`. A parent write also recomputes its own
|
|
20
|
+
* aggregate (so a parent created after its children still fills in). Only the
|
|
21
|
+
* `field` is touched — the rest of the parent record is never clobbered — and
|
|
22
|
+
* a value-equality guard suppresses no-op writes. The aggregate is gap-free
|
|
23
|
+
* with respect to child inserts, updates, and deletes.
|
|
24
|
+
*
|
|
25
|
+
* Desugars to a `withDerivation` strategy carrying a `rollup` marker; dispatch
|
|
26
|
+
* handles it without invoking the executor. Eager-only in this slice.
|
|
27
|
+
*/
|
|
28
|
+
export declare function withRollup<TChild extends Record<string, unknown> = Record<string, unknown>, TParent extends Record<string, unknown> = Record<string, unknown>>(config: {
|
|
29
|
+
from: string;
|
|
30
|
+
key: keyof TChild & string;
|
|
31
|
+
into: string;
|
|
32
|
+
field: keyof TParent & string;
|
|
33
|
+
compute: (children: TChild[]) => unknown;
|
|
34
|
+
}): DerivationStrategyHandle;
|