@noy-db/hub 0.4.0-pre.5 → 0.4.0-pre.7
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/api-3NKVNZPM.js +20 -0
- package/dist/attestation/index.js +20 -20
- package/dist/{backup-YCHAC575.js → backup-PTSVXDDW.js} +13 -13
- package/dist/blobs/index.js +15 -12
- package/dist/blobs/index.js.map +1 -1
- package/dist/broker/index.js +12 -12
- package/dist/cargo/index.js +36 -36
- package/dist/{chunk-5WLDZZ6S.js → chunk-35NMVJ7I.js} +3 -3
- package/dist/{chunk-TNATF3HB.js → chunk-3HUYRN24.js} +4 -4
- package/dist/chunk-3HUYRN24.js.map +1 -0
- package/dist/{chunk-TNJVDG2B.js → chunk-3XKESW5E.js} +3 -3
- package/dist/{chunk-MUPZ6IZX.js → chunk-4JQK3L4V.js} +2 -2
- package/dist/{chunk-Z4D3YGAB.js → chunk-4ZKNC6A6.js} +2 -2
- package/dist/{chunk-ONB627HU.js → chunk-55LX6FSX.js} +2 -2
- package/dist/{chunk-QMZ5A6FQ.js → chunk-56IIVAEO.js} +2 -2
- package/dist/chunk-5D2ALSM5.js +19 -0
- package/dist/chunk-5D2ALSM5.js.map +1 -0
- package/dist/{chunk-FHHYCBBP.js → chunk-5DRROK5W.js} +2 -2
- package/dist/{chunk-GTNRMJYH.js → chunk-5GQEU4DN.js} +2 -2
- package/dist/{chunk-YQQPNXNO.js → chunk-6L3DKWRY.js} +6 -6
- package/dist/chunk-6LJY7X5A.js +18 -0
- package/dist/chunk-6LJY7X5A.js.map +1 -0
- package/dist/{chunk-M6QA2KK2.js → chunk-6M2I3DKF.js} +2 -2
- package/dist/{chunk-FTCGEUOY.js → chunk-6R6Q3MRN.js} +7 -7
- package/dist/{chunk-ZUDAK436.js → chunk-6UBZ6I5Z.js} +2 -2
- package/dist/{chunk-SEU6QHH4.js → chunk-6ZNSB3H6.js} +5 -17
- package/dist/chunk-6ZNSB3H6.js.map +1 -0
- package/dist/chunk-AFHQATY4.js +47 -0
- package/dist/chunk-AFHQATY4.js.map +1 -0
- package/dist/{chunk-7U6AB7DZ.js → chunk-AKKRXT23.js} +2 -2
- package/dist/{chunk-2PDBYF2O.js → chunk-AT2JJEKJ.js} +4 -4
- package/dist/chunk-AT2JJEKJ.js.map +1 -0
- package/dist/{chunk-OWLZONGX.js → chunk-BLBAQRBM.js} +2 -2
- package/dist/{chunk-QBOQI6PG.js → chunk-BN4HRYAZ.js} +2 -2
- package/dist/{chunk-QVGEVZ5F.js → chunk-BQ6DHN4I.js} +3 -3
- package/dist/{chunk-GP54LU5N.js → chunk-BYFXLDVV.js} +9 -9
- package/dist/{chunk-FIP7KI2P.js → chunk-C25JXSOR.js} +337 -21
- package/dist/chunk-C25JXSOR.js.map +1 -0
- package/dist/chunk-CADUYBQD.js +151 -0
- package/dist/chunk-CADUYBQD.js.map +1 -0
- package/dist/{chunk-HAPY7WFP.js → chunk-CCDP6EPB.js} +13 -355
- package/dist/chunk-CCDP6EPB.js.map +1 -0
- package/dist/{chunk-QRHEAZ2Q.js → chunk-CUZLNGD5.js} +1 -1
- package/dist/{chunk-YXIVUWDU.js → chunk-DGBIHDVK.js} +5 -5
- package/dist/chunk-DSDXAKIP.js +50 -0
- package/dist/chunk-DSDXAKIP.js.map +1 -0
- package/dist/{chunk-QZJEYZ4I.js → chunk-DZAF24PG.js} +5 -5
- package/dist/chunk-DZFQVICS.js +23 -0
- package/dist/chunk-DZFQVICS.js.map +1 -0
- package/dist/chunk-E23UGFVC.js +63 -0
- package/dist/chunk-E23UGFVC.js.map +1 -0
- package/dist/{chunk-X3MWEFPT.js → chunk-EBKCYQ2D.js} +14 -14
- package/dist/chunk-EBKCYQ2D.js.map +1 -0
- package/dist/chunk-EP5L47XV.js +22 -0
- package/dist/chunk-EP5L47XV.js.map +1 -0
- package/dist/{chunk-TMR64XPL.js → chunk-EZNTORXE.js} +2 -2
- package/dist/{chunk-JAMDDLIM.js → chunk-FMNU7IUG.js} +3 -3
- package/dist/{chunk-YXZNGHID.js → chunk-FO6RNKKW.js} +8 -46
- package/dist/chunk-FO6RNKKW.js.map +1 -0
- package/dist/{chunk-YMUGBZN2.js → chunk-FQ5CHJR7.js} +1 -1
- package/dist/chunk-FQ5CHJR7.js.map +1 -0
- package/dist/{chunk-YZN6NRTR.js → chunk-FRMW23UK.js} +13 -11
- package/dist/chunk-FRMW23UK.js.map +1 -0
- package/dist/chunk-GJW4HX2O.js +1 -0
- package/dist/{chunk-7BIJS6II.js → chunk-GP3UWP22.js} +4 -4
- package/dist/{chunk-YTW6ZIPD.js → chunk-GZACYEOB.js} +1 -1
- package/dist/chunk-GZACYEOB.js.map +1 -0
- package/dist/{chunk-JIHH26WQ.js → chunk-HFUAFR6B.js} +6 -6
- package/dist/{chunk-J5TEU77Q.js → chunk-IF6WNGAK.js} +59 -4
- package/dist/chunk-IF6WNGAK.js.map +1 -0
- package/dist/{chunk-ZX5FNWH7.js → chunk-IG6KUWBX.js} +2 -2
- package/dist/chunk-IG6KUWBX.js.map +1 -0
- package/dist/{chunk-CKUYQO2P.js → chunk-IMRB2C4O.js} +7 -5
- package/dist/chunk-IMRB2C4O.js.map +1 -0
- package/dist/{chunk-RWW3I3PO.js → chunk-ISRKW4YN.js} +3 -3
- package/dist/{chunk-P4NUJVWL.js → chunk-IXNCZTWA.js} +2 -2
- package/dist/{chunk-YFFEF6HR.js → chunk-JIDLU57U.js} +3 -3
- package/dist/{chunk-PTT2NB46.js → chunk-JYJFGD2H.js} +2 -2
- package/dist/{chunk-3OWYOECI.js → chunk-JYV4JJV2.js} +5 -5
- package/dist/{chunk-OGVE4IJW.js → chunk-KBPU5M2E.js} +7 -7
- package/dist/{chunk-I2XEBEEF.js → chunk-KFRPNHWR.js} +4 -4
- package/dist/chunk-KFRPNHWR.js.map +1 -0
- package/dist/{chunk-3LJYHE7S.js → chunk-KPXM4WO6.js} +64 -57
- package/dist/chunk-KPXM4WO6.js.map +1 -0
- package/dist/{chunk-QMMOMBH6.js → chunk-KRCBZYTZ.js} +26 -177
- package/dist/chunk-KRCBZYTZ.js.map +1 -0
- package/dist/{chunk-UTEATWHO.js → chunk-KW42W6SV.js} +6 -6
- package/dist/{chunk-BY5YBSXA.js → chunk-L3YYLT4E.js} +15 -2
- package/dist/chunk-L3YYLT4E.js.map +1 -0
- package/dist/{chunk-UVBHM7AK.js → chunk-MANUDU7I.js} +6 -6
- package/dist/{chunk-YJ3TREAC.js → chunk-MHMLXJ3I.js} +2 -2
- package/dist/chunk-MHMLXJ3I.js.map +1 -0
- package/dist/{chunk-D4LAJ737.js → chunk-MSMJJB4J.js} +2 -2
- package/dist/chunk-MSMJJB4J.js.map +1 -0
- package/dist/{chunk-DYZ5CCVM.js → chunk-MXUT7FTE.js} +2 -2
- package/dist/chunk-MXUT7FTE.js.map +1 -0
- package/dist/{chunk-7ICV4ASA.js → chunk-N5PLUFH2.js} +27 -5
- package/dist/chunk-N5PLUFH2.js.map +1 -0
- package/dist/{chunk-K7BADAOS.js → chunk-NEX7JCMO.js} +4 -4
- package/dist/{chunk-5HSSTOOG.js → chunk-NFZGZ4AK.js} +2 -2
- package/dist/{chunk-XUFAFHQM.js → chunk-NJ4DYYO5.js} +7 -4
- package/dist/chunk-NJ4DYYO5.js.map +1 -0
- package/dist/{chunk-VEGQYPCP.js → chunk-NQSO4UAH.js} +8 -8
- package/dist/chunk-NQSO4UAH.js.map +1 -0
- package/dist/{chunk-GHEMAVTN.js → chunk-NYEFP7DY.js} +4 -4
- package/dist/chunk-NYEFP7DY.js.map +1 -0
- package/dist/{chunk-S4YERMGJ.js → chunk-OBPVWOSQ.js} +4 -4
- package/dist/{chunk-OHV6T5JB.js → chunk-OLIWCCFM.js} +2 -5
- package/dist/{chunk-2CRZOVDI.js → chunk-OLSARBZU.js} +2 -2
- package/dist/chunk-PEOZ34EM.js +13 -0
- package/dist/chunk-PEOZ34EM.js.map +1 -0
- package/dist/{chunk-KJTIAECI.js → chunk-PT4XLP6I.js} +171 -12
- package/dist/chunk-PT4XLP6I.js.map +1 -0
- package/dist/{chunk-LC7DSMHR.js → chunk-PTHKZWEH.js} +2 -14
- package/dist/{chunk-LC7DSMHR.js.map → chunk-PTHKZWEH.js.map} +1 -1
- package/dist/chunk-PVEWA2DU.js +23 -0
- package/dist/chunk-PVEWA2DU.js.map +1 -0
- package/dist/chunk-QADFHRQM.js +367 -0
- package/dist/chunk-QADFHRQM.js.map +1 -0
- package/dist/{chunk-7LP7FFJ2.js → chunk-QD46HPZG.js} +2 -2
- package/dist/{chunk-G4MFQXYX.js → chunk-QJNCB5SK.js} +2 -2
- package/dist/{chunk-6SYOHUHM.js → chunk-QZWTRENR.js} +2 -2
- package/dist/chunk-QZWTRENR.js.map +1 -0
- package/dist/{chunk-TSNRZSRC.js → chunk-RO5NM6UI.js} +2 -2
- package/dist/chunk-RO5NM6UI.js.map +1 -0
- package/dist/{chunk-GEEJPID6.js → chunk-RZPOZPZU.js} +8 -8
- package/dist/chunk-SGDPRCC4.js +1075 -0
- package/dist/chunk-SGDPRCC4.js.map +1 -0
- package/dist/{chunk-YCAJDK4O.js → chunk-SGQ4N5FS.js} +5 -5
- package/dist/{chunk-522MBPE5.js → chunk-SHEEBRZ4.js} +2 -2
- package/dist/{chunk-YWZEDG7F.js → chunk-SHYIA73K.js} +6 -6
- package/dist/{chunk-L2CAWCQL.js → chunk-SKM35Y4Q.js} +17 -26
- package/dist/chunk-SKM35Y4Q.js.map +1 -0
- package/dist/chunk-SMY5X46Z.js +14 -0
- package/dist/chunk-SMY5X46Z.js.map +1 -0
- package/dist/{chunk-K4BWPNJO.js → chunk-TE6LH6J2.js} +5 -5
- package/dist/{chunk-AFAPBZAA.js → chunk-TG634KCO.js} +11 -2
- package/dist/chunk-TG634KCO.js.map +1 -0
- package/dist/{chunk-V5JUAW4M.js → chunk-TIVK6PRK.js} +9 -10
- package/dist/chunk-TIVK6PRK.js.map +1 -0
- package/dist/{chunk-JN3SGXJE.js → chunk-UADPR6F4.js} +3 -3
- package/dist/{chunk-JN3SGXJE.js.map → chunk-UADPR6F4.js.map} +1 -1
- package/dist/{chunk-SBOHNJUD.js → chunk-V6UQZA2H.js} +2 -2
- package/dist/chunk-VG2ZSFYD.js +32 -0
- package/dist/chunk-VG2ZSFYD.js.map +1 -0
- package/dist/{chunk-SC4JLMZI.js → chunk-VH6SOCXH.js} +2 -2
- package/dist/chunk-VKQCVU2Z.js +21 -0
- package/dist/chunk-VKQCVU2Z.js.map +1 -0
- package/dist/chunk-VSRSQ2CR.js +654 -0
- package/dist/chunk-VSRSQ2CR.js.map +1 -0
- package/dist/{chunk-WQN5SM7P.js → chunk-W3G5REIU.js} +2 -2
- package/dist/{chunk-EGU4PWQW.js → chunk-W66AM5IB.js} +2 -2
- package/dist/chunk-W66AM5IB.js.map +1 -0
- package/dist/{chunk-HQKRZIX6.js → chunk-WBKZUO5V.js} +26 -43
- package/dist/chunk-WBKZUO5V.js.map +1 -0
- package/dist/{chunk-OMSKGLYA.js → chunk-WO4T4OD5.js} +2 -2
- package/dist/{chunk-6RPWILRH.js → chunk-WZ3NCMK6.js} +6 -5
- package/dist/{chunk-BAAUFCJK.js → chunk-X4MVWPHV.js} +3 -3
- package/dist/{chunk-R2N37AA6.js → chunk-XIDQKFZF.js} +3 -3
- package/dist/{chunk-EEZCB74X.js → chunk-XOBHRD2M.js} +575 -651
- package/dist/chunk-XOBHRD2M.js.map +1 -0
- package/dist/chunk-XZHEOSQ2.js +16 -0
- package/dist/chunk-XZHEOSQ2.js.map +1 -0
- package/dist/chunk-Y2NBBT6K.js +18 -0
- package/dist/chunk-Y2NBBT6K.js.map +1 -0
- package/dist/{chunk-OWOT7CFC.js → chunk-Y6B6HVKC.js} +2 -2
- package/dist/{chunk-5ATANZSW.js → chunk-Y6VZQGGH.js} +6 -6
- package/dist/chunk-YMUFFJCO.js +23 -0
- package/dist/chunk-YMUFFJCO.js.map +1 -0
- package/dist/{chunk-YZNKFYDC.js → chunk-ZFUFAHZ3.js} +4 -4
- package/dist/{chunk-PWWWMRT7.js → chunk-ZTLOXFPB.js} +2 -2
- package/dist/chunk-ZTLOXFPB.js.map +1 -0
- package/dist/{walk-E3OVLBFR.js → chunk-ZWBKDKXC.js} +4 -13
- package/dist/{walk-E3OVLBFR.js.map → chunk-ZWBKDKXC.js.map} +1 -1
- package/dist/classified/index.js +5 -5
- package/dist/{classified-marker-52P3D72W.js → classified-marker-EOOSMWFC.js} +3 -3
- package/dist/collection-facade-TTRF5NFJ.js +45 -0
- package/dist/{computed-33DRJDOC.js → computed-AB45PS4V.js} +3 -3
- package/dist/consent/index.js +13 -9
- package/dist/consent/index.js.map +1 -1
- package/dist/{cover-5BSNJREH.js → cover/index.js} +7 -6
- package/dist/crdt/index.js +4 -0
- package/dist/crdt/index.js.map +1 -1
- package/dist/custody/index.js +26 -0
- package/dist/{dead-filter-JXVCKS6W.js → dead-filter-6DYY7S64.js} +2 -2
- package/dist/{chunk-ILM6X6CP.js → delegation-ONOZVPIP.js} +12 -6
- package/dist/{chunk-ILM6X6CP.js.map → delegation-ONOZVPIP.js.map} +1 -1
- package/dist/derivations/index.js +12 -12
- package/dist/derive-IGGVSUPH.js +22 -0
- package/dist/directory/index.js +46 -0
- package/dist/{dispatch-PKQQFDBT.js → dispatch-7T45NN7C.js} +19 -18
- package/dist/{dispatch-PKQQFDBT.js.map → dispatch-7T45NN7C.js.map} +1 -1
- package/dist/{dispatch-SMXUO7W5.js → dispatch-RPTLK7LJ.js} +5 -5
- package/dist/{enclave-I5H3GINP.js → enclave-CLJVSDFG.js} +9 -9
- package/dist/executor-IEBLTBCW.js +9 -0
- package/dist/executor-RM7XWQDU.js +9 -0
- package/dist/executor-XZYM4KHT.js +28 -0
- package/dist/export-accessible-24XCCD3A.js +23 -0
- package/dist/extract-partition-H2TPEEOF.js +38 -0
- package/dist/{fanout-sidecar-WWXVHHUH.js → fanout-sidecar-TV7CXAJ6.js} +9 -9
- package/dist/find-OZMTRIK3.js +11 -0
- package/dist/forget/index.js +11 -11
- package/dist/forget/index.js.map +1 -1
- package/dist/guards/index.js +4 -4
- package/dist/history/index.js +16 -12
- package/dist/history/index.js.map +1 -1
- package/dist/i18n/index.js +16 -14
- package/dist/i18n/index.js.map +1 -1
- package/dist/index.d.ts +18 -24
- package/dist/index.js +212 -2045
- package/dist/index.js.map +1 -1
- package/dist/indexing/index.js +4 -2
- package/dist/indexing/index.js.map +1 -1
- package/dist/introspection/index.js +28 -0
- package/dist/issue-55HJE7JF.js +19 -0
- package/dist/kernel/collection-config.d.ts +1 -1
- package/dist/kernel/collection.d.ts +2 -2
- package/dist/kernel/errors.d.ts +2 -2
- package/dist/kernel/lazy.d.ts +30 -0
- package/dist/kernel/noydb.d.ts +22 -11
- package/dist/kernel/query/builder.d.ts +10 -10
- package/dist/kernel/query/index.d.ts +0 -6
- package/dist/kernel/query/scan-builder.d.ts +4 -4
- package/dist/kernel/types.d.ts +25 -25
- package/dist/kernel/vault.d.ts +10 -10
- package/dist/{ledger-M2BKCNVS.js → ledger-XY6NP3J2.js} +11 -11
- package/dist/liberate-LXOJ2EMB.js +24 -0
- package/dist/{link-set-ZU4E5J5S.js → link-set-POQB7BU5.js} +11 -11
- package/dist/materialized-views/index.js +22 -19
- package/dist/money/index.js +31 -0
- package/dist/noydb-KXS35UJS.js +82 -0
- package/dist/overlay-views/index.js +4 -4
- package/dist/periods/index.js +15 -13
- package/dist/pod/index.js +11 -12
- package/dist/{policy-IY2YEA3A.js → policy/index.js} +6 -6
- package/dist/port/with/blob-strategy.d.ts +15 -5
- package/dist/port/with/collection-registries.d.ts +62 -0
- package/dist/port/with/strategies.d.ts +11 -11
- package/dist/port/with/team-strategy.d.ts +2 -1
- package/dist/portability/index.js +8 -8
- package/dist/{post-register-XIAHB6KF.js → post-register-URQANI3B.js} +6 -6
- package/dist/query/index.js +6 -46
- package/dist/{aggregate → reduce}/index.js +24 -17
- package/dist/reduce/index.js.map +1 -0
- package/dist/register-5W6CG4RM.js +25 -0
- package/dist/registry-7Y5WF7GS.js +9 -0
- package/dist/{registry-VW6P6A3J.js → registry-BWD2ED52.js} +2 -2
- package/dist/registry-MCSGBZXI.js +18 -0
- package/dist/registry-UJFP3NWF.js +19 -0
- package/dist/request-withdrawal-IWYDM4SO.js +31 -0
- package/dist/{reveal-VWXRV2XU.js → reveal-BXZGWIOP.js} +6 -6
- package/dist/revoke-TINYPHYY.js +24 -0
- package/dist/satellites/index.js +1 -1
- package/dist/schema-update/index.js +26 -0
- package/dist/sealed-record/index.js +12 -12
- package/dist/search/index.js +36 -0
- package/dist/{seed-CDBFOTIK.js → seed-F7YYQTRC.js} +11 -11
- package/dist/sequence/index.js +30 -0
- package/dist/session/index.js +13 -9
- package/dist/session/index.js.map +1 -1
- package/dist/shadow/index.js +6 -2
- package/dist/shadow/index.js.map +1 -1
- package/dist/signer-WMZKCNKC.js +25 -0
- package/dist/snapshots/index.js +14 -10
- package/dist/snapshots/index.js.map +1 -1
- package/dist/{stale-NBROTA66.js → stale-JOE7GBAE.js} +11 -10
- package/dist/storage-B3WBKXKT.js +23 -0
- package/dist/store/index.js +22 -0
- package/dist/{store-coordination-provider-P3IU5JHD.js → store-coordination-provider-5LX2UFU2.js} +3 -3
- package/dist/sync/index.js +14 -10
- package/dist/sync/index.js.map +1 -1
- package/dist/team/index.js +36 -29
- package/dist/tiers/index.js +10 -10
- package/dist/to/index.js +1 -1
- package/dist/{tx → transactions}/index.js +7 -3
- package/dist/transactions/index.js.map +1 -0
- package/dist/util/index.js +1 -1
- package/dist/{verify-5X37OXRY.js → verify-7XWHJWUN.js} +5 -5
- package/dist/via/blob/active.d.ts +7 -18
- package/dist/via/blob/binding.d.ts +1 -1
- package/dist/via/blob/index.d.ts +4 -2
- package/dist/via/i18n/core.d.ts +1 -1
- package/dist/via/i18n/index.d.ts +2 -0
- package/dist/via/money/money-reducer.d.ts +2 -2
- package/dist/walk-6OHAWGBS.js +21 -0
- package/dist/with-audit/consent/index.d.ts +2 -0
- package/dist/with-audit/forget/active.d.ts +3 -3
- package/dist/with-audit/forget/index.d.ts +4 -4
- package/dist/with-audit/forget/strategy.d.ts +3 -3
- package/dist/with-audit/guards/executor.d.ts +4 -4
- package/dist/with-audit/guards/immutable-guard.d.ts +3 -3
- package/dist/with-audit/guards/index.d.ts +1 -1
- package/dist/with-audit/guards/registry.d.ts +3 -3
- package/dist/with-audit/guards/transition-guard.d.ts +3 -3
- package/dist/with-audit/guards/types.d.ts +10 -10
- package/dist/with-audit/guards/with-guard.d.ts +2 -2
- package/dist/with-audit/periods/index.d.ts +2 -0
- package/dist/with-cargo/floor.d.ts +3 -3
- package/dist/with-commit/crdt/index.d.ts +2 -0
- package/dist/with-commit/history/index.d.ts +2 -0
- package/dist/with-commit/numbering/descriptor.d.ts +16 -6
- package/dist/with-commit/tx/active.d.ts +5 -5
- package/dist/with-commit/tx/index.d.ts +2 -2
- package/dist/with-commit/tx/invariants.d.ts +1 -1
- package/dist/with-commit/tx/strategy.d.ts +3 -3
- package/dist/with-fork/shadow/index.d.ts +2 -0
- package/dist/with-fork/snapshots/active.d.ts +2 -2
- package/dist/with-fork/snapshots/index.d.ts +3 -1
- package/dist/with-fork/snapshots/noydb-facade.d.ts +3 -3
- package/dist/with-fork/snapshots/strategy.d.ts +2 -2
- package/dist/with-formula/derivations/executor.d.ts +2 -2
- package/dist/with-formula/derivations/index.d.ts +2 -1
- package/dist/with-formula/derivations/registry.d.ts +3 -3
- package/dist/with-formula/derivations/stale.d.ts +2 -2
- package/dist/with-formula/derivations/types.d.ts +3 -3
- package/dist/with-formula/derivations/with-derivation.d.ts +2 -2
- package/dist/with-formula/derivations/with-rollup.d.ts +15 -8
- package/dist/with-formula/materialized-views/dependency-analyzer.d.ts +3 -3
- package/dist/with-formula/materialized-views/index.d.ts +1 -1
- package/dist/with-formula/materialized-views/registry.d.ts +4 -4
- package/dist/with-formula/materialized-views/types.d.ts +11 -11
- package/dist/with-formula/materialized-views/with-materialized-view.d.ts +2 -2
- package/dist/with-formula/overlay-views/index.d.ts +1 -1
- package/dist/with-formula/overlay-views/registry.d.ts +4 -4
- package/dist/with-formula/overlay-views/types.d.ts +3 -3
- package/dist/with-formula/overlay-views/virtual-collection.d.ts +2 -2
- package/dist/with-formula/overlay-views/with-overlayed-view.d.ts +2 -2
- package/dist/with-lookup/indexing/active.d.ts +5 -5
- package/dist/with-lookup/indexing/index.d.ts +3 -1
- package/dist/with-lookup/indexing/strategy.d.ts +3 -3
- package/dist/with-lookup/{aggregate → reduce}/active.d.ts +8 -8
- package/dist/with-lookup/{aggregate → reduce}/groupby.d.ts +21 -21
- package/dist/with-lookup/reduce/index.d.ts +34 -0
- package/dist/with-lookup/{aggregate → reduce}/reducers.d.ts +10 -10
- package/dist/with-lookup/{aggregate/aggregation.d.ts → reduce/reduction.d.ts} +21 -21
- package/dist/with-lookup/{aggregate → reduce}/strategy.d.ts +15 -15
- package/dist/with-lookup/search/build-docs.d.ts +7 -2
- package/dist/with-lookup/search/index.d.ts +1 -1
- package/dist/with-party/directory/cover/index.d.ts +1 -0
- package/dist/with-party/directory/index.d.ts +2 -0
- package/dist/with-party/session/index.d.ts +2 -0
- package/dist/with-party/sync/index.d.ts +2 -0
- package/dist/with-party/team/index.d.ts +2 -0
- package/dist/with-party/team/keyring.d.ts +68 -20
- package/dist/with-party/team/noydb-facade.d.ts +2 -1
- package/dist/with-shape/blobs/blob-set.d.ts +1 -1
- package/dist/with-shape/introspection/index.d.ts +6 -0
- package/dist/with-shape/schema-update/index.d.ts +1 -0
- package/dist/with-store/index.d.ts +3 -2
- package/dist/withdraw-accessible-DEUCOO4F.js +28 -0
- package/dist/withdraw-accessible-DEUCOO4F.js.map +1 -0
- package/package.json +42 -30
- package/dist/aggregate/index.js.map +0 -1
- package/dist/api-22ES33N3.js +0 -20
- package/dist/as/index.js +0 -30
- package/dist/at/index.js +0 -1
- package/dist/by/index.js +0 -11
- package/dist/chunk-2PDBYF2O.js.map +0 -1
- package/dist/chunk-2YELV6TV.js +0 -1
- package/dist/chunk-3LJYHE7S.js.map +0 -1
- package/dist/chunk-6SYOHUHM.js.map +0 -1
- package/dist/chunk-7ICV4ASA.js.map +0 -1
- package/dist/chunk-AFAPBZAA.js.map +0 -1
- package/dist/chunk-BY5YBSXA.js.map +0 -1
- package/dist/chunk-CJVEAVYH.js +0 -205
- package/dist/chunk-CJVEAVYH.js.map +0 -1
- package/dist/chunk-CKUYQO2P.js.map +0 -1
- package/dist/chunk-D4LAJ737.js.map +0 -1
- package/dist/chunk-DYZ5CCVM.js.map +0 -1
- package/dist/chunk-EEZCB74X.js.map +0 -1
- package/dist/chunk-EGU4PWQW.js.map +0 -1
- package/dist/chunk-FIP7KI2P.js.map +0 -1
- package/dist/chunk-GHEMAVTN.js.map +0 -1
- package/dist/chunk-HAPY7WFP.js.map +0 -1
- package/dist/chunk-HQKRZIX6.js.map +0 -1
- package/dist/chunk-I2XEBEEF.js.map +0 -1
- package/dist/chunk-IGLU4ME7.js +0 -255
- package/dist/chunk-IGLU4ME7.js.map +0 -1
- package/dist/chunk-J5TEU77Q.js.map +0 -1
- package/dist/chunk-KJTIAECI.js.map +0 -1
- package/dist/chunk-L2CAWCQL.js.map +0 -1
- package/dist/chunk-LB7FD65R.js +0 -163
- package/dist/chunk-LB7FD65R.js.map +0 -1
- package/dist/chunk-PWWWMRT7.js.map +0 -1
- package/dist/chunk-QMMOMBH6.js.map +0 -1
- package/dist/chunk-SEU6QHH4.js.map +0 -1
- package/dist/chunk-TNATF3HB.js.map +0 -1
- package/dist/chunk-TSNRZSRC.js.map +0 -1
- package/dist/chunk-V5JUAW4M.js.map +0 -1
- package/dist/chunk-VEGQYPCP.js.map +0 -1
- package/dist/chunk-X3MWEFPT.js.map +0 -1
- package/dist/chunk-XUFAFHQM.js.map +0 -1
- package/dist/chunk-YJ3TREAC.js.map +0 -1
- package/dist/chunk-YMUGBZN2.js.map +0 -1
- package/dist/chunk-YTW6ZIPD.js.map +0 -1
- package/dist/chunk-YXZNGHID.js.map +0 -1
- package/dist/chunk-YZN6NRTR.js.map +0 -1
- package/dist/chunk-ZX5FNWH7.js.map +0 -1
- package/dist/collection-facade-XKCFHSLR.js +0 -44
- package/dist/delegation-WWZPEDK2.js +0 -25
- package/dist/derive-CWWFEQ4N.js +0 -21
- package/dist/executor-FCJEH3FU.js +0 -9
- package/dist/executor-OHET7TF7.js +0 -9
- package/dist/executor-SHYLIBOM.js +0 -26
- package/dist/export-accessible-FBL6TDSK.js +0 -23
- package/dist/extract-partition-ZYIRYMTI.js +0 -38
- package/dist/find-LEBUXVL7.js +0 -11
- package/dist/in/index.js +0 -1
- package/dist/issue-F76PAGIR.js +0 -19
- package/dist/liberate-ZP7UB57K.js +0 -24
- package/dist/noydb-BNDGEK5X.js +0 -71
- package/dist/on/index.js +0 -17
- package/dist/port/as/index.d.ts +0 -26
- package/dist/port/at/index.d.ts +0 -18
- package/dist/port/in/index.d.ts +0 -21
- package/dist/port/on/index.d.ts +0 -27
- package/dist/port/ui/index.d.ts +0 -21
- package/dist/port/with/index.d.ts +0 -18
- package/dist/register-HB4TQZSV.js +0 -23
- package/dist/registry-6BMBFEXT.js +0 -19
- package/dist/registry-7CZWF3EQ.js +0 -9
- package/dist/registry-JOFO7RAH.js +0 -18
- package/dist/request-withdrawal-UN3TRHWI.js +0 -31
- package/dist/revoke-OLO2OVR7.js +0 -24
- package/dist/signer-MGGKPYAN.js +0 -25
- package/dist/storage-3R37QZLA.js +0 -23
- package/dist/tx/index.js.map +0 -1
- package/dist/ui/index.js +0 -1
- package/dist/with/index.js +0 -31
- package/dist/with-lookup/aggregate/index.d.ts +0 -23
- package/dist/withdraw-accessible-Q2EMATCU.js +0 -28
- /package/dist/{api-22ES33N3.js.map → api-3NKVNZPM.js.map} +0 -0
- /package/dist/{backup-YCHAC575.js.map → backup-PTSVXDDW.js.map} +0 -0
- /package/dist/{chunk-5WLDZZ6S.js.map → chunk-35NMVJ7I.js.map} +0 -0
- /package/dist/{chunk-TNJVDG2B.js.map → chunk-3XKESW5E.js.map} +0 -0
- /package/dist/{chunk-MUPZ6IZX.js.map → chunk-4JQK3L4V.js.map} +0 -0
- /package/dist/{chunk-Z4D3YGAB.js.map → chunk-4ZKNC6A6.js.map} +0 -0
- /package/dist/{chunk-ONB627HU.js.map → chunk-55LX6FSX.js.map} +0 -0
- /package/dist/{chunk-QMZ5A6FQ.js.map → chunk-56IIVAEO.js.map} +0 -0
- /package/dist/{chunk-FHHYCBBP.js.map → chunk-5DRROK5W.js.map} +0 -0
- /package/dist/{chunk-GTNRMJYH.js.map → chunk-5GQEU4DN.js.map} +0 -0
- /package/dist/{chunk-YQQPNXNO.js.map → chunk-6L3DKWRY.js.map} +0 -0
- /package/dist/{chunk-M6QA2KK2.js.map → chunk-6M2I3DKF.js.map} +0 -0
- /package/dist/{chunk-FTCGEUOY.js.map → chunk-6R6Q3MRN.js.map} +0 -0
- /package/dist/{chunk-ZUDAK436.js.map → chunk-6UBZ6I5Z.js.map} +0 -0
- /package/dist/{chunk-7U6AB7DZ.js.map → chunk-AKKRXT23.js.map} +0 -0
- /package/dist/{chunk-OWLZONGX.js.map → chunk-BLBAQRBM.js.map} +0 -0
- /package/dist/{chunk-QBOQI6PG.js.map → chunk-BN4HRYAZ.js.map} +0 -0
- /package/dist/{chunk-QVGEVZ5F.js.map → chunk-BQ6DHN4I.js.map} +0 -0
- /package/dist/{chunk-GP54LU5N.js.map → chunk-BYFXLDVV.js.map} +0 -0
- /package/dist/{chunk-QRHEAZ2Q.js.map → chunk-CUZLNGD5.js.map} +0 -0
- /package/dist/{chunk-YXIVUWDU.js.map → chunk-DGBIHDVK.js.map} +0 -0
- /package/dist/{chunk-QZJEYZ4I.js.map → chunk-DZAF24PG.js.map} +0 -0
- /package/dist/{chunk-TMR64XPL.js.map → chunk-EZNTORXE.js.map} +0 -0
- /package/dist/{chunk-JAMDDLIM.js.map → chunk-FMNU7IUG.js.map} +0 -0
- /package/dist/{as/index.js.map → chunk-GJW4HX2O.js.map} +0 -0
- /package/dist/{chunk-7BIJS6II.js.map → chunk-GP3UWP22.js.map} +0 -0
- /package/dist/{chunk-JIHH26WQ.js.map → chunk-HFUAFR6B.js.map} +0 -0
- /package/dist/{chunk-RWW3I3PO.js.map → chunk-ISRKW4YN.js.map} +0 -0
- /package/dist/{chunk-P4NUJVWL.js.map → chunk-IXNCZTWA.js.map} +0 -0
- /package/dist/{chunk-YFFEF6HR.js.map → chunk-JIDLU57U.js.map} +0 -0
- /package/dist/{chunk-PTT2NB46.js.map → chunk-JYJFGD2H.js.map} +0 -0
- /package/dist/{chunk-3OWYOECI.js.map → chunk-JYV4JJV2.js.map} +0 -0
- /package/dist/{chunk-OGVE4IJW.js.map → chunk-KBPU5M2E.js.map} +0 -0
- /package/dist/{chunk-UTEATWHO.js.map → chunk-KW42W6SV.js.map} +0 -0
- /package/dist/{chunk-UVBHM7AK.js.map → chunk-MANUDU7I.js.map} +0 -0
- /package/dist/{chunk-K7BADAOS.js.map → chunk-NEX7JCMO.js.map} +0 -0
- /package/dist/{chunk-5HSSTOOG.js.map → chunk-NFZGZ4AK.js.map} +0 -0
- /package/dist/{chunk-S4YERMGJ.js.map → chunk-OBPVWOSQ.js.map} +0 -0
- /package/dist/{chunk-OHV6T5JB.js.map → chunk-OLIWCCFM.js.map} +0 -0
- /package/dist/{chunk-2CRZOVDI.js.map → chunk-OLSARBZU.js.map} +0 -0
- /package/dist/{chunk-7LP7FFJ2.js.map → chunk-QD46HPZG.js.map} +0 -0
- /package/dist/{chunk-G4MFQXYX.js.map → chunk-QJNCB5SK.js.map} +0 -0
- /package/dist/{chunk-GEEJPID6.js.map → chunk-RZPOZPZU.js.map} +0 -0
- /package/dist/{chunk-YCAJDK4O.js.map → chunk-SGQ4N5FS.js.map} +0 -0
- /package/dist/{chunk-522MBPE5.js.map → chunk-SHEEBRZ4.js.map} +0 -0
- /package/dist/{chunk-YWZEDG7F.js.map → chunk-SHYIA73K.js.map} +0 -0
- /package/dist/{chunk-K4BWPNJO.js.map → chunk-TE6LH6J2.js.map} +0 -0
- /package/dist/{chunk-SBOHNJUD.js.map → chunk-V6UQZA2H.js.map} +0 -0
- /package/dist/{chunk-SC4JLMZI.js.map → chunk-VH6SOCXH.js.map} +0 -0
- /package/dist/{chunk-WQN5SM7P.js.map → chunk-W3G5REIU.js.map} +0 -0
- /package/dist/{chunk-OMSKGLYA.js.map → chunk-WO4T4OD5.js.map} +0 -0
- /package/dist/{chunk-6RPWILRH.js.map → chunk-WZ3NCMK6.js.map} +0 -0
- /package/dist/{chunk-BAAUFCJK.js.map → chunk-X4MVWPHV.js.map} +0 -0
- /package/dist/{chunk-R2N37AA6.js.map → chunk-XIDQKFZF.js.map} +0 -0
- /package/dist/{chunk-OWOT7CFC.js.map → chunk-Y6B6HVKC.js.map} +0 -0
- /package/dist/{chunk-5ATANZSW.js.map → chunk-Y6VZQGGH.js.map} +0 -0
- /package/dist/{chunk-YZNKFYDC.js.map → chunk-ZFUFAHZ3.js.map} +0 -0
- /package/dist/{classified-marker-52P3D72W.js.map → classified-marker-EOOSMWFC.js.map} +0 -0
- /package/dist/{at/index.js.map → collection-facade-TTRF5NFJ.js.map} +0 -0
- /package/dist/{by/index.js.map → computed-AB45PS4V.js.map} +0 -0
- /package/dist/{in → cover}/index.js.map +0 -0
- /package/dist/{on → custody}/index.js.map +0 -0
- /package/dist/{dead-filter-JXVCKS6W.js.map → dead-filter-6DYY7S64.js.map} +0 -0
- /package/dist/{chunk-2YELV6TV.js.map → derive-IGGVSUPH.js.map} +0 -0
- /package/dist/{ui → directory}/index.js.map +0 -0
- /package/dist/{dispatch-SMXUO7W5.js.map → dispatch-RPTLK7LJ.js.map} +0 -0
- /package/dist/{collection-facade-XKCFHSLR.js.map → enclave-CLJVSDFG.js.map} +0 -0
- /package/dist/{computed-33DRJDOC.js.map → executor-IEBLTBCW.js.map} +0 -0
- /package/dist/{cover-5BSNJREH.js.map → executor-RM7XWQDU.js.map} +0 -0
- /package/dist/{delegation-WWZPEDK2.js.map → executor-XZYM4KHT.js.map} +0 -0
- /package/dist/{derive-CWWFEQ4N.js.map → export-accessible-24XCCD3A.js.map} +0 -0
- /package/dist/{enclave-I5H3GINP.js.map → extract-partition-H2TPEEOF.js.map} +0 -0
- /package/dist/{fanout-sidecar-WWXVHHUH.js.map → fanout-sidecar-TV7CXAJ6.js.map} +0 -0
- /package/dist/{executor-FCJEH3FU.js.map → find-OZMTRIK3.js.map} +0 -0
- /package/dist/{with → introspection}/index.js.map +0 -0
- /package/dist/{executor-OHET7TF7.js.map → issue-55HJE7JF.js.map} +0 -0
- /package/dist/{executor-SHYLIBOM.js.map → ledger-XY6NP3J2.js.map} +0 -0
- /package/dist/{export-accessible-FBL6TDSK.js.map → liberate-LXOJ2EMB.js.map} +0 -0
- /package/dist/{extract-partition-ZYIRYMTI.js.map → link-set-POQB7BU5.js.map} +0 -0
- /package/dist/{find-LEBUXVL7.js.map → money/index.js.map} +0 -0
- /package/dist/{issue-F76PAGIR.js.map → noydb-KXS35UJS.js.map} +0 -0
- /package/dist/{ledger-M2BKCNVS.js.map → policy/index.js.map} +0 -0
- /package/dist/{post-register-XIAHB6KF.js.map → post-register-URQANI3B.js.map} +0 -0
- /package/dist/{liberate-ZP7UB57K.js.map → register-5W6CG4RM.js.map} +0 -0
- /package/dist/{link-set-ZU4E5J5S.js.map → registry-7Y5WF7GS.js.map} +0 -0
- /package/dist/{noydb-BNDGEK5X.js.map → registry-BWD2ED52.js.map} +0 -0
- /package/dist/{policy-IY2YEA3A.js.map → registry-MCSGBZXI.js.map} +0 -0
- /package/dist/{register-HB4TQZSV.js.map → registry-UJFP3NWF.js.map} +0 -0
- /package/dist/{registry-6BMBFEXT.js.map → request-withdrawal-IWYDM4SO.js.map} +0 -0
- /package/dist/{reveal-VWXRV2XU.js.map → reveal-BXZGWIOP.js.map} +0 -0
- /package/dist/{registry-7CZWF3EQ.js.map → revoke-TINYPHYY.js.map} +0 -0
- /package/dist/{registry-JOFO7RAH.js.map → schema-update/index.js.map} +0 -0
- /package/dist/{registry-VW6P6A3J.js.map → search/index.js.map} +0 -0
- /package/dist/{seed-CDBFOTIK.js.map → seed-F7YYQTRC.js.map} +0 -0
- /package/dist/{request-withdrawal-UN3TRHWI.js.map → sequence/index.js.map} +0 -0
- /package/dist/{revoke-OLO2OVR7.js.map → signer-WMZKCNKC.js.map} +0 -0
- /package/dist/{signer-MGGKPYAN.js.map → stale-JOE7GBAE.js.map} +0 -0
- /package/dist/{stale-NBROTA66.js.map → storage-B3WBKXKT.js.map} +0 -0
- /package/dist/{storage-3R37QZLA.js.map → store/index.js.map} +0 -0
- /package/dist/{store-coordination-provider-P3IU5JHD.js.map → store-coordination-provider-5LX2UFU2.js.map} +0 -0
- /package/dist/{verify-5X37OXRY.js.map → verify-7XWHJWUN.js.map} +0 -0
- /package/dist/{withdraw-accessible-Q2EMATCU.js.map → walk-6OHAWGBS.js.map} +0 -0
- /package/dist/with-lookup/{aggregate → reduce}/canonical-key.d.ts +0 -0
package/dist/index.js
CHANGED
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
UserApi
|
|
3
|
-
} from "./chunk-TNJVDG2B.js";
|
|
4
|
-
import {
|
|
5
|
-
DEFAULT_FRESHNESS_MS,
|
|
6
|
-
PERSONAL_POLICY,
|
|
7
|
-
STRICT_POLICY,
|
|
8
|
-
checkGate,
|
|
9
|
-
describeGate,
|
|
10
|
-
mergePolicy
|
|
11
|
-
} from "./chunk-JAMDDLIM.js";
|
|
12
1
|
import {
|
|
13
2
|
Collection,
|
|
14
3
|
ELEVATION_AUDIT_COLLECTION,
|
|
@@ -20,10 +9,6 @@ import {
|
|
|
20
9
|
RefScopeError,
|
|
21
10
|
Vault,
|
|
22
11
|
createNoydb,
|
|
23
|
-
describeAllUsersAuth,
|
|
24
|
-
describeAuthConfig,
|
|
25
|
-
describeUserAuth,
|
|
26
|
-
diagramAuthConfig,
|
|
27
12
|
isRefArray,
|
|
28
13
|
isViaFieldSpec,
|
|
29
14
|
memoryStore,
|
|
@@ -31,190 +16,222 @@ import {
|
|
|
31
16
|
refArray,
|
|
32
17
|
via,
|
|
33
18
|
withArchive
|
|
34
|
-
} from "./chunk-
|
|
35
|
-
import
|
|
36
|
-
META_COLLECTION,
|
|
37
|
-
POLICY_RECORD_ID,
|
|
38
|
-
loadVaultPolicy,
|
|
39
|
-
saveVaultPolicy
|
|
40
|
-
} from "./chunk-QMZ5A6FQ.js";
|
|
41
|
-
import {
|
|
42
|
-
DELEGATIONS_COLLECTION,
|
|
43
|
-
issueDelegation,
|
|
44
|
-
loadActiveDelegations,
|
|
45
|
-
revokeDelegation
|
|
46
|
-
} from "./chunk-ILM6X6CP.js";
|
|
47
|
-
import "./chunk-VYYM3MEN.js";
|
|
48
|
-
import {
|
|
49
|
-
COVER_FIELDS,
|
|
50
|
-
DEFAULT_COVER_SCHEMA,
|
|
51
|
-
resolveSchema
|
|
52
|
-
} from "./chunk-QRHEAZ2Q.js";
|
|
53
|
-
import {
|
|
54
|
-
NO_SEQUENCE,
|
|
55
|
-
SequenceStore,
|
|
56
|
-
compileSequenceFormat,
|
|
57
|
-
resolveSequenceKey,
|
|
58
|
-
withSequence
|
|
59
|
-
} from "./chunk-X3MWEFPT.js";
|
|
19
|
+
} from "./chunk-XOBHRD2M.js";
|
|
20
|
+
import "./chunk-NJ4DYYO5.js";
|
|
60
21
|
import {
|
|
61
22
|
persistSchemaIfNeeded
|
|
62
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-FO6RNKKW.js";
|
|
63
24
|
import {
|
|
64
25
|
LinkEndpointError
|
|
65
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-HFUAFR6B.js";
|
|
66
27
|
import {
|
|
67
28
|
LinkIntegrityError,
|
|
68
29
|
isLinkCollectionName
|
|
69
|
-
} from "./chunk-
|
|
70
|
-
import "./chunk-
|
|
71
|
-
import "./chunk-XUFAFHQM.js";
|
|
72
|
-
import "./chunk-M6QA2KK2.js";
|
|
73
|
-
import {
|
|
74
|
-
NO_SEARCH,
|
|
75
|
-
tokenize,
|
|
76
|
-
withSearch
|
|
77
|
-
} from "./chunk-HAPY7WFP.js";
|
|
78
|
-
import {
|
|
79
|
-
derivePersistedSchema,
|
|
80
|
-
isZodSchema
|
|
81
|
-
} from "./chunk-SEU6QHH4.js";
|
|
30
|
+
} from "./chunk-4JQK3L4V.js";
|
|
31
|
+
import "./chunk-SHEEBRZ4.js";
|
|
82
32
|
import {
|
|
83
33
|
ComputedFieldError,
|
|
84
34
|
evalComputedFields
|
|
85
|
-
} from "./chunk-
|
|
86
|
-
import "./chunk-GYGLAVCX.js";
|
|
35
|
+
} from "./chunk-5DRROK5W.js";
|
|
87
36
|
import {
|
|
88
37
|
WithdrawalRequestError,
|
|
89
38
|
approveWithdrawal,
|
|
90
39
|
listWithdrawalRequests,
|
|
91
40
|
rejectWithdrawal,
|
|
92
41
|
requestWithdrawal
|
|
93
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-JYV4JJV2.js";
|
|
43
|
+
import "./chunk-6M2I3DKF.js";
|
|
44
|
+
import "./chunk-CCDP6EPB.js";
|
|
45
|
+
import {
|
|
46
|
+
COVER_FIELDS,
|
|
47
|
+
DEFAULT_COVER_SCHEMA,
|
|
48
|
+
resolveSchema
|
|
49
|
+
} from "./chunk-CUZLNGD5.js";
|
|
50
|
+
import {
|
|
51
|
+
additiveOnly,
|
|
52
|
+
blindUpdate,
|
|
53
|
+
coordinatedCutover,
|
|
54
|
+
lockSchema
|
|
55
|
+
} from "./chunk-E23UGFVC.js";
|
|
56
|
+
import "./chunk-6LJY7X5A.js";
|
|
57
|
+
import "./chunk-DSDXAKIP.js";
|
|
58
|
+
import {
|
|
59
|
+
DEFAULT_FRESHNESS_MS,
|
|
60
|
+
PERSONAL_POLICY,
|
|
61
|
+
STRICT_POLICY,
|
|
62
|
+
checkGate,
|
|
63
|
+
describeGate,
|
|
64
|
+
mergePolicy
|
|
65
|
+
} from "./chunk-FMNU7IUG.js";
|
|
66
|
+
import "./chunk-GJW4HX2O.js";
|
|
67
|
+
import {
|
|
68
|
+
UserApi
|
|
69
|
+
} from "./chunk-3XKESW5E.js";
|
|
70
|
+
import "./chunk-GYGLAVCX.js";
|
|
71
|
+
import "./chunk-6R6Q3MRN.js";
|
|
72
|
+
import "./chunk-BLBAQRBM.js";
|
|
94
73
|
import {
|
|
95
74
|
decryptExtractedPartition,
|
|
75
|
+
diffVault,
|
|
96
76
|
withCargo
|
|
97
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-PT4XLP6I.js";
|
|
98
78
|
import {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
withCustody
|
|
103
|
-
} from "./chunk-L2CAWCQL.js";
|
|
104
|
-
import "./chunk-GP54LU5N.js";
|
|
79
|
+
NO_CARGO
|
|
80
|
+
} from "./chunk-TG634KCO.js";
|
|
81
|
+
import "./chunk-BYFXLDVV.js";
|
|
105
82
|
import {
|
|
106
|
-
DEED_RECORD_ID,
|
|
107
83
|
createDeedOwner,
|
|
108
84
|
isDeedVault,
|
|
109
85
|
liberateVault,
|
|
110
86
|
loadDeedMarker
|
|
111
|
-
} from "./chunk-
|
|
87
|
+
} from "./chunk-TIVK6PRK.js";
|
|
112
88
|
import {
|
|
113
89
|
MemoryRecipientSealer,
|
|
114
90
|
MemorySealingKeyProvider,
|
|
115
|
-
SEALED_SECRET_RECORD_ID,
|
|
116
91
|
aesGcmOpen,
|
|
117
|
-
loadSealedSecret,
|
|
118
92
|
parseRsaOaepTlv,
|
|
119
|
-
parseSealedEnvelope,
|
|
120
|
-
saveSealedSecret,
|
|
121
93
|
sealRsaOaepTlv
|
|
122
|
-
} from "./chunk-
|
|
94
|
+
} from "./chunk-OLIWCCFM.js";
|
|
123
95
|
import {
|
|
124
|
-
|
|
125
|
-
} from "./chunk-
|
|
96
|
+
withdrawAccessibleData
|
|
97
|
+
} from "./chunk-TE6LH6J2.js";
|
|
126
98
|
import {
|
|
127
|
-
|
|
128
|
-
} from "./chunk-
|
|
99
|
+
exportAccessibleData
|
|
100
|
+
} from "./chunk-WO4T4OD5.js";
|
|
101
|
+
import {
|
|
102
|
+
routeStore,
|
|
103
|
+
withCache,
|
|
104
|
+
withCircuitBreaker,
|
|
105
|
+
withHealthCheck,
|
|
106
|
+
withLogging,
|
|
107
|
+
withMetrics,
|
|
108
|
+
withRetry,
|
|
109
|
+
wrapStore
|
|
110
|
+
} from "./chunk-VSRSQ2CR.js";
|
|
111
|
+
import {
|
|
112
|
+
applyListProjection
|
|
113
|
+
} from "./chunk-VG2ZSFYD.js";
|
|
114
|
+
import "./chunk-VYYM3MEN.js";
|
|
115
|
+
import {
|
|
116
|
+
derivePersistedSchema,
|
|
117
|
+
isZodSchema
|
|
118
|
+
} from "./chunk-6ZNSB3H6.js";
|
|
119
|
+
import "./chunk-Y2NBBT6K.js";
|
|
129
120
|
import {
|
|
130
121
|
SCHEMAS_COLLECTION,
|
|
131
122
|
loadPersistedSchema,
|
|
132
123
|
savePersistedSchema
|
|
133
|
-
} from "./chunk-
|
|
124
|
+
} from "./chunk-OBPVWOSQ.js";
|
|
134
125
|
import {
|
|
135
|
-
|
|
136
|
-
|
|
126
|
+
MoneyCurrencyError,
|
|
127
|
+
MoneyPrecisionError,
|
|
128
|
+
MoneyUnsupportedError,
|
|
129
|
+
allocate,
|
|
130
|
+
asMoney,
|
|
131
|
+
isMoneyDescriptor,
|
|
132
|
+
isMoneyString,
|
|
133
|
+
money,
|
|
134
|
+
moneyNumber,
|
|
135
|
+
mulRate,
|
|
136
|
+
scaleForCurrency
|
|
137
|
+
} from "./chunk-SGDPRCC4.js";
|
|
137
138
|
import {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
import "./chunk-
|
|
139
|
+
withDerivation,
|
|
140
|
+
withRollup
|
|
141
|
+
} from "./chunk-NYEFP7DY.js";
|
|
142
|
+
import "./chunk-AT2JJEKJ.js";
|
|
143
|
+
import "./chunk-4ZKNC6A6.js";
|
|
144
|
+
import "./chunk-MHMLXJ3I.js";
|
|
145
|
+
import {
|
|
146
|
+
withMaterializedView
|
|
147
|
+
} from "./chunk-MXUT7FTE.js";
|
|
148
|
+
import "./chunk-FRMW23UK.js";
|
|
149
|
+
import {
|
|
150
|
+
buildLookupSnapshot
|
|
151
|
+
} from "./chunk-GP3UWP22.js";
|
|
152
|
+
import "./chunk-3HUYRN24.js";
|
|
153
|
+
import "./chunk-IMRB2C4O.js";
|
|
154
|
+
import {
|
|
155
|
+
withOverlayedView
|
|
156
|
+
} from "./chunk-MSMJJB4J.js";
|
|
157
|
+
import "./chunk-ZTLOXFPB.js";
|
|
158
|
+
import "./chunk-IG6KUWBX.js";
|
|
159
|
+
import "./chunk-EP5L47XV.js";
|
|
142
160
|
import {
|
|
143
161
|
isDiscriminant
|
|
144
162
|
} from "./chunk-PY4KJPYU.js";
|
|
145
|
-
import "./chunk-
|
|
163
|
+
import "./chunk-5GQEU4DN.js";
|
|
146
164
|
import {
|
|
147
165
|
classified,
|
|
148
166
|
luhnCheck
|
|
149
|
-
} from "./chunk-
|
|
167
|
+
} from "./chunk-6L3DKWRY.js";
|
|
150
168
|
import {
|
|
151
169
|
ClassifiedNeverStoredError,
|
|
152
170
|
ClassifiedValidationError,
|
|
153
171
|
isClassifiedFieldSpec,
|
|
154
172
|
isClassifiedGroup,
|
|
155
173
|
resolveClassifiedFields
|
|
156
|
-
} from "./chunk-
|
|
157
|
-
import "./chunk-
|
|
158
|
-
import "./chunk-
|
|
159
|
-
import "./chunk-QBOQI6PG.js";
|
|
160
|
-
import "./chunk-7ICV4ASA.js";
|
|
174
|
+
} from "./chunk-ZFUFAHZ3.js";
|
|
175
|
+
import "./chunk-BN4HRYAZ.js";
|
|
176
|
+
import "./chunk-N5PLUFH2.js";
|
|
161
177
|
import "./chunk-GHVIKOHT.js";
|
|
162
178
|
import {
|
|
163
179
|
immutableGuard,
|
|
164
180
|
transitionGuard,
|
|
165
181
|
withGuard
|
|
166
|
-
} from "./chunk-
|
|
167
|
-
import "./chunk-
|
|
182
|
+
} from "./chunk-RO5NM6UI.js";
|
|
183
|
+
import "./chunk-FQ5CHJR7.js";
|
|
168
184
|
import "./chunk-JK733I5V.js";
|
|
169
|
-
import "./chunk-
|
|
185
|
+
import "./chunk-W66AM5IB.js";
|
|
170
186
|
import {
|
|
171
187
|
CollectionFrame,
|
|
172
188
|
VaultFrame
|
|
173
|
-
} from "./chunk-
|
|
189
|
+
} from "./chunk-55LX6FSX.js";
|
|
190
|
+
import "./chunk-SMY5X46Z.js";
|
|
191
|
+
import "./chunk-DZFQVICS.js";
|
|
174
192
|
import {
|
|
175
193
|
TxCollection,
|
|
176
194
|
TxContext,
|
|
177
195
|
TxVault,
|
|
178
196
|
runTransaction
|
|
179
|
-
} from "./chunk-
|
|
197
|
+
} from "./chunk-BQ6DHN4I.js";
|
|
198
|
+
import "./chunk-5D2ALSM5.js";
|
|
180
199
|
import {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
import "./chunk-Z4D3YGAB.js";
|
|
186
|
-
import "./chunk-YJ3TREAC.js";
|
|
200
|
+
NO_SEARCH,
|
|
201
|
+
tokenize,
|
|
202
|
+
withSearch
|
|
203
|
+
} from "./chunk-QADFHRQM.js";
|
|
187
204
|
import {
|
|
188
|
-
|
|
189
|
-
} from "./chunk-
|
|
190
|
-
import "./chunk-YZN6NRTR.js";
|
|
191
|
-
import "./chunk-TNATF3HB.js";
|
|
192
|
-
import "./chunk-CKUYQO2P.js";
|
|
205
|
+
fuseRetrieval
|
|
206
|
+
} from "./chunk-AURFOK3D.js";
|
|
193
207
|
import {
|
|
194
|
-
|
|
195
|
-
|
|
208
|
+
NO_SEQUENCE,
|
|
209
|
+
SequenceStore,
|
|
210
|
+
compileSequenceFormat,
|
|
211
|
+
resolveSequenceKey,
|
|
212
|
+
withSequence
|
|
213
|
+
} from "./chunk-EBKCYQ2D.js";
|
|
196
214
|
import {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
215
|
+
CustodyApi,
|
|
216
|
+
NO_CUSTODY,
|
|
217
|
+
withCustody
|
|
218
|
+
} from "./chunk-SKM35Y4Q.js";
|
|
201
219
|
import {
|
|
202
220
|
DEFAULT_CROSS_JOIN_MAX_ROWS,
|
|
203
221
|
Query,
|
|
204
222
|
ScanBuilder,
|
|
205
223
|
buildLiveQuery,
|
|
206
224
|
executePlan
|
|
207
|
-
} from "./chunk-
|
|
225
|
+
} from "./chunk-WBKZUO5V.js";
|
|
208
226
|
import {
|
|
209
227
|
DEFAULT_JOIN_MAX_ROWS,
|
|
210
|
-
applyJoins
|
|
211
|
-
|
|
212
|
-
} from "./chunk-SBOHNJUD.js";
|
|
228
|
+
applyJoins
|
|
229
|
+
} from "./chunk-V6UQZA2H.js";
|
|
213
230
|
import {
|
|
214
231
|
importExternalObjects,
|
|
215
232
|
memoryObjectProjection
|
|
216
233
|
} from "./chunk-4Q6HSHHL.js";
|
|
217
|
-
import "./chunk-
|
|
234
|
+
import "./chunk-IF6WNGAK.js";
|
|
218
235
|
import {
|
|
219
236
|
BLOB_CHUNKS_COLLECTION,
|
|
220
237
|
BLOB_COLLECTION,
|
|
@@ -231,8 +248,8 @@ import {
|
|
|
231
248
|
getIntent,
|
|
232
249
|
isPreCompressed,
|
|
233
250
|
sweepBlobIntents
|
|
234
|
-
} from "./chunk-
|
|
235
|
-
import "./chunk-
|
|
251
|
+
} from "./chunk-NQSO4UAH.js";
|
|
252
|
+
import "./chunk-L3YYLT4E.js";
|
|
236
253
|
import {
|
|
237
254
|
CollectionIndexes
|
|
238
255
|
} from "./chunk-KPZS5QAQ.js";
|
|
@@ -244,25 +261,10 @@ import {
|
|
|
244
261
|
estimateRecordBytes,
|
|
245
262
|
parseBytes
|
|
246
263
|
} from "./chunk-NO272T7Q.js";
|
|
247
|
-
import
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
GroupedAggregation,
|
|
252
|
-
GroupedQuery,
|
|
253
|
-
GroupedQueryN,
|
|
254
|
-
avg,
|
|
255
|
-
count,
|
|
256
|
-
groupAndReduce,
|
|
257
|
-
max,
|
|
258
|
-
min,
|
|
259
|
-
moneyMax,
|
|
260
|
-
moneyMin,
|
|
261
|
-
moneySum,
|
|
262
|
-
reduceRecords,
|
|
263
|
-
reducerBuilder,
|
|
264
|
-
sum
|
|
265
|
-
} from "./chunk-QMMOMBH6.js";
|
|
264
|
+
import "./chunk-KRCBZYTZ.js";
|
|
265
|
+
import "./chunk-XZHEOSQ2.js";
|
|
266
|
+
import "./chunk-YMUFFJCO.js";
|
|
267
|
+
import "./chunk-CADUYBQD.js";
|
|
266
268
|
import {
|
|
267
269
|
evaluateClause,
|
|
268
270
|
evaluateFieldClause,
|
|
@@ -272,12 +274,13 @@ import {
|
|
|
272
274
|
mergeCrdtStates,
|
|
273
275
|
resolveCrdtSnapshot
|
|
274
276
|
} from "./chunk-4GPE63GU.js";
|
|
277
|
+
import "./chunk-PVEWA2DU.js";
|
|
275
278
|
import {
|
|
276
279
|
createBundleStore,
|
|
277
280
|
createPodStore,
|
|
278
281
|
wrapBundleStore,
|
|
279
282
|
wrapPodStore
|
|
280
|
-
} from "./chunk-
|
|
283
|
+
} from "./chunk-Y6B6HVKC.js";
|
|
281
284
|
import {
|
|
282
285
|
NOYDB_BUNDLE_FORMAT_VERSION,
|
|
283
286
|
NOYDB_BUNDLE_MAGIC,
|
|
@@ -288,10 +291,9 @@ import {
|
|
|
288
291
|
readPod,
|
|
289
292
|
readPodCover,
|
|
290
293
|
readPodHeader,
|
|
291
|
-
resetBrotliSupportCache,
|
|
292
294
|
writeNoydbBundle,
|
|
293
295
|
writePod
|
|
294
|
-
} from "./chunk-
|
|
296
|
+
} from "./chunk-SGQ4N5FS.js";
|
|
295
297
|
import {
|
|
296
298
|
COVER_RECORD_ID,
|
|
297
299
|
isCover,
|
|
@@ -299,20 +301,21 @@ import {
|
|
|
299
301
|
readCover,
|
|
300
302
|
saveCover,
|
|
301
303
|
validateCoverInput
|
|
302
|
-
} from "./chunk-
|
|
304
|
+
} from "./chunk-JIDLU57U.js";
|
|
303
305
|
import {
|
|
304
306
|
CONSENT_AUDIT_COLLECTION
|
|
305
|
-
} from "./chunk-
|
|
306
|
-
import "./chunk-
|
|
307
|
+
} from "./chunk-XIDQKFZF.js";
|
|
308
|
+
import "./chunk-PEOZ34EM.js";
|
|
309
|
+
import "./chunk-OLSARBZU.js";
|
|
307
310
|
import {
|
|
308
311
|
dictKey,
|
|
309
312
|
staticDict
|
|
310
|
-
} from "./chunk-
|
|
313
|
+
} from "./chunk-W3G5REIU.js";
|
|
311
314
|
import {
|
|
312
315
|
DICT_COLLECTION_PREFIX,
|
|
313
316
|
LookupHandle,
|
|
314
317
|
dictCollectionName
|
|
315
|
-
} from "./chunk-
|
|
318
|
+
} from "./chunk-NEX7JCMO.js";
|
|
316
319
|
import {
|
|
317
320
|
applyI18nLocale,
|
|
318
321
|
enforceScript,
|
|
@@ -327,10 +330,10 @@ import {
|
|
|
327
330
|
resolvePolicy,
|
|
328
331
|
setAtPathInPlace,
|
|
329
332
|
validateI18nTextValue
|
|
330
|
-
} from "./chunk-
|
|
333
|
+
} from "./chunk-UADPR6F4.js";
|
|
331
334
|
import {
|
|
332
335
|
installViaBinder
|
|
333
|
-
} from "./chunk-
|
|
336
|
+
} from "./chunk-6UBZ6I5Z.js";
|
|
334
337
|
import {
|
|
335
338
|
credentialStatus,
|
|
336
339
|
deleteCredential,
|
|
@@ -338,27 +341,55 @@ import {
|
|
|
338
341
|
listCredentials,
|
|
339
342
|
putCredential,
|
|
340
343
|
withTeam
|
|
341
|
-
} from "./chunk-
|
|
344
|
+
} from "./chunk-SHYIA73K.js";
|
|
342
345
|
import {
|
|
343
|
-
MAGIC_LINK_CONTENT_INFO_PREFIX,
|
|
344
346
|
MAGIC_LINK_GRANTS_COLLECTION,
|
|
345
|
-
MAGIC_LINK_KEK_INFO_PREFIX,
|
|
346
347
|
NO_TEAM,
|
|
348
|
+
burnPaperRecoveryEntry,
|
|
347
349
|
deriveMagicLinkContentKey,
|
|
350
|
+
describeAllUsersAuth,
|
|
351
|
+
describeAuthConfig,
|
|
352
|
+
describeUserAuth,
|
|
353
|
+
diagramAuthConfig,
|
|
348
354
|
enrollAuthenticator,
|
|
349
355
|
findAuthenticator,
|
|
350
356
|
isMagicLinkGrantExpired,
|
|
351
357
|
listMagicLinkGrants,
|
|
358
|
+
loadPaperRecoveryEntries,
|
|
352
359
|
magicLinkGrantRecordId,
|
|
360
|
+
mintPaperRecoveryEntry,
|
|
361
|
+
mintWrappedDeksBlob,
|
|
353
362
|
readMagicLinkGrantRecord,
|
|
354
|
-
recoverSecret,
|
|
355
363
|
recoverUser,
|
|
356
364
|
removeAuthenticator,
|
|
357
365
|
revokeMagicLinkGrant,
|
|
358
366
|
rotateSecret,
|
|
367
|
+
savePaperRecoveryEntries,
|
|
368
|
+
unwrapDeksFromBlob,
|
|
369
|
+
unwrapDeksFromPaperEntry,
|
|
359
370
|
unwrapMagicLinkGrant,
|
|
360
371
|
writeMagicLinkGrant
|
|
361
|
-
} from "./chunk-
|
|
372
|
+
} from "./chunk-C25JXSOR.js";
|
|
373
|
+
import {
|
|
374
|
+
META_COLLECTION,
|
|
375
|
+
POLICY_RECORD_ID,
|
|
376
|
+
loadVaultPolicy,
|
|
377
|
+
saveVaultPolicy
|
|
378
|
+
} from "./chunk-56IIVAEO.js";
|
|
379
|
+
import {
|
|
380
|
+
PresenceHandle,
|
|
381
|
+
SyncEngine,
|
|
382
|
+
SyncTransaction
|
|
383
|
+
} from "./chunk-KBPU5M2E.js";
|
|
384
|
+
import {
|
|
385
|
+
BUNDLE_STORE_POLICY,
|
|
386
|
+
INDEXED_STORE_POLICY,
|
|
387
|
+
POD_STORE_POLICY,
|
|
388
|
+
SyncScheduler
|
|
389
|
+
} from "./chunk-VQNJ7UZL.js";
|
|
390
|
+
import {
|
|
391
|
+
PERIODS_COLLECTION
|
|
392
|
+
} from "./chunk-EZNTORXE.js";
|
|
362
393
|
import {
|
|
363
394
|
SYNC_CREDENTIALS_COLLECTION,
|
|
364
395
|
WeakSecretError,
|
|
@@ -372,7 +403,7 @@ import {
|
|
|
372
403
|
listUsers,
|
|
373
404
|
listUsersWithEnvelopes,
|
|
374
405
|
validateSecret
|
|
375
|
-
} from "./chunk-
|
|
406
|
+
} from "./chunk-KPXM4WO6.js";
|
|
376
407
|
import {
|
|
377
408
|
DIRECTORY_RECORD_ID,
|
|
378
409
|
VISIBILITY_RECORD_PREFIX,
|
|
@@ -386,41 +417,9 @@ import {
|
|
|
386
417
|
readUserVisibility,
|
|
387
418
|
saveUserEnvelope,
|
|
388
419
|
visibilityRecordId
|
|
389
|
-
} from "./chunk-
|
|
390
|
-
import
|
|
391
|
-
|
|
392
|
-
hasRecoveryEnrolled,
|
|
393
|
-
loadPaperRecoveryEntries,
|
|
394
|
-
loadShamirRecoveryEntries,
|
|
395
|
-
mintPaperRecoveryEntry,
|
|
396
|
-
mintShamirRecoveryEntry,
|
|
397
|
-
mintWrappedDeksBlob,
|
|
398
|
-
savePaperRecoveryEntries,
|
|
399
|
-
saveShamirRecoveryEntries,
|
|
400
|
-
unwrapDeksFromBlob,
|
|
401
|
-
unwrapDeksFromPaperEntry,
|
|
402
|
-
unwrapDeksFromShamirEntry
|
|
403
|
-
} from "./chunk-CJVEAVYH.js";
|
|
404
|
-
import {
|
|
405
|
-
PresenceHandle,
|
|
406
|
-
SyncEngine,
|
|
407
|
-
SyncTransaction
|
|
408
|
-
} from "./chunk-OGVE4IJW.js";
|
|
409
|
-
import {
|
|
410
|
-
BUNDLE_STORE_POLICY,
|
|
411
|
-
INDEXED_STORE_POLICY,
|
|
412
|
-
POD_STORE_POLICY,
|
|
413
|
-
SyncScheduler
|
|
414
|
-
} from "./chunk-VQNJ7UZL.js";
|
|
415
|
-
import {
|
|
416
|
-
PERIODS_COLLECTION
|
|
417
|
-
} from "./chunk-TMR64XPL.js";
|
|
418
|
-
import {
|
|
419
|
-
assertTierAccess,
|
|
420
|
-
dekKey,
|
|
421
|
-
effectiveClearance
|
|
422
|
-
} from "./chunk-LC7DSMHR.js";
|
|
423
|
-
import "./chunk-P4NUJVWL.js";
|
|
420
|
+
} from "./chunk-WZ3NCMK6.js";
|
|
421
|
+
import "./chunk-PTHKZWEH.js";
|
|
422
|
+
import "./chunk-IXNCZTWA.js";
|
|
424
423
|
import {
|
|
425
424
|
PolicyEnforcer,
|
|
426
425
|
activeSessionCount,
|
|
@@ -435,7 +434,8 @@ import {
|
|
|
435
434
|
revokeAllSessions,
|
|
436
435
|
revokeSession,
|
|
437
436
|
validateSessionPolicy
|
|
438
|
-
} from "./chunk-
|
|
437
|
+
} from "./chunk-X4MVWPHV.js";
|
|
438
|
+
import "./chunk-VKQCVU2Z.js";
|
|
439
439
|
import {
|
|
440
440
|
generateULID,
|
|
441
441
|
isULID
|
|
@@ -443,7 +443,8 @@ import {
|
|
|
443
443
|
import {
|
|
444
444
|
CollectionInstant,
|
|
445
445
|
VaultInstant
|
|
446
|
-
} from "./chunk-
|
|
446
|
+
} from "./chunk-MANUDU7I.js";
|
|
447
|
+
import "./chunk-AFHQATY4.js";
|
|
447
448
|
import {
|
|
448
449
|
diff,
|
|
449
450
|
formatDiff
|
|
@@ -452,12 +453,12 @@ import {
|
|
|
452
453
|
LedgerStore,
|
|
453
454
|
applyPatch,
|
|
454
455
|
computePatch
|
|
455
|
-
} from "./chunk-
|
|
456
|
+
} from "./chunk-Y6VZQGGH.js";
|
|
456
457
|
import {
|
|
457
458
|
LEDGER_COLLECTION,
|
|
458
459
|
LEDGER_DELTAS_COLLECTION
|
|
459
460
|
} from "./chunk-I7FD46FF.js";
|
|
460
|
-
import "./chunk-
|
|
461
|
+
import "./chunk-JYJFGD2H.js";
|
|
461
462
|
import {
|
|
462
463
|
canonicalJson,
|
|
463
464
|
envelopePayloadHash,
|
|
@@ -465,17 +466,17 @@ import {
|
|
|
465
466
|
paddedIndex,
|
|
466
467
|
parseIndex,
|
|
467
468
|
sha256Hex
|
|
468
|
-
} from "./chunk-
|
|
469
|
-
import "./chunk-
|
|
470
|
-
import "./chunk-
|
|
469
|
+
} from "./chunk-ISRKW4YN.js";
|
|
470
|
+
import "./chunk-KFRPNHWR.js";
|
|
471
|
+
import "./chunk-QD46HPZG.js";
|
|
471
472
|
import {
|
|
472
473
|
validateSchemaInput,
|
|
473
474
|
validateSchemaOutput
|
|
474
|
-
} from "./chunk-
|
|
475
|
-
import "./chunk-
|
|
476
|
-
import "./chunk-
|
|
477
|
-
import "./chunk-
|
|
478
|
-
import "./chunk-
|
|
475
|
+
} from "./chunk-RZPOZPZU.js";
|
|
476
|
+
import "./chunk-VH6SOCXH.js";
|
|
477
|
+
import "./chunk-35NMVJ7I.js";
|
|
478
|
+
import "./chunk-NFZGZ4AK.js";
|
|
479
|
+
import "./chunk-QJNCB5SK.js";
|
|
479
480
|
import "./chunk-LP7BEXCT.js";
|
|
480
481
|
import {
|
|
481
482
|
base64ToBuffer,
|
|
@@ -485,7 +486,7 @@ import {
|
|
|
485
486
|
derivePresenceKey,
|
|
486
487
|
encryptBytes,
|
|
487
488
|
encryptDeterministic
|
|
488
|
-
} from "./chunk-
|
|
489
|
+
} from "./chunk-AKKRXT23.js";
|
|
489
490
|
import {
|
|
490
491
|
NOYDB_BACKUP_VERSION,
|
|
491
492
|
NOYDB_FORMAT_VERSION,
|
|
@@ -493,7 +494,7 @@ import {
|
|
|
493
494
|
NOYDB_SYNC_VERSION,
|
|
494
495
|
SealedHandle,
|
|
495
496
|
createStore
|
|
496
|
-
} from "./chunk-
|
|
497
|
+
} from "./chunk-GZACYEOB.js";
|
|
497
498
|
import {
|
|
498
499
|
AlreadyElevatedError,
|
|
499
500
|
AmendmentForbiddenError,
|
|
@@ -518,8 +519,6 @@ import {
|
|
|
518
519
|
CustodyNotEnabledError,
|
|
519
520
|
DanglingReferenceError,
|
|
520
521
|
DataResidencyError,
|
|
521
|
-
DebugPlaintextError,
|
|
522
|
-
DebugReservedFieldError,
|
|
523
522
|
DecryptionError,
|
|
524
523
|
DelegationTargetMissingError,
|
|
525
524
|
DerivationCapExceededError,
|
|
@@ -625,1807 +624,17 @@ import {
|
|
|
625
624
|
UserEnvelopeOversizedError,
|
|
626
625
|
ValidationError,
|
|
627
626
|
VaultTemplateNotFoundError
|
|
628
|
-
} from "./chunk-
|
|
627
|
+
} from "./chunk-QZWTRENR.js";
|
|
629
628
|
import "./chunk-PZ5AY32C.js";
|
|
630
629
|
|
|
631
|
-
// src/
|
|
632
|
-
function
|
|
633
|
-
if (envelope._iv !== "") {
|
|
634
|
-
throw new Error(
|
|
635
|
-
"readPlaintextRecord: envelope is encrypted (non-empty _iv) \u2014 decrypt via the vault, not this helper"
|
|
636
|
-
);
|
|
637
|
-
}
|
|
638
|
-
if (envelope._debug !== void 0) {
|
|
639
|
-
const record = {};
|
|
640
|
-
for (const [key, value] of Object.entries(envelope)) {
|
|
641
|
-
if (!key.startsWith("_")) record[key] = value;
|
|
642
|
-
}
|
|
643
|
-
return record;
|
|
644
|
-
}
|
|
645
|
-
if (!envelope._data) return null;
|
|
646
|
-
return JSON.parse(envelope._data);
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
// src/with-shape/introspection/projection.ts
|
|
650
|
-
function applyListProjection(desc, record, opts) {
|
|
651
|
-
const out = { ...record };
|
|
652
|
-
for (const f of desc.fields) {
|
|
653
|
-
if (f.classified !== void 0) {
|
|
654
|
-
const list = f.classified.list;
|
|
655
|
-
if (list === "omit") {
|
|
656
|
-
delete out[f.key];
|
|
657
|
-
continue;
|
|
658
|
-
}
|
|
659
|
-
if ("mask" in list) {
|
|
660
|
-
out[f.key] = list.mask.replace(/\$\{(\w+)\}/g, (_m, rider) => {
|
|
661
|
-
const v = record[`${f.key}_${rider}`];
|
|
662
|
-
return v === void 0 || v === null ? "\u2022" : `${v}`;
|
|
663
|
-
});
|
|
664
|
-
continue;
|
|
665
|
-
}
|
|
666
|
-
out[f.key] = record[`${f.key}_${list.rider}`];
|
|
667
|
-
continue;
|
|
668
|
-
}
|
|
669
|
-
if (opts?.sensitivity !== void 0 && (f.sensitivity === "pii" || f.sensitivity === "secret")) {
|
|
670
|
-
if (opts.sensitivity === "omit") delete out[f.key];
|
|
671
|
-
else out[f.key] = "\u2022\u2022\u2022";
|
|
672
|
-
}
|
|
673
|
-
}
|
|
674
|
-
return out;
|
|
675
|
-
}
|
|
676
|
-
|
|
677
|
-
// src/with-shape/schema-update/strategies.ts
|
|
678
|
-
function blindUpdate() {
|
|
679
|
-
return { name: "blindUpdate", onSchemaDelta: () => ({ action: "allow" }) };
|
|
680
|
-
}
|
|
681
|
-
function additiveOnly() {
|
|
682
|
-
return {
|
|
683
|
-
name: "additiveOnly",
|
|
684
|
-
onSchemaDelta(delta) {
|
|
685
|
-
if (delta.kind === "non-additive") {
|
|
686
|
-
return {
|
|
687
|
-
action: "reject",
|
|
688
|
-
error: new NonAdditiveSchemaChangeError(
|
|
689
|
-
`Non-additive schema change to "${delta.collection}" (added: [${delta.added.join(", ")}], removed: [${delta.removed.join(", ")}], changed: [${delta.changed.map((c) => c.field).join(", ")}]). Register a coordinatedCutover() strategy to migrate, or revert the change.`
|
|
690
|
-
)
|
|
691
|
-
};
|
|
692
|
-
}
|
|
693
|
-
return { action: "allow" };
|
|
694
|
-
}
|
|
695
|
-
};
|
|
696
|
-
}
|
|
697
|
-
function lockSchema(opts) {
|
|
698
|
-
const fields = opts?.fields;
|
|
699
|
-
return {
|
|
700
|
-
name: "lockSchema",
|
|
701
|
-
onSchemaDelta(delta) {
|
|
702
|
-
if (delta.kind === "none") return { action: "allow" };
|
|
703
|
-
const touched = fields ? [...delta.added, ...delta.removed, ...delta.changed.map((c) => c.field)].filter((f) => fields.includes(f)) : ["<any>"];
|
|
704
|
-
if (touched.length === 0) return { action: "allow" };
|
|
705
|
-
return {
|
|
706
|
-
action: "reject",
|
|
707
|
-
error: new SchemaLockedError(
|
|
708
|
-
`Schema for "${delta.collection}" is locked` + (fields ? ` on fields [${fields.join(", ")}] (touched: [${touched.join(", ")}])` : "") + `; the change was refused.`
|
|
709
|
-
)
|
|
710
|
-
};
|
|
711
|
-
}
|
|
712
|
-
};
|
|
713
|
-
}
|
|
714
|
-
|
|
715
|
-
// src/with-shape/schema-update/cutover.ts
|
|
716
|
-
function coordinatedCutover(opts) {
|
|
630
|
+
// src/with-commit/numbering/descriptor.ts
|
|
631
|
+
function withDeferredNumbering(opts) {
|
|
717
632
|
return {
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
}
|
|
723
|
-
return { action: "allow" };
|
|
724
|
-
}
|
|
725
|
-
};
|
|
726
|
-
}
|
|
727
|
-
|
|
728
|
-
// src/with-store/route-store.ts
|
|
729
|
-
var BLOB_CHUNKS = "_blob_chunks";
|
|
730
|
-
var BLOB_INDEX = "_blob_index";
|
|
731
|
-
var BLOB_SLOTS = "_blob_slots_";
|
|
732
|
-
var BLOB_VERSIONS = "_blob_versions_";
|
|
733
|
-
function routeStore(opts) {
|
|
734
|
-
const primary = opts.default;
|
|
735
|
-
const blobsIsSimple = opts.blobs && "get" in opts.blobs;
|
|
736
|
-
const simpleBlobStore = blobsIsSimple ? opts.blobs : void 0;
|
|
737
|
-
const tieredBlobs = !blobsIsSimple ? opts.blobs : void 0;
|
|
738
|
-
const blobThreshold = tieredBlobs?.threshold ?? 400 * 1024;
|
|
739
|
-
const allStores = /* @__PURE__ */ new Set([primary]);
|
|
740
|
-
if (simpleBlobStore) allStores.add(simpleBlobStore);
|
|
741
|
-
if (tieredBlobs?.large) allStores.add(tieredBlobs.large);
|
|
742
|
-
if (tieredBlobs?.small) allStores.add(tieredBlobs.small);
|
|
743
|
-
if (opts.age?.cold) allStores.add(opts.age.cold);
|
|
744
|
-
if (opts.routes) for (const s of Object.values(opts.routes)) allStores.add(s);
|
|
745
|
-
if (opts.vaultRoutes) for (const s of Object.values(opts.vaultRoutes)) allStores.add(s);
|
|
746
|
-
if (opts.blobRoutes) for (const s of Object.values(opts.blobRoutes)) allStores.add(s);
|
|
747
|
-
if (opts.overflow) allStores.add(opts.overflow);
|
|
748
|
-
if (opts.blobLifecycle?.archiveStore) allStores.add(opts.blobLifecycle.archiveStore);
|
|
749
|
-
const overrides = /* @__PURE__ */ new Map();
|
|
750
|
-
const suspended = /* @__PURE__ */ new Set();
|
|
751
|
-
const writeQueues = /* @__PURE__ */ new Map();
|
|
752
|
-
const NULL_STORE = {
|
|
753
|
-
name: "suspended",
|
|
754
|
-
async get() {
|
|
755
|
-
return null;
|
|
756
|
-
},
|
|
757
|
-
async put() {
|
|
758
|
-
},
|
|
759
|
-
async delete() {
|
|
760
|
-
},
|
|
761
|
-
async list() {
|
|
762
|
-
return [];
|
|
763
|
-
},
|
|
764
|
-
async loadAll() {
|
|
765
|
-
return {};
|
|
766
|
-
},
|
|
767
|
-
async saveAll() {
|
|
768
|
-
}
|
|
769
|
-
};
|
|
770
|
-
function routeNameFor(vault, collection) {
|
|
771
|
-
if (opts.vaultRoutes) {
|
|
772
|
-
for (const prefix of Object.keys(opts.vaultRoutes)) {
|
|
773
|
-
if (vault.startsWith(prefix)) return prefix;
|
|
774
|
-
}
|
|
775
|
-
}
|
|
776
|
-
if (opts.routes && !collection.startsWith("_") && opts.routes[collection]) {
|
|
777
|
-
return collection;
|
|
778
|
-
}
|
|
779
|
-
if (isBlobChunks(collection) && (simpleBlobStore || tieredBlobs)) return "blobs";
|
|
780
|
-
if (opts.routeBlobMeta && isBlobMeta(collection) && (simpleBlobStore || tieredBlobs)) return "blobs";
|
|
781
|
-
if (opts.age && !collection.startsWith("_")) {
|
|
782
|
-
}
|
|
783
|
-
return "default";
|
|
784
|
-
}
|
|
785
|
-
const quotaExceeded = false;
|
|
786
|
-
function resolveOriginalStore(route) {
|
|
787
|
-
if (route === "blobs") return simpleBlobStore ?? tieredBlobs?.large ?? primary;
|
|
788
|
-
if (route === "cold") return opts.age?.cold ?? primary;
|
|
789
|
-
if (opts.routes?.[route]) return opts.routes[route];
|
|
790
|
-
if (opts.vaultRoutes?.[route]) return opts.vaultRoutes[route];
|
|
791
|
-
return primary;
|
|
792
|
-
}
|
|
793
|
-
function maybeQueueWrite(routeName, method, vault, collection, id, envelope, expectedVersion) {
|
|
794
|
-
if (!suspended.has(routeName)) return false;
|
|
795
|
-
const queue = writeQueues.get(routeName);
|
|
796
|
-
if (!queue) return false;
|
|
797
|
-
if (queue.writes.length >= queue.maxSize) {
|
|
798
|
-
queue.writes.shift();
|
|
799
|
-
}
|
|
800
|
-
queue.writes.push({
|
|
801
|
-
method,
|
|
802
|
-
vault,
|
|
803
|
-
collection,
|
|
804
|
-
id,
|
|
805
|
-
...envelope !== void 0 ? { envelope } : {},
|
|
806
|
-
...expectedVersion !== void 0 ? { expectedVersion } : {}
|
|
807
|
-
});
|
|
808
|
-
return true;
|
|
809
|
-
}
|
|
810
|
-
function isBlobChunks(collection) {
|
|
811
|
-
return collection === BLOB_CHUNKS;
|
|
812
|
-
}
|
|
813
|
-
function isBlobMeta(collection) {
|
|
814
|
-
return collection === BLOB_INDEX || collection.startsWith(BLOB_SLOTS) || collection.startsWith(BLOB_VERSIONS);
|
|
815
|
-
}
|
|
816
|
-
function isInternal(collection) {
|
|
817
|
-
return collection.startsWith("_");
|
|
818
|
-
}
|
|
819
|
-
function storeFor(vault, collection) {
|
|
820
|
-
const rName = routeNameFor(vault, collection);
|
|
821
|
-
if (suspended.has(rName)) return NULL_STORE;
|
|
822
|
-
if (overrides.has(rName)) return overrides.get(rName);
|
|
823
|
-
if (opts.vaultRoutes) {
|
|
824
|
-
for (const [prefix, store2] of Object.entries(opts.vaultRoutes)) {
|
|
825
|
-
if (vault.startsWith(prefix)) return store2;
|
|
826
|
-
}
|
|
827
|
-
}
|
|
828
|
-
if (opts.routes && !isInternal(collection) && opts.routes[collection]) {
|
|
829
|
-
return opts.routes[collection];
|
|
830
|
-
}
|
|
831
|
-
if (isBlobChunks(collection)) {
|
|
832
|
-
if (simpleBlobStore) return simpleBlobStore;
|
|
833
|
-
if (tieredBlobs) return tieredBlobs.large;
|
|
834
|
-
}
|
|
835
|
-
if (opts.routeBlobMeta && isBlobMeta(collection)) {
|
|
836
|
-
if (simpleBlobStore) return simpleBlobStore;
|
|
837
|
-
if (tieredBlobs) return tieredBlobs.large;
|
|
838
|
-
}
|
|
839
|
-
if (quotaExceeded && opts.overflow) return opts.overflow;
|
|
840
|
-
return primary;
|
|
841
|
-
}
|
|
842
|
-
function blobStoreForSize(dataSize) {
|
|
843
|
-
if (!tieredBlobs) return simpleBlobStore ?? primary;
|
|
844
|
-
if (dataSize <= blobThreshold) {
|
|
845
|
-
return tieredBlobs.small ?? primary;
|
|
846
|
-
}
|
|
847
|
-
return tieredBlobs.large;
|
|
848
|
-
}
|
|
849
|
-
function isCold(collection, envelope, before) {
|
|
850
|
-
if (!opts.age) return false;
|
|
851
|
-
if (isInternal(collection)) return false;
|
|
852
|
-
if (opts.age.collections && opts.age.collections.length > 0) {
|
|
853
|
-
if (!opts.age.collections.includes(collection)) return false;
|
|
854
|
-
}
|
|
855
|
-
const cutoffIso = before ?? (opts.age.coldAfterDays != null ? new Date(Date.now() - opts.age.coldAfterDays * 24 * 60 * 60 * 1e3).toISOString() : void 0);
|
|
856
|
-
if (cutoffIso === void 0) return false;
|
|
857
|
-
return envelope._ts < cutoffIso;
|
|
858
|
-
}
|
|
859
|
-
const store = {
|
|
860
|
-
name: buildName(),
|
|
861
|
-
...opts.age?.cold ? { capabilities: { ...primary.capabilities, coldArchival: true } } : primary.capabilities ? { capabilities: { ...primary.capabilities, coldArchival: false } } : {},
|
|
862
|
-
async get(vault, collection, id) {
|
|
863
|
-
const s = storeFor(vault, collection);
|
|
864
|
-
const result = await s.get(vault, collection, id);
|
|
865
|
-
if (result === null && opts.age && !isInternal(collection)) {
|
|
866
|
-
if (!opts.age.collections?.length || opts.age.collections.includes(collection)) {
|
|
867
|
-
return opts.age.cold.get(vault, collection, id);
|
|
868
|
-
}
|
|
869
|
-
}
|
|
870
|
-
return result;
|
|
871
|
-
},
|
|
872
|
-
async put(vault, collection, id, envelope, expectedVersion) {
|
|
873
|
-
const rn = routeNameFor(vault, collection);
|
|
874
|
-
if (maybeQueueWrite(rn, "put", vault, collection, id, envelope, expectedVersion)) return;
|
|
875
|
-
if (isBlobChunks(collection) && tieredBlobs) {
|
|
876
|
-
const dataSize = envelope._data.length;
|
|
877
|
-
const s2 = blobStoreForSize(dataSize);
|
|
878
|
-
return s2.put(vault, collection, id, envelope, expectedVersion);
|
|
879
|
-
}
|
|
880
|
-
const s = storeFor(vault, collection);
|
|
881
|
-
if (opts.age && !isInternal(collection)) {
|
|
882
|
-
opts.age.cold.delete(vault, collection, id).catch(() => {
|
|
883
|
-
});
|
|
884
|
-
}
|
|
885
|
-
return s.put(vault, collection, id, envelope, expectedVersion);
|
|
886
|
-
},
|
|
887
|
-
async delete(vault, collection, id) {
|
|
888
|
-
const rn = routeNameFor(vault, collection);
|
|
889
|
-
if (maybeQueueWrite(rn, "delete", vault, collection, id)) return;
|
|
890
|
-
const s = storeFor(vault, collection);
|
|
891
|
-
await s.delete(vault, collection, id);
|
|
892
|
-
if (opts.age && !isInternal(collection)) {
|
|
893
|
-
await opts.age.cold.delete(vault, collection, id).catch(() => {
|
|
894
|
-
});
|
|
895
|
-
}
|
|
896
|
-
},
|
|
897
|
-
async list(vault, collection) {
|
|
898
|
-
const s = storeFor(vault, collection);
|
|
899
|
-
const ids = await s.list(vault, collection);
|
|
900
|
-
if (opts.age && !isInternal(collection)) {
|
|
901
|
-
if (!opts.age.collections?.length || opts.age.collections.includes(collection)) {
|
|
902
|
-
const coldIds = await opts.age.cold.list(vault, collection).catch(() => []);
|
|
903
|
-
if (coldIds.length > 0) {
|
|
904
|
-
const merged = new Set(ids);
|
|
905
|
-
for (const id of coldIds) merged.add(id);
|
|
906
|
-
return [...merged];
|
|
907
|
-
}
|
|
908
|
-
}
|
|
909
|
-
}
|
|
910
|
-
return ids;
|
|
911
|
-
},
|
|
912
|
-
async loadAll(vault) {
|
|
913
|
-
const stores = getStoresForVault(vault);
|
|
914
|
-
const snapshots = await Promise.all(
|
|
915
|
-
stores.map((s) => s.loadAll(vault).catch(() => ({})))
|
|
916
|
-
);
|
|
917
|
-
return mergeSnapshots(snapshots);
|
|
918
|
-
},
|
|
919
|
-
async saveAll(vault, data) {
|
|
920
|
-
const partitioned = /* @__PURE__ */ new Map();
|
|
921
|
-
for (const [collection, records] of Object.entries(data)) {
|
|
922
|
-
const s = storeFor(vault, collection);
|
|
923
|
-
if (!partitioned.has(s)) partitioned.set(s, {});
|
|
924
|
-
partitioned.get(s)[collection] = records;
|
|
925
|
-
}
|
|
926
|
-
await Promise.all(
|
|
927
|
-
[...partitioned.entries()].map(([s, snap]) => s.saveAll(vault, snap))
|
|
928
|
-
);
|
|
929
|
-
},
|
|
930
|
-
async compact(vault, compactOpts) {
|
|
931
|
-
if (!opts.age) return 0;
|
|
932
|
-
let migrated = 0;
|
|
933
|
-
const collections = opts.age.collections?.length ? opts.age.collections : Object.keys(await primary.loadAll(vault).catch(() => ({})));
|
|
934
|
-
for (const collection of collections) {
|
|
935
|
-
const ids = await primary.list(vault, collection).catch(() => []);
|
|
936
|
-
for (const id of ids) {
|
|
937
|
-
const envelope = await primary.get(vault, collection, id);
|
|
938
|
-
if (!envelope) continue;
|
|
939
|
-
if (isCold(collection, envelope, compactOpts?.before)) {
|
|
940
|
-
await opts.age.cold.put(vault, collection, id, envelope);
|
|
941
|
-
await primary.delete(vault, collection, id);
|
|
942
|
-
migrated++;
|
|
943
|
-
}
|
|
944
|
-
}
|
|
945
|
-
}
|
|
946
|
-
return migrated;
|
|
947
|
-
},
|
|
948
|
-
// ── Runtime override / suspend ──────────────────────
|
|
949
|
-
override(route, overrideStore, overrideOpts) {
|
|
950
|
-
if (overrideOpts?.hydrate) {
|
|
951
|
-
return (async () => {
|
|
952
|
-
overrides.set(route, overrideStore);
|
|
953
|
-
})();
|
|
954
|
-
}
|
|
955
|
-
overrides.set(route, overrideStore);
|
|
956
|
-
},
|
|
957
|
-
clearOverride(route) {
|
|
958
|
-
overrides.delete(route);
|
|
959
|
-
},
|
|
960
|
-
suspend(route, suspendOpts) {
|
|
961
|
-
suspended.add(route);
|
|
962
|
-
if (suspendOpts?.queue) {
|
|
963
|
-
writeQueues.set(route, {
|
|
964
|
-
writes: [],
|
|
965
|
-
maxSize: suspendOpts.maxQueueSize ?? 1e4
|
|
966
|
-
});
|
|
967
|
-
}
|
|
968
|
-
},
|
|
969
|
-
async resume(route) {
|
|
970
|
-
suspended.delete(route);
|
|
971
|
-
const queue = writeQueues.get(route);
|
|
972
|
-
if (!queue || queue.writes.length === 0) {
|
|
973
|
-
writeQueues.delete(route);
|
|
974
|
-
return 0;
|
|
975
|
-
}
|
|
976
|
-
let replayed = 0;
|
|
977
|
-
const target = overrides.get(route) ?? resolveOriginalStore(route);
|
|
978
|
-
for (const write of queue.writes) {
|
|
979
|
-
try {
|
|
980
|
-
if (write.method === "put" && write.envelope) {
|
|
981
|
-
await target.put(write.vault, write.collection, write.id, write.envelope, write.expectedVersion);
|
|
982
|
-
} else if (write.method === "delete") {
|
|
983
|
-
await target.delete(write.vault, write.collection, write.id);
|
|
984
|
-
}
|
|
985
|
-
replayed++;
|
|
986
|
-
} catch {
|
|
987
|
-
}
|
|
988
|
-
}
|
|
989
|
-
writeQueues.delete(route);
|
|
990
|
-
return replayed;
|
|
991
|
-
},
|
|
992
|
-
routeStatus() {
|
|
993
|
-
const ov = {};
|
|
994
|
-
for (const [k, v] of overrides) ov[k] = v.name ?? "unnamed";
|
|
995
|
-
const q = {};
|
|
996
|
-
for (const [k, v] of writeQueues) q[k] = v.writes.length;
|
|
997
|
-
return { overrides: ov, suspended: [...suspended], queued: q };
|
|
998
|
-
},
|
|
999
|
-
resolveBackend(vaultId) {
|
|
1000
|
-
if (opts.vaultRoutes) {
|
|
1001
|
-
for (const [prefix, s] of Object.entries(opts.vaultRoutes)) {
|
|
1002
|
-
if (vaultId.startsWith(prefix)) return s;
|
|
1003
|
-
}
|
|
1004
|
-
}
|
|
1005
|
-
return primary;
|
|
1006
|
-
}
|
|
633
|
+
series: opts.series,
|
|
634
|
+
collection: opts.collection,
|
|
635
|
+
field: opts.field,
|
|
636
|
+
settleWindowMs: opts.settleWindowMs ?? 0
|
|
1007
637
|
};
|
|
1008
|
-
if (anyHas("listVaults")) {
|
|
1009
|
-
store.listVaults = async () => {
|
|
1010
|
-
const results = await Promise.all(
|
|
1011
|
-
[...allStores].filter((s) => s.listVaults !== void 0).map((s) => s.listVaults().catch(() => []))
|
|
1012
|
-
);
|
|
1013
|
-
return [...new Set(results.flat())];
|
|
1014
|
-
};
|
|
1015
|
-
}
|
|
1016
|
-
if (anyHas("ping")) {
|
|
1017
|
-
store.ping = async () => {
|
|
1018
|
-
const results = await Promise.all(
|
|
1019
|
-
[...allStores].filter((s) => s.ping !== void 0).map((s) => s.ping().catch(() => false))
|
|
1020
|
-
);
|
|
1021
|
-
return results.some(Boolean);
|
|
1022
|
-
};
|
|
1023
|
-
}
|
|
1024
|
-
return store;
|
|
1025
|
-
function buildName() {
|
|
1026
|
-
const names = [...allStores].map((s) => s.name ?? "?").join("+");
|
|
1027
|
-
return `route(${names})`;
|
|
1028
|
-
}
|
|
1029
|
-
function anyHas(method) {
|
|
1030
|
-
return [...allStores].some((s) => s[method]);
|
|
1031
|
-
}
|
|
1032
|
-
function getStoresForVault(vault) {
|
|
1033
|
-
const stores = /* @__PURE__ */ new Set();
|
|
1034
|
-
if (opts.vaultRoutes) {
|
|
1035
|
-
for (const [prefix, s] of Object.entries(opts.vaultRoutes)) {
|
|
1036
|
-
if (vault.startsWith(prefix)) {
|
|
1037
|
-
stores.add(s);
|
|
1038
|
-
return [...stores];
|
|
1039
|
-
}
|
|
1040
|
-
}
|
|
1041
|
-
}
|
|
1042
|
-
stores.add(primary);
|
|
1043
|
-
if (simpleBlobStore) stores.add(simpleBlobStore);
|
|
1044
|
-
if (tieredBlobs?.large) stores.add(tieredBlobs.large);
|
|
1045
|
-
if (tieredBlobs?.small && tieredBlobs.small !== primary) stores.add(tieredBlobs.small);
|
|
1046
|
-
if (opts.age?.cold) stores.add(opts.age.cold);
|
|
1047
|
-
if (opts.routes) {
|
|
1048
|
-
for (const s of Object.values(opts.routes)) stores.add(s);
|
|
1049
|
-
}
|
|
1050
|
-
return [...stores];
|
|
1051
|
-
}
|
|
1052
|
-
}
|
|
1053
|
-
function mergeSnapshots(snapshots) {
|
|
1054
|
-
const merged = {};
|
|
1055
|
-
for (const snap of snapshots) {
|
|
1056
|
-
for (const [collection, records] of Object.entries(snap)) {
|
|
1057
|
-
if (!merged[collection]) {
|
|
1058
|
-
merged[collection] = { ...records };
|
|
1059
|
-
continue;
|
|
1060
|
-
}
|
|
1061
|
-
for (const [id, envelope] of Object.entries(records)) {
|
|
1062
|
-
const existing = merged[collection][id];
|
|
1063
|
-
if (!existing || envelope._ts >= existing._ts) {
|
|
1064
|
-
merged[collection][id] = envelope;
|
|
1065
|
-
}
|
|
1066
|
-
}
|
|
1067
|
-
}
|
|
1068
|
-
}
|
|
1069
|
-
return merged;
|
|
1070
|
-
}
|
|
1071
|
-
|
|
1072
|
-
// src/with-store/store-middleware.ts
|
|
1073
|
-
function wrapStore(store, ...middlewares) {
|
|
1074
|
-
let result = store;
|
|
1075
|
-
for (let i = middlewares.length - 1; i >= 0; i--) {
|
|
1076
|
-
result = middlewares[i](result);
|
|
1077
|
-
}
|
|
1078
|
-
return result;
|
|
1079
|
-
}
|
|
1080
|
-
function withRetry(opts = {}) {
|
|
1081
|
-
const maxRetries = opts.maxRetries ?? 3;
|
|
1082
|
-
const backoffMs = opts.backoffMs ?? 500;
|
|
1083
|
-
const jitter = opts.jitter ?? 0.3;
|
|
1084
|
-
const retryOn = opts.retryOn ? new Set(opts.retryOn) : null;
|
|
1085
|
-
function shouldRetry(err) {
|
|
1086
|
-
if (!retryOn) return true;
|
|
1087
|
-
if (err && typeof err === "object" && "code" in err) {
|
|
1088
|
-
return retryOn.has(err.code);
|
|
1089
|
-
}
|
|
1090
|
-
return true;
|
|
1091
|
-
}
|
|
1092
|
-
async function retryable(fn) {
|
|
1093
|
-
let lastError;
|
|
1094
|
-
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
1095
|
-
try {
|
|
1096
|
-
return await fn();
|
|
1097
|
-
} catch (err) {
|
|
1098
|
-
lastError = err;
|
|
1099
|
-
if (attempt >= maxRetries || !shouldRetry(err)) throw err;
|
|
1100
|
-
const delay = backoffMs * Math.pow(2, attempt) * (1 + Math.random() * jitter);
|
|
1101
|
-
await new Promise((r) => setTimeout(r, delay));
|
|
1102
|
-
}
|
|
1103
|
-
}
|
|
1104
|
-
throw lastError;
|
|
1105
|
-
}
|
|
1106
|
-
return (next) => ({
|
|
1107
|
-
...next,
|
|
1108
|
-
name: next.name ? `retry(${next.name})` : "retry",
|
|
1109
|
-
get: (v, c, id) => retryable(() => next.get(v, c, id)),
|
|
1110
|
-
put: (v, c, id, env, ev) => retryable(() => next.put(v, c, id, env, ev)),
|
|
1111
|
-
delete: (v, c, id) => retryable(() => next.delete(v, c, id)),
|
|
1112
|
-
list: (v, c) => retryable(() => next.list(v, c)),
|
|
1113
|
-
loadAll: (v) => retryable(() => next.loadAll(v)),
|
|
1114
|
-
saveAll: (v, d) => retryable(() => next.saveAll(v, d))
|
|
1115
|
-
});
|
|
1116
|
-
}
|
|
1117
|
-
var LOG_LEVELS = { debug: 0, info: 1, warn: 2, error: 3 };
|
|
1118
|
-
function withLogging(opts = {}) {
|
|
1119
|
-
const minLevel = LOG_LEVELS[opts.level ?? "info"];
|
|
1120
|
-
const logger = opts.logger ?? console;
|
|
1121
|
-
const logData = opts.logData ?? false;
|
|
1122
|
-
function log(level, method, args, durationMs) {
|
|
1123
|
-
if (LOG_LEVELS[level] < minLevel) return;
|
|
1124
|
-
const parts = [`[noydb:${method}]`, ...Object.entries(args).map(([k, v]) => `${k}=${String(v)}`)];
|
|
1125
|
-
if (durationMs !== void 0) parts.push(`${durationMs}ms`);
|
|
1126
|
-
logger[level](parts.join(" "));
|
|
1127
|
-
}
|
|
1128
|
-
function timed(method, args, fn) {
|
|
1129
|
-
const start = Date.now();
|
|
1130
|
-
return fn().then(
|
|
1131
|
-
(result) => {
|
|
1132
|
-
log("debug", method, args, Date.now() - start);
|
|
1133
|
-
return result;
|
|
1134
|
-
},
|
|
1135
|
-
(err) => {
|
|
1136
|
-
log("error", method, { ...args, error: err.message }, Date.now() - start);
|
|
1137
|
-
throw err;
|
|
1138
|
-
}
|
|
1139
|
-
);
|
|
1140
|
-
}
|
|
1141
|
-
return (next) => ({
|
|
1142
|
-
...next,
|
|
1143
|
-
name: next.name ? `log(${next.name})` : "log",
|
|
1144
|
-
get: (v, c, id) => timed("get", { vault: v, collection: c, id }, () => next.get(v, c, id)),
|
|
1145
|
-
put: (v, c, id, env, ev) => timed("put", {
|
|
1146
|
-
vault: v,
|
|
1147
|
-
collection: c,
|
|
1148
|
-
id,
|
|
1149
|
-
version: env._v,
|
|
1150
|
-
...logData ? { data: env._data.slice(0, 40) + "..." } : {}
|
|
1151
|
-
}, () => next.put(v, c, id, env, ev)),
|
|
1152
|
-
delete: (v, c, id) => timed("delete", { vault: v, collection: c, id }, () => next.delete(v, c, id)),
|
|
1153
|
-
list: (v, c) => timed("list", { vault: v, collection: c }, () => next.list(v, c)),
|
|
1154
|
-
loadAll: (v) => timed("loadAll", { vault: v }, () => next.loadAll(v)),
|
|
1155
|
-
saveAll: (v, d) => timed("saveAll", { vault: v }, () => next.saveAll(v, d))
|
|
1156
|
-
});
|
|
1157
|
-
}
|
|
1158
|
-
function withMetrics(opts) {
|
|
1159
|
-
function tracked(method, vault, fn, collection, id) {
|
|
1160
|
-
const start = Date.now();
|
|
1161
|
-
return fn().then(
|
|
1162
|
-
(result) => {
|
|
1163
|
-
opts.onOperation({
|
|
1164
|
-
method,
|
|
1165
|
-
vault,
|
|
1166
|
-
...collection !== void 0 ? { collection } : {},
|
|
1167
|
-
...id !== void 0 ? { id } : {},
|
|
1168
|
-
durationMs: Date.now() - start,
|
|
1169
|
-
success: true
|
|
1170
|
-
});
|
|
1171
|
-
return result;
|
|
1172
|
-
},
|
|
1173
|
-
(err) => {
|
|
1174
|
-
opts.onOperation({
|
|
1175
|
-
method,
|
|
1176
|
-
vault,
|
|
1177
|
-
...collection !== void 0 ? { collection } : {},
|
|
1178
|
-
...id !== void 0 ? { id } : {},
|
|
1179
|
-
durationMs: Date.now() - start,
|
|
1180
|
-
success: false,
|
|
1181
|
-
error: err
|
|
1182
|
-
});
|
|
1183
|
-
throw err;
|
|
1184
|
-
}
|
|
1185
|
-
);
|
|
1186
|
-
}
|
|
1187
|
-
return (next) => ({
|
|
1188
|
-
...next,
|
|
1189
|
-
name: next.name ? `metrics(${next.name})` : "metrics",
|
|
1190
|
-
get: (v, c, id) => tracked("get", v, () => next.get(v, c, id), c, id),
|
|
1191
|
-
put: (v, c, id, env, ev) => tracked("put", v, () => next.put(v, c, id, env, ev), c, id),
|
|
1192
|
-
delete: (v, c, id) => tracked("delete", v, () => next.delete(v, c, id), c, id),
|
|
1193
|
-
list: (v, c) => tracked("list", v, () => next.list(v, c), c),
|
|
1194
|
-
loadAll: (v) => tracked("loadAll", v, () => next.loadAll(v)),
|
|
1195
|
-
saveAll: (v, d) => tracked("saveAll", v, () => next.saveAll(v, d))
|
|
1196
|
-
});
|
|
1197
|
-
}
|
|
1198
|
-
function withCircuitBreaker(opts = {}) {
|
|
1199
|
-
const threshold = opts.failureThreshold ?? 5;
|
|
1200
|
-
const resetMs = opts.resetTimeoutMs ?? 3e4;
|
|
1201
|
-
let state = "closed";
|
|
1202
|
-
let failures = 0;
|
|
1203
|
-
let lastFailureTime = 0;
|
|
1204
|
-
function recordSuccess() {
|
|
1205
|
-
if (state === "half-open") {
|
|
1206
|
-
state = "closed";
|
|
1207
|
-
failures = 0;
|
|
1208
|
-
opts.onClose?.();
|
|
1209
|
-
}
|
|
1210
|
-
failures = 0;
|
|
1211
|
-
}
|
|
1212
|
-
function recordFailure() {
|
|
1213
|
-
failures++;
|
|
1214
|
-
lastFailureTime = Date.now();
|
|
1215
|
-
if (failures >= threshold && state === "closed") {
|
|
1216
|
-
state = "open";
|
|
1217
|
-
opts.onOpen?.();
|
|
1218
|
-
}
|
|
1219
|
-
}
|
|
1220
|
-
function canAttempt() {
|
|
1221
|
-
if (state === "closed") return true;
|
|
1222
|
-
if (state === "open") {
|
|
1223
|
-
if (Date.now() - lastFailureTime >= resetMs) {
|
|
1224
|
-
state = "half-open";
|
|
1225
|
-
return true;
|
|
1226
|
-
}
|
|
1227
|
-
return false;
|
|
1228
|
-
}
|
|
1229
|
-
return true;
|
|
1230
|
-
}
|
|
1231
|
-
async function guarded(fn, fallback) {
|
|
1232
|
-
if (!canAttempt()) return fallback;
|
|
1233
|
-
try {
|
|
1234
|
-
const result = await fn();
|
|
1235
|
-
recordSuccess();
|
|
1236
|
-
return result;
|
|
1237
|
-
} catch (err) {
|
|
1238
|
-
recordFailure();
|
|
1239
|
-
throw err;
|
|
1240
|
-
}
|
|
1241
|
-
}
|
|
1242
|
-
return (next) => ({
|
|
1243
|
-
...next,
|
|
1244
|
-
name: next.name ? `cb(${next.name})` : "cb",
|
|
1245
|
-
get: (v, c, id) => guarded(() => next.get(v, c, id), null),
|
|
1246
|
-
put: (v, c, id, env, ev) => guarded(() => next.put(v, c, id, env, ev), void 0),
|
|
1247
|
-
delete: (v, c, id) => guarded(() => next.delete(v, c, id), void 0),
|
|
1248
|
-
list: (v, c) => guarded(() => next.list(v, c), []),
|
|
1249
|
-
loadAll: (v) => guarded(() => next.loadAll(v), {}),
|
|
1250
|
-
saveAll: (v, d) => guarded(() => next.saveAll(v, d), void 0)
|
|
1251
|
-
});
|
|
1252
|
-
}
|
|
1253
|
-
function withCache(opts = {}) {
|
|
1254
|
-
const maxEntries = opts.maxEntries ?? 500;
|
|
1255
|
-
const ttlMs = opts.ttlMs ?? 6e4;
|
|
1256
|
-
const cache = /* @__PURE__ */ new Map();
|
|
1257
|
-
function cacheKey(vault, collection, id) {
|
|
1258
|
-
return `${vault}\0${collection}\0${id}`;
|
|
1259
|
-
}
|
|
1260
|
-
function getFromCache(key) {
|
|
1261
|
-
const entry = cache.get(key);
|
|
1262
|
-
if (!entry) return void 0;
|
|
1263
|
-
if (ttlMs > 0 && Date.now() - entry.cachedAt > ttlMs) {
|
|
1264
|
-
cache.delete(key);
|
|
1265
|
-
return void 0;
|
|
1266
|
-
}
|
|
1267
|
-
cache.delete(key);
|
|
1268
|
-
cache.set(key, entry);
|
|
1269
|
-
return entry.envelope;
|
|
1270
|
-
}
|
|
1271
|
-
function setInCache(key, envelope) {
|
|
1272
|
-
if (cache.size >= maxEntries) {
|
|
1273
|
-
const oldest = cache.keys().next().value;
|
|
1274
|
-
if (oldest !== void 0) cache.delete(oldest);
|
|
1275
|
-
}
|
|
1276
|
-
cache.set(key, { envelope, cachedAt: Date.now() });
|
|
1277
|
-
}
|
|
1278
|
-
function invalidate(key) {
|
|
1279
|
-
cache.delete(key);
|
|
1280
|
-
}
|
|
1281
|
-
return (next) => ({
|
|
1282
|
-
...next,
|
|
1283
|
-
name: next.name ? `cache(${next.name})` : "cache",
|
|
1284
|
-
async get(vault, collection, id) {
|
|
1285
|
-
const key = cacheKey(vault, collection, id);
|
|
1286
|
-
const cached = getFromCache(key);
|
|
1287
|
-
if (cached !== void 0) return cached;
|
|
1288
|
-
const result = await next.get(vault, collection, id);
|
|
1289
|
-
setInCache(key, result);
|
|
1290
|
-
return result;
|
|
1291
|
-
},
|
|
1292
|
-
async put(vault, collection, id, env, ev) {
|
|
1293
|
-
invalidate(cacheKey(vault, collection, id));
|
|
1294
|
-
await next.put(vault, collection, id, env, ev);
|
|
1295
|
-
setInCache(cacheKey(vault, collection, id), env);
|
|
1296
|
-
},
|
|
1297
|
-
async delete(vault, collection, id) {
|
|
1298
|
-
invalidate(cacheKey(vault, collection, id));
|
|
1299
|
-
await next.delete(vault, collection, id);
|
|
1300
|
-
},
|
|
1301
|
-
list: (v, c) => next.list(v, c),
|
|
1302
|
-
loadAll: (v) => next.loadAll(v),
|
|
1303
|
-
saveAll: (v, d) => next.saveAll(v, d)
|
|
1304
|
-
});
|
|
1305
|
-
}
|
|
1306
|
-
function withHealthCheck(opts = {}) {
|
|
1307
|
-
const intervalMs = opts.checkIntervalMs ?? 3e4;
|
|
1308
|
-
const failThreshold = opts.suspendAfterFailures ?? 3;
|
|
1309
|
-
const successThreshold = opts.resumeAfterSuccess ?? 1;
|
|
1310
|
-
let isSuspended = false;
|
|
1311
|
-
let consecutiveFailures = 0;
|
|
1312
|
-
let consecutiveSuccesses = 0;
|
|
1313
|
-
return (next) => {
|
|
1314
|
-
const checkFn = opts.check ?? (next.ping ? () => next.ping() : async () => {
|
|
1315
|
-
await next.list("__health__", "__ping__");
|
|
1316
|
-
return true;
|
|
1317
|
-
});
|
|
1318
|
-
async function doCheck() {
|
|
1319
|
-
try {
|
|
1320
|
-
const ok = await checkFn();
|
|
1321
|
-
if (ok) {
|
|
1322
|
-
consecutiveFailures = 0;
|
|
1323
|
-
consecutiveSuccesses++;
|
|
1324
|
-
if (isSuspended && consecutiveSuccesses >= successThreshold) {
|
|
1325
|
-
isSuspended = false;
|
|
1326
|
-
consecutiveSuccesses = 0;
|
|
1327
|
-
opts.onResume?.();
|
|
1328
|
-
}
|
|
1329
|
-
} else {
|
|
1330
|
-
throw new Error("Health check returned false");
|
|
1331
|
-
}
|
|
1332
|
-
} catch {
|
|
1333
|
-
consecutiveSuccesses = 0;
|
|
1334
|
-
consecutiveFailures++;
|
|
1335
|
-
if (!isSuspended && consecutiveFailures >= failThreshold) {
|
|
1336
|
-
isSuspended = true;
|
|
1337
|
-
consecutiveFailures = 0;
|
|
1338
|
-
opts.onSuspend?.();
|
|
1339
|
-
}
|
|
1340
|
-
}
|
|
1341
|
-
}
|
|
1342
|
-
setInterval(() => {
|
|
1343
|
-
void doCheck();
|
|
1344
|
-
}, intervalMs);
|
|
1345
|
-
const wrapped = {
|
|
1346
|
-
...next,
|
|
1347
|
-
name: next.name ? `health(${next.name})` : "health",
|
|
1348
|
-
async get(v, c, id) {
|
|
1349
|
-
return isSuspended ? null : next.get(v, c, id);
|
|
1350
|
-
},
|
|
1351
|
-
async put(v, c, id, env, ev) {
|
|
1352
|
-
if (!isSuspended) await next.put(v, c, id, env, ev);
|
|
1353
|
-
},
|
|
1354
|
-
async delete(v, c, id) {
|
|
1355
|
-
if (!isSuspended) await next.delete(v, c, id);
|
|
1356
|
-
},
|
|
1357
|
-
async list(v, c) {
|
|
1358
|
-
return isSuspended ? [] : next.list(v, c);
|
|
1359
|
-
},
|
|
1360
|
-
async loadAll(v) {
|
|
1361
|
-
return isSuspended ? {} : next.loadAll(v);
|
|
1362
|
-
},
|
|
1363
|
-
async saveAll(v, d) {
|
|
1364
|
-
if (!isSuspended) await next.saveAll(v, d);
|
|
1365
|
-
}
|
|
1366
|
-
};
|
|
1367
|
-
return wrapped;
|
|
1368
|
-
};
|
|
1369
|
-
}
|
|
1370
|
-
|
|
1371
|
-
// src/with-commit/numbering/descriptor.ts
|
|
1372
|
-
function withDeferredNumbering(config) {
|
|
1373
|
-
return {
|
|
1374
|
-
series: config.series,
|
|
1375
|
-
collection: config.collection,
|
|
1376
|
-
field: config.field,
|
|
1377
|
-
settleWindowMs: config.settleWindowMs ?? 0
|
|
1378
|
-
};
|
|
1379
|
-
}
|
|
1380
|
-
|
|
1381
|
-
// src/via/money/iso4217.ts
|
|
1382
|
-
var MINOR_UNITS = {
|
|
1383
|
-
// 2-decimal majors
|
|
1384
|
-
EUR: 2,
|
|
1385
|
-
USD: 2,
|
|
1386
|
-
GBP: 2,
|
|
1387
|
-
CHF: 2,
|
|
1388
|
-
CAD: 2,
|
|
1389
|
-
AUD: 2,
|
|
1390
|
-
NZD: 2,
|
|
1391
|
-
SGD: 2,
|
|
1392
|
-
HKD: 2,
|
|
1393
|
-
CNY: 2,
|
|
1394
|
-
INR: 2,
|
|
1395
|
-
BRL: 2,
|
|
1396
|
-
MXN: 2,
|
|
1397
|
-
ZAR: 2,
|
|
1398
|
-
RUB: 2,
|
|
1399
|
-
TRY: 2,
|
|
1400
|
-
PLN: 2,
|
|
1401
|
-
SEK: 2,
|
|
1402
|
-
NOK: 2,
|
|
1403
|
-
DKK: 2,
|
|
1404
|
-
CZK: 2,
|
|
1405
|
-
HUF: 2,
|
|
1406
|
-
RON: 2,
|
|
1407
|
-
ILS: 2,
|
|
1408
|
-
THB: 2,
|
|
1409
|
-
PHP: 2,
|
|
1410
|
-
MYR: 2,
|
|
1411
|
-
IDR: 2,
|
|
1412
|
-
AED: 2,
|
|
1413
|
-
SAR: 2,
|
|
1414
|
-
QAR: 2,
|
|
1415
|
-
EGP: 2,
|
|
1416
|
-
// 0-decimal
|
|
1417
|
-
JPY: 0,
|
|
1418
|
-
KRW: 0,
|
|
1419
|
-
ISK: 0,
|
|
1420
|
-
CLP: 0,
|
|
1421
|
-
VND: 0,
|
|
1422
|
-
XOF: 0,
|
|
1423
|
-
XAF: 0,
|
|
1424
|
-
PYG: 0,
|
|
1425
|
-
// 3-decimal
|
|
1426
|
-
BHD: 3,
|
|
1427
|
-
KWD: 3,
|
|
1428
|
-
OMR: 3,
|
|
1429
|
-
TND: 3,
|
|
1430
|
-
JOD: 3,
|
|
1431
|
-
IQD: 3,
|
|
1432
|
-
LYD: 3
|
|
1433
|
-
};
|
|
1434
|
-
function scaleForCurrency(code) {
|
|
1435
|
-
const v = MINOR_UNITS[code];
|
|
1436
|
-
return v === void 0 ? null : v;
|
|
1437
|
-
}
|
|
1438
|
-
|
|
1439
|
-
// src/via/money/fixed-point.ts
|
|
1440
|
-
function expandExponent(s) {
|
|
1441
|
-
const m = /^([+-]?)(\d+)(?:\.(\d+))?[eE]([+-]?\d+)$/.exec(s);
|
|
1442
|
-
if (!m) return s;
|
|
1443
|
-
const sign = m[1] === "-" ? "-" : "";
|
|
1444
|
-
const intp = m[2];
|
|
1445
|
-
const frac = m[3] ?? "";
|
|
1446
|
-
const exp = Number(m[4]);
|
|
1447
|
-
const digits = intp + frac;
|
|
1448
|
-
const pointPos = intp.length + exp;
|
|
1449
|
-
let body;
|
|
1450
|
-
if (pointPos <= 0) {
|
|
1451
|
-
body = "0." + "0".repeat(-pointPos) + digits;
|
|
1452
|
-
} else if (pointPos >= digits.length) {
|
|
1453
|
-
body = digits + "0".repeat(pointPos - digits.length);
|
|
1454
|
-
} else {
|
|
1455
|
-
body = digits.slice(0, pointPos) + "." + digits.slice(pointPos);
|
|
1456
|
-
}
|
|
1457
|
-
return sign + body;
|
|
1458
|
-
}
|
|
1459
|
-
function toCanonicalDecimalString(input) {
|
|
1460
|
-
let s;
|
|
1461
|
-
if (typeof input === "number") {
|
|
1462
|
-
if (!Number.isFinite(input)) return null;
|
|
1463
|
-
s = String(input);
|
|
1464
|
-
} else {
|
|
1465
|
-
s = input.trim();
|
|
1466
|
-
}
|
|
1467
|
-
s = expandExponent(s);
|
|
1468
|
-
if (s.startsWith("+")) s = s.slice(1);
|
|
1469
|
-
if (!/^-?(\d+(\.\d*)?|\.\d+)$/.test(s)) return null;
|
|
1470
|
-
return s;
|
|
1471
|
-
}
|
|
1472
|
-
function shouldRoundUp(negative, lastKeptDigit, firstDiscarded, hasMoreNonZeroAfterFirst, mode) {
|
|
1473
|
-
switch (mode) {
|
|
1474
|
-
case "up":
|
|
1475
|
-
return true;
|
|
1476
|
-
case "down":
|
|
1477
|
-
return false;
|
|
1478
|
-
case "ceil":
|
|
1479
|
-
return !negative;
|
|
1480
|
-
case "floor":
|
|
1481
|
-
return negative;
|
|
1482
|
-
case "half-up":
|
|
1483
|
-
return firstDiscarded >= 5;
|
|
1484
|
-
case "half-down":
|
|
1485
|
-
return firstDiscarded > 5 || firstDiscarded === 5 && hasMoreNonZeroAfterFirst;
|
|
1486
|
-
case "half-even":
|
|
1487
|
-
if (firstDiscarded > 5) return true;
|
|
1488
|
-
if (firstDiscarded < 5) return false;
|
|
1489
|
-
return hasMoreNonZeroAfterFirst || lastKeptDigit % 2 === 1;
|
|
1490
|
-
}
|
|
1491
|
-
}
|
|
1492
|
-
function parseToScaledInt(input, scale, rounding) {
|
|
1493
|
-
const canonical = toCanonicalDecimalString(input);
|
|
1494
|
-
if (canonical === null) return { ok: false, reason: "nonfinite" };
|
|
1495
|
-
const negative = canonical.startsWith("-");
|
|
1496
|
-
const unsigned = negative ? canonical.slice(1) : canonical;
|
|
1497
|
-
const dot = unsigned.indexOf(".");
|
|
1498
|
-
const intPart = dot === -1 ? unsigned : unsigned.slice(0, dot);
|
|
1499
|
-
const fracPart = dot === -1 ? "" : unsigned.slice(dot + 1);
|
|
1500
|
-
const intDigits = intPart === "" ? "0" : intPart;
|
|
1501
|
-
if (fracPart.length <= scale) {
|
|
1502
|
-
const keep2 = fracPart.padEnd(scale, "0");
|
|
1503
|
-
const magnitude2 = BigInt(intDigits + keep2);
|
|
1504
|
-
return { ok: true, value: negative && magnitude2 !== 0n ? -magnitude2 : magnitude2 };
|
|
1505
|
-
}
|
|
1506
|
-
const keep = fracPart.slice(0, scale);
|
|
1507
|
-
const tail = fracPart.slice(scale);
|
|
1508
|
-
const magnitudeDigits = intDigits + keep;
|
|
1509
|
-
let magnitude = BigInt(magnitudeDigits);
|
|
1510
|
-
if (/^0+$/.test(tail)) {
|
|
1511
|
-
return { ok: true, value: negative && magnitude !== 0n ? -magnitude : magnitude };
|
|
1512
|
-
}
|
|
1513
|
-
if (rounding === void 0) return { ok: false, reason: "precision" };
|
|
1514
|
-
const lastKeptDigit = Number(magnitudeDigits[magnitudeDigits.length - 1]);
|
|
1515
|
-
const firstDiscarded = Number(tail[0]);
|
|
1516
|
-
const hasMoreNonZeroAfterFirst = /[1-9]/.test(tail.slice(1));
|
|
1517
|
-
if (shouldRoundUp(negative, lastKeptDigit, firstDiscarded, hasMoreNonZeroAfterFirst, rounding)) {
|
|
1518
|
-
magnitude += 1n;
|
|
1519
|
-
}
|
|
1520
|
-
return { ok: true, value: negative && magnitude !== 0n ? -magnitude : magnitude };
|
|
1521
|
-
}
|
|
1522
|
-
function decimalScaleOf(input) {
|
|
1523
|
-
const s = toCanonicalDecimalString(input);
|
|
1524
|
-
if (s === null) return null;
|
|
1525
|
-
const dot = s.indexOf(".");
|
|
1526
|
-
return dot === -1 ? 0 : s.length - dot - 1;
|
|
1527
|
-
}
|
|
1528
|
-
function rescaleScaledInt(value, fromScale, toScale, rounding = "half-up") {
|
|
1529
|
-
if (toScale >= fromScale) return value * 10n ** BigInt(toScale - fromScale);
|
|
1530
|
-
const drop = fromScale - toScale;
|
|
1531
|
-
const negative = value < 0n;
|
|
1532
|
-
const absStr = (negative ? -value : value).toString().padStart(drop + 1, "0");
|
|
1533
|
-
const keptStr = absStr.slice(0, absStr.length - drop);
|
|
1534
|
-
const tail = absStr.slice(absStr.length - drop);
|
|
1535
|
-
let magnitude = BigInt(keptStr);
|
|
1536
|
-
if (!/^0+$/.test(tail)) {
|
|
1537
|
-
const lastKeptDigit = Number(keptStr[keptStr.length - 1]);
|
|
1538
|
-
const firstDiscarded = Number(tail[0]);
|
|
1539
|
-
const hasMoreNonZeroAfterFirst = /[1-9]/.test(tail.slice(1));
|
|
1540
|
-
if (shouldRoundUp(negative, lastKeptDigit, firstDiscarded, hasMoreNonZeroAfterFirst, rounding)) {
|
|
1541
|
-
magnitude += 1n;
|
|
1542
|
-
}
|
|
1543
|
-
}
|
|
1544
|
-
return negative && magnitude !== 0n ? -magnitude : magnitude;
|
|
1545
|
-
}
|
|
1546
|
-
function formatScaledInt(value, scale) {
|
|
1547
|
-
const negative = value < 0n;
|
|
1548
|
-
const abs = (negative ? -value : value).toString();
|
|
1549
|
-
if (scale === 0) return (negative ? "-" : "") + abs;
|
|
1550
|
-
const padded = abs.padStart(scale + 1, "0");
|
|
1551
|
-
const cut = padded.length - scale;
|
|
1552
|
-
const intPart = padded.slice(0, cut);
|
|
1553
|
-
const fracPart = padded.slice(cut);
|
|
1554
|
-
return (negative ? "-" : "") + intPart + "." + fracPart;
|
|
1555
|
-
}
|
|
1556
|
-
|
|
1557
|
-
// src/via/money/paths.ts
|
|
1558
|
-
var SEGMENT_RE = /^(\*|[^.[\]*]+)(\[\])?$/;
|
|
1559
|
-
var parseCache = /* @__PURE__ */ new Map();
|
|
1560
|
-
function parseMoneyPath(path) {
|
|
1561
|
-
const cached = parseCache.get(path);
|
|
1562
|
-
if (cached) return cached;
|
|
1563
|
-
if (typeof path !== "string" || path.length === 0) {
|
|
1564
|
-
throw new ValidationError("moneyFields: path must be a non-empty string");
|
|
1565
|
-
}
|
|
1566
|
-
const segments = [];
|
|
1567
|
-
for (const part of path.split(".")) {
|
|
1568
|
-
const m = SEGMENT_RE.exec(part);
|
|
1569
|
-
if (!m) {
|
|
1570
|
-
throw new ValidationError(
|
|
1571
|
-
`moneyFields: invalid path "${path}" \u2014 segment "${part}" must be a key, "key[]", "*", or "*[]"`
|
|
1572
|
-
);
|
|
1573
|
-
}
|
|
1574
|
-
const array = m[2] === "[]";
|
|
1575
|
-
segments.push(
|
|
1576
|
-
m[1] === "*" ? { kind: "wildcard", array } : { kind: "key", key: m[1], array }
|
|
1577
|
-
);
|
|
1578
|
-
}
|
|
1579
|
-
parseCache.set(path, segments);
|
|
1580
|
-
return segments;
|
|
1581
|
-
}
|
|
1582
|
-
function isSimpleMoneyPath(path) {
|
|
1583
|
-
return !path.includes(".") && !path.includes("[") && !path.includes("*");
|
|
1584
|
-
}
|
|
1585
|
-
function validateMoneyFieldPaths(moneyFields) {
|
|
1586
|
-
for (const path of Object.keys(moneyFields)) parseMoneyPath(path);
|
|
1587
|
-
}
|
|
1588
|
-
function transformAtMoneyPath(node, path, segments, index, visit, lenient) {
|
|
1589
|
-
if (node === null || node === void 0) return node;
|
|
1590
|
-
const seg = segments[index];
|
|
1591
|
-
const last = index === segments.length - 1;
|
|
1592
|
-
if (seg.kind === "key") {
|
|
1593
|
-
if (typeof node !== "object" || Array.isArray(node)) {
|
|
1594
|
-
if (lenient) return node;
|
|
1595
|
-
throw new ValidationError(
|
|
1596
|
-
`moneyFields: path "${path}" expected an object at segment "${seg.key}", got ${Array.isArray(node) ? "an array" : typeof node}`
|
|
1597
|
-
);
|
|
1598
|
-
}
|
|
1599
|
-
const obj2 = node;
|
|
1600
|
-
if (!(seg.key in obj2) || obj2[seg.key] === null || obj2[seg.key] === void 0) return node;
|
|
1601
|
-
if (seg.array) {
|
|
1602
|
-
const arr = obj2[seg.key];
|
|
1603
|
-
if (!Array.isArray(arr)) {
|
|
1604
|
-
if (lenient) return node;
|
|
1605
|
-
throw new ValidationError(
|
|
1606
|
-
`moneyFields: path "${path}" declares "${seg.key}[]" but the value is not an array`
|
|
1607
|
-
);
|
|
1608
|
-
}
|
|
1609
|
-
const cloned = [...arr];
|
|
1610
|
-
if (last) {
|
|
1611
|
-
for (let i = 0; i < cloned.length; i++) visit(cloned, i);
|
|
1612
|
-
} else {
|
|
1613
|
-
for (let i = 0; i < cloned.length; i++) {
|
|
1614
|
-
cloned[i] = transformAtMoneyPath(cloned[i], path, segments, index + 1, visit, lenient);
|
|
1615
|
-
}
|
|
1616
|
-
}
|
|
1617
|
-
return { ...obj2, [seg.key]: cloned };
|
|
1618
|
-
}
|
|
1619
|
-
const clone2 = { ...obj2 };
|
|
1620
|
-
if (last) {
|
|
1621
|
-
visit(clone2, seg.key);
|
|
1622
|
-
} else {
|
|
1623
|
-
clone2[seg.key] = transformAtMoneyPath(clone2[seg.key], path, segments, index + 1, visit, lenient);
|
|
1624
|
-
}
|
|
1625
|
-
return clone2;
|
|
1626
|
-
}
|
|
1627
|
-
if (seg.array) {
|
|
1628
|
-
if (!Array.isArray(node)) {
|
|
1629
|
-
if (lenient) return node;
|
|
1630
|
-
throw new ValidationError(`moneyFields: path "${path}" declares "*[]" but the value is not an array`);
|
|
1631
|
-
}
|
|
1632
|
-
const cloned = [...node];
|
|
1633
|
-
if (last) {
|
|
1634
|
-
for (let i = 0; i < cloned.length; i++) visit(cloned, i);
|
|
1635
|
-
} else {
|
|
1636
|
-
for (let i = 0; i < cloned.length; i++) {
|
|
1637
|
-
cloned[i] = transformAtMoneyPath(cloned[i], path, segments, index + 1, visit, lenient);
|
|
1638
|
-
}
|
|
1639
|
-
}
|
|
1640
|
-
return cloned;
|
|
1641
|
-
}
|
|
1642
|
-
if (typeof node !== "object" || Array.isArray(node)) {
|
|
1643
|
-
if (lenient) return node;
|
|
1644
|
-
throw new ValidationError(
|
|
1645
|
-
`moneyFields: path "${path}" applies "*" to a non-object (${Array.isArray(node) ? 'array \u2014 use "*[]"' : typeof node})`
|
|
1646
|
-
);
|
|
1647
|
-
}
|
|
1648
|
-
const obj = node;
|
|
1649
|
-
const clone = { ...obj };
|
|
1650
|
-
for (const key of Object.keys(obj)) {
|
|
1651
|
-
const v = clone[key];
|
|
1652
|
-
if (v === null || v === void 0) continue;
|
|
1653
|
-
if (last) visit(clone, key);
|
|
1654
|
-
else clone[key] = transformAtMoneyPath(v, path, segments, index + 1, visit, lenient);
|
|
1655
|
-
}
|
|
1656
|
-
return clone;
|
|
1657
|
-
}
|
|
1658
|
-
|
|
1659
|
-
// src/via/money/normalize.ts
|
|
1660
|
-
function isMoneyValueObject(v) {
|
|
1661
|
-
return typeof v === "object" && v !== null && "currency" in v;
|
|
1662
|
-
}
|
|
1663
|
-
function quantizeAmount(field, input, scale, rounding) {
|
|
1664
|
-
const r = parseToScaledInt(input, scale, rounding);
|
|
1665
|
-
if (!r.ok) {
|
|
1666
|
-
if (r.reason === "precision") throw new MoneyPrecisionError(field, input, scale);
|
|
1667
|
-
throw new TypeError(`money: field "${field}" value ${JSON.stringify(input)} is not a finite decimal`);
|
|
1668
|
-
}
|
|
1669
|
-
return r.value.toString();
|
|
1670
|
-
}
|
|
1671
|
-
function canonicalizeStoredMoney(record, moneyFields) {
|
|
1672
|
-
if (record === null || record === void 0) return record;
|
|
1673
|
-
if (!moneyFields || Object.keys(moneyFields).length === 0) return record;
|
|
1674
|
-
return decodeMoneyFields(record, moneyFields, "raw");
|
|
1675
|
-
}
|
|
1676
|
-
function canonicalizeIncomingMoney(record, moneyFields) {
|
|
1677
|
-
if (!moneyFields || Object.keys(moneyFields).length === 0) return record;
|
|
1678
|
-
try {
|
|
1679
|
-
return decodeMoneyFields(
|
|
1680
|
-
quantizeMoneyFields(record, moneyFields),
|
|
1681
|
-
moneyFields,
|
|
1682
|
-
"raw"
|
|
1683
|
-
);
|
|
1684
|
-
} catch {
|
|
1685
|
-
return record;
|
|
1686
|
-
}
|
|
1687
|
-
}
|
|
1688
|
-
function quantizeValue(field, raw, desc) {
|
|
1689
|
-
if (desc.mode === "fixed") {
|
|
1690
|
-
const currency2 = desc.fixedCurrency;
|
|
1691
|
-
return quantizeAmount(field, raw, desc.scaleFor(currency2), desc.rounding);
|
|
1692
|
-
}
|
|
1693
|
-
let amount;
|
|
1694
|
-
let currency;
|
|
1695
|
-
if (isMoneyValueObject(raw)) {
|
|
1696
|
-
currency = String(raw.currency);
|
|
1697
|
-
amount = raw.amount;
|
|
1698
|
-
} else {
|
|
1699
|
-
const sole = desc.soleCurrency();
|
|
1700
|
-
if (sole === void 0) {
|
|
1701
|
-
throw new TypeError(
|
|
1702
|
-
`money: field "${field}" is multi-currency \u2014 write { amount, currency }, not a bare amount`
|
|
1703
|
-
);
|
|
1704
|
-
}
|
|
1705
|
-
currency = sole;
|
|
1706
|
-
amount = raw;
|
|
1707
|
-
}
|
|
1708
|
-
const scale = desc.scaleFor(currency);
|
|
1709
|
-
return { amount: quantizeAmount(field, amount, scale, desc.rounding), currency };
|
|
1710
|
-
}
|
|
1711
|
-
function quantizeMoneyFields(record, moneyFields) {
|
|
1712
|
-
let out = { ...record };
|
|
1713
|
-
for (const [path, desc] of Object.entries(moneyFields)) {
|
|
1714
|
-
if (isSimpleMoneyPath(path)) {
|
|
1715
|
-
const raw = out[path];
|
|
1716
|
-
if (raw === null || raw === void 0) continue;
|
|
1717
|
-
out[path] = quantizeValue(path, raw, desc);
|
|
1718
|
-
continue;
|
|
1719
|
-
}
|
|
1720
|
-
out = transformAtMoneyPath(
|
|
1721
|
-
out,
|
|
1722
|
-
path,
|
|
1723
|
-
parseMoneyPath(path),
|
|
1724
|
-
0,
|
|
1725
|
-
(container, key) => {
|
|
1726
|
-
const raw = container[key];
|
|
1727
|
-
if (raw === null || raw === void 0) return;
|
|
1728
|
-
container[key] = quantizeValue(path, raw, desc);
|
|
1729
|
-
},
|
|
1730
|
-
/* lenient */
|
|
1731
|
-
false
|
|
1732
|
-
);
|
|
1733
|
-
}
|
|
1734
|
-
return out;
|
|
1735
|
-
}
|
|
1736
|
-
function formatCurrency(decimal, currency, scale, locale) {
|
|
1737
|
-
const fmt = new Intl.NumberFormat(locale, {
|
|
1738
|
-
style: "currency",
|
|
1739
|
-
currency,
|
|
1740
|
-
minimumFractionDigits: scale,
|
|
1741
|
-
maximumFractionDigits: scale
|
|
1742
|
-
});
|
|
1743
|
-
return fmt.format(decimal);
|
|
1744
|
-
}
|
|
1745
|
-
function moneyScaledValue(stored, desc) {
|
|
1746
|
-
let raw;
|
|
1747
|
-
if (desc.mode === "fixed") {
|
|
1748
|
-
raw = stored;
|
|
1749
|
-
} else {
|
|
1750
|
-
if (!isMoneyValueObject(stored)) return null;
|
|
1751
|
-
raw = stored.amount;
|
|
1752
|
-
}
|
|
1753
|
-
if (typeof raw !== "string" && typeof raw !== "number") return null;
|
|
1754
|
-
try {
|
|
1755
|
-
return BigInt(String(raw));
|
|
1756
|
-
} catch {
|
|
1757
|
-
return null;
|
|
1758
|
-
}
|
|
1759
|
-
}
|
|
1760
|
-
function canonicalizeMoneyIndexKey(field, rawValue, moneyFields) {
|
|
1761
|
-
const desc = moneyFields[field];
|
|
1762
|
-
if (!desc || desc.mode !== "fixed") return void 0;
|
|
1763
|
-
return moneyScaledValue(rawValue, desc)?.toString();
|
|
1764
|
-
}
|
|
1765
|
-
function decodeValue(stored, desc) {
|
|
1766
|
-
let currency;
|
|
1767
|
-
let scaledIntString;
|
|
1768
|
-
if (desc.mode === "fixed") {
|
|
1769
|
-
if (typeof stored !== "string" && typeof stored !== "number") return null;
|
|
1770
|
-
currency = desc.fixedCurrency;
|
|
1771
|
-
scaledIntString = String(stored);
|
|
1772
|
-
} else {
|
|
1773
|
-
if (!isMoneyValueObject(stored)) return null;
|
|
1774
|
-
const amount = stored.amount;
|
|
1775
|
-
if (typeof stored.currency !== "string" || typeof amount !== "string" && typeof amount !== "number") return null;
|
|
1776
|
-
currency = stored.currency;
|
|
1777
|
-
scaledIntString = String(amount);
|
|
1778
|
-
}
|
|
1779
|
-
const scale = desc.scaleFor(currency);
|
|
1780
|
-
let decimal;
|
|
1781
|
-
try {
|
|
1782
|
-
decimal = formatScaledInt(BigInt(scaledIntString), scale);
|
|
1783
|
-
} catch {
|
|
1784
|
-
return null;
|
|
1785
|
-
}
|
|
1786
|
-
return {
|
|
1787
|
-
decoded: desc.mode === "fixed" ? decimal : { amount: decimal, currency },
|
|
1788
|
-
decimal,
|
|
1789
|
-
currency,
|
|
1790
|
-
scale
|
|
1791
|
-
};
|
|
1792
|
-
}
|
|
1793
|
-
function presentVirtualMoneyFields(record, moneyFields, virtualMoney, locale) {
|
|
1794
|
-
let out = record;
|
|
1795
|
-
const format = locale !== "raw";
|
|
1796
|
-
const fmtLocale = typeof locale === "string" && locale !== "raw" ? locale : "en-US";
|
|
1797
|
-
for (const field of virtualMoney) {
|
|
1798
|
-
const desc = moneyFields[field];
|
|
1799
|
-
if (!desc || desc.mode !== "fixed") continue;
|
|
1800
|
-
const raw = out[field];
|
|
1801
|
-
if (raw === null || raw === void 0) continue;
|
|
1802
|
-
if (typeof raw !== "number" && typeof raw !== "string") continue;
|
|
1803
|
-
const currency = desc.fixedCurrency;
|
|
1804
|
-
const scale = desc.scaleFor(currency);
|
|
1805
|
-
const r = parseToScaledInt(raw, scale, desc.rounding);
|
|
1806
|
-
if (!r.ok) continue;
|
|
1807
|
-
if (out === record) out = { ...record };
|
|
1808
|
-
const decimal = formatScaledInt(r.value, scale);
|
|
1809
|
-
out[field] = decimal;
|
|
1810
|
-
if (format) {
|
|
1811
|
-
out[`${field}Formatted`] = formatCurrency(decimal, currency, scale, fmtLocale);
|
|
1812
|
-
out[`${field}Number`] = Number(decimal);
|
|
1813
|
-
}
|
|
1814
|
-
}
|
|
1815
|
-
return out;
|
|
1816
|
-
}
|
|
1817
|
-
function decodeMoneyFields(record, moneyFields, locale) {
|
|
1818
|
-
let out = { ...record };
|
|
1819
|
-
const format = locale !== "raw";
|
|
1820
|
-
const fmtLocale = typeof locale === "string" && locale !== "raw" ? locale : "en-US";
|
|
1821
|
-
for (const [path, desc] of Object.entries(moneyFields)) {
|
|
1822
|
-
if (isSimpleMoneyPath(path)) {
|
|
1823
|
-
const stored = out[path];
|
|
1824
|
-
if (stored === null || stored === void 0) continue;
|
|
1825
|
-
const r = decodeValue(stored, desc);
|
|
1826
|
-
if (r === null) continue;
|
|
1827
|
-
out[path] = r.decoded;
|
|
1828
|
-
if (format) {
|
|
1829
|
-
out[`${path}Formatted`] = formatCurrency(r.decimal, r.currency, r.scale, fmtLocale);
|
|
1830
|
-
out[`${path}Number`] = Number(r.decimal);
|
|
1831
|
-
}
|
|
1832
|
-
continue;
|
|
1833
|
-
}
|
|
1834
|
-
out = transformAtMoneyPath(
|
|
1835
|
-
out,
|
|
1836
|
-
path,
|
|
1837
|
-
parseMoneyPath(path),
|
|
1838
|
-
0,
|
|
1839
|
-
(container, key) => {
|
|
1840
|
-
const stored = container[key];
|
|
1841
|
-
if (stored === null || stored === void 0) return;
|
|
1842
|
-
const r = decodeValue(stored, desc);
|
|
1843
|
-
if (r === null) return;
|
|
1844
|
-
container[key] = r.decoded;
|
|
1845
|
-
if (format && typeof key === "string" && !Array.isArray(container)) {
|
|
1846
|
-
container[`${key}Formatted`] = formatCurrency(r.decimal, r.currency, r.scale, fmtLocale);
|
|
1847
|
-
container[`${key}Number`] = Number(r.decimal);
|
|
1848
|
-
}
|
|
1849
|
-
},
|
|
1850
|
-
/* lenient */
|
|
1851
|
-
true
|
|
1852
|
-
);
|
|
1853
|
-
}
|
|
1854
|
-
return out;
|
|
1855
|
-
}
|
|
1856
|
-
|
|
1857
|
-
// src/via/money/where.ts
|
|
1858
|
-
function isMoneyValueObject2(v) {
|
|
1859
|
-
return typeof v === "object" && v !== null && "currency" in v;
|
|
1860
|
-
}
|
|
1861
|
-
function parseOperand(field, raw, desc) {
|
|
1862
|
-
let amount;
|
|
1863
|
-
let currency;
|
|
1864
|
-
if (desc.mode === "fixed") {
|
|
1865
|
-
currency = desc.fixedCurrency;
|
|
1866
|
-
amount = raw;
|
|
1867
|
-
} else if (isMoneyValueObject2(raw)) {
|
|
1868
|
-
currency = String(raw.currency);
|
|
1869
|
-
amount = raw.amount;
|
|
1870
|
-
} else {
|
|
1871
|
-
const sole = desc.soleCurrency();
|
|
1872
|
-
if (sole === void 0) {
|
|
1873
|
-
throw new MoneyUnsupportedError(
|
|
1874
|
-
`where("${field}"): field is multi-currency \u2014 compare against { amount, currency }, not a bare amount`
|
|
1875
|
-
);
|
|
1876
|
-
}
|
|
1877
|
-
currency = sole;
|
|
1878
|
-
amount = raw;
|
|
1879
|
-
}
|
|
1880
|
-
if (typeof amount !== "number" && typeof amount !== "string") {
|
|
1881
|
-
throw new MoneyUnsupportedError(
|
|
1882
|
-
`where("${field}"): operand ${JSON.stringify(raw)} is not a money amount`
|
|
1883
|
-
);
|
|
1884
|
-
}
|
|
1885
|
-
const r = parseToScaledInt(amount, desc.scaleFor(currency), desc.rounding);
|
|
1886
|
-
if (!r.ok) {
|
|
1887
|
-
throw new MoneyUnsupportedError(
|
|
1888
|
-
`where("${field}"): operand ${JSON.stringify(amount)} is not a finite decimal`
|
|
1889
|
-
);
|
|
1890
|
-
}
|
|
1891
|
-
return { scaled: r.value.toString(), currency };
|
|
1892
|
-
}
|
|
1893
|
-
function moneyFieldClause(field, op, value, desc) {
|
|
1894
|
-
switch (op) {
|
|
1895
|
-
case "==":
|
|
1896
|
-
case "!=":
|
|
1897
|
-
case "<":
|
|
1898
|
-
case "<=":
|
|
1899
|
-
case ">":
|
|
1900
|
-
case ">=": {
|
|
1901
|
-
const e = parseOperand(field, value, desc);
|
|
1902
|
-
return { mode: desc.mode, entries: [e] };
|
|
1903
|
-
}
|
|
1904
|
-
case "between": {
|
|
1905
|
-
if (!Array.isArray(value) || value.length !== 2) {
|
|
1906
|
-
throw new MoneyUnsupportedError(`where("${field}"): 'between' needs a [lo, hi] tuple`);
|
|
1907
|
-
}
|
|
1908
|
-
const lo = parseOperand(field, value[0], desc);
|
|
1909
|
-
const hi = parseOperand(field, value[1], desc);
|
|
1910
|
-
if (lo.currency !== hi.currency) {
|
|
1911
|
-
throw new MoneyUnsupportedError(
|
|
1912
|
-
`where("${field}"): 'between' bounds mix currencies (${lo.currency} vs ${hi.currency})`
|
|
1913
|
-
);
|
|
1914
|
-
}
|
|
1915
|
-
return { mode: desc.mode, entries: [lo, hi] };
|
|
1916
|
-
}
|
|
1917
|
-
case "in": {
|
|
1918
|
-
if (!Array.isArray(value)) {
|
|
1919
|
-
throw new MoneyUnsupportedError(`where("${field}"): 'in' needs an array of amounts`);
|
|
1920
|
-
}
|
|
1921
|
-
return { mode: desc.mode, entries: value.map((v) => parseOperand(field, v, desc)) };
|
|
1922
|
-
}
|
|
1923
|
-
default:
|
|
1924
|
-
throw new MoneyUnsupportedError(
|
|
1925
|
-
`where("${field}"): operator '${op}' is not supported on a money field`
|
|
1926
|
-
);
|
|
1927
|
-
}
|
|
1928
|
-
}
|
|
1929
|
-
function moneyIndexProbe(op, payload) {
|
|
1930
|
-
if (payload.mode !== "fixed") return void 0;
|
|
1931
|
-
if (op === "==") return payload.entries[0]?.scaled;
|
|
1932
|
-
if (op === "in") return payload.entries.map((e) => e.scaled);
|
|
1933
|
-
return void 0;
|
|
1934
|
-
}
|
|
1935
|
-
function readStored(actual, operand) {
|
|
1936
|
-
let amount;
|
|
1937
|
-
let currency;
|
|
1938
|
-
if (operand.mode === "fixed") {
|
|
1939
|
-
if (typeof actual !== "string" && typeof actual !== "number") return null;
|
|
1940
|
-
amount = actual;
|
|
1941
|
-
currency = operand.entries[0]?.currency ?? "";
|
|
1942
|
-
} else {
|
|
1943
|
-
if (!isMoneyValueObject2(actual)) return null;
|
|
1944
|
-
if (typeof actual.currency !== "string") return null;
|
|
1945
|
-
amount = actual.amount;
|
|
1946
|
-
currency = actual.currency;
|
|
1947
|
-
}
|
|
1948
|
-
if (typeof amount !== "string" && typeof amount !== "number") return null;
|
|
1949
|
-
try {
|
|
1950
|
-
return { scaled: BigInt(amount).toString(), currency };
|
|
1951
|
-
} catch {
|
|
1952
|
-
return null;
|
|
1953
|
-
}
|
|
1954
|
-
}
|
|
1955
|
-
function evaluateMoneyClause(actual, op, operand) {
|
|
1956
|
-
const stored = readStored(actual, operand);
|
|
1957
|
-
if (stored === null) return op === "!=";
|
|
1958
|
-
const a = BigInt(stored.scaled);
|
|
1959
|
-
if (op === "in") {
|
|
1960
|
-
return operand.entries.some(
|
|
1961
|
-
(e2) => e2.currency === stored.currency && BigInt(e2.scaled) === a
|
|
1962
|
-
);
|
|
1963
|
-
}
|
|
1964
|
-
if (op === "between") {
|
|
1965
|
-
const [lo, hi] = operand.entries;
|
|
1966
|
-
if (!lo || !hi || lo.currency !== stored.currency) return false;
|
|
1967
|
-
return a >= BigInt(lo.scaled) && a <= BigInt(hi.scaled);
|
|
1968
|
-
}
|
|
1969
|
-
const e = operand.entries[0];
|
|
1970
|
-
if (!e) return false;
|
|
1971
|
-
if (e.currency !== stored.currency) return op === "!=";
|
|
1972
|
-
const b = BigInt(e.scaled);
|
|
1973
|
-
switch (op) {
|
|
1974
|
-
case "==":
|
|
1975
|
-
return a === b;
|
|
1976
|
-
case "!=":
|
|
1977
|
-
return a !== b;
|
|
1978
|
-
case "<":
|
|
1979
|
-
return a < b;
|
|
1980
|
-
case "<=":
|
|
1981
|
-
return a <= b;
|
|
1982
|
-
case ">":
|
|
1983
|
-
return a > b;
|
|
1984
|
-
case ">=":
|
|
1985
|
-
return a >= b;
|
|
1986
|
-
default:
|
|
1987
|
-
return false;
|
|
1988
|
-
}
|
|
1989
|
-
}
|
|
1990
|
-
|
|
1991
|
-
// src/via/money/money-reducer.ts
|
|
1992
|
-
function toScaledIntFromAny(v, scale) {
|
|
1993
|
-
if (typeof v === "bigint") return v;
|
|
1994
|
-
if (typeof v === "number") {
|
|
1995
|
-
const r = parseToScaledInt(v, scale);
|
|
1996
|
-
return r.ok ? r.value : null;
|
|
1997
|
-
}
|
|
1998
|
-
if (typeof v === "string") {
|
|
1999
|
-
if (!v.includes(".")) {
|
|
2000
|
-
try {
|
|
2001
|
-
return BigInt(v);
|
|
2002
|
-
} catch {
|
|
2003
|
-
return null;
|
|
2004
|
-
}
|
|
2005
|
-
}
|
|
2006
|
-
const r = parseToScaledInt(v, scale);
|
|
2007
|
-
return r.ok ? r.value : null;
|
|
2008
|
-
}
|
|
2009
|
-
return null;
|
|
2010
|
-
}
|
|
2011
|
-
function readMoney(record, field, desc) {
|
|
2012
|
-
const raw = readPath(record, field);
|
|
2013
|
-
if (raw === null || raw === void 0) return null;
|
|
2014
|
-
if (desc.mode === "fixed") {
|
|
2015
|
-
const cur = desc.fixedCurrency;
|
|
2016
|
-
const value2 = toScaledIntFromAny(raw, desc.scaleFor(cur));
|
|
2017
|
-
return value2 === null ? null : { currency: cur, value: value2 };
|
|
2018
|
-
}
|
|
2019
|
-
if (typeof raw !== "object") return null;
|
|
2020
|
-
const o = raw;
|
|
2021
|
-
if (typeof o.currency !== "string") return null;
|
|
2022
|
-
const scale = desc.allows(o.currency) ? desc.scaleFor(o.currency) : 0;
|
|
2023
|
-
const value = toScaledIntFromAny(o.amount, scale);
|
|
2024
|
-
return value === null ? null : { currency: o.currency, value };
|
|
2025
|
-
}
|
|
2026
|
-
function targetScaleFor(desc, currency) {
|
|
2027
|
-
if (desc.allows(currency)) return desc.scaleFor(currency);
|
|
2028
|
-
const s = scaleForCurrency(currency);
|
|
2029
|
-
if (s === null) {
|
|
2030
|
-
throw new Error(`money: cannot determine scale for conversion target "${currency}"`);
|
|
2031
|
-
}
|
|
2032
|
-
return s;
|
|
2033
|
-
}
|
|
2034
|
-
function parseRate(rate) {
|
|
2035
|
-
const s = String(rate).trim();
|
|
2036
|
-
const neg = s.startsWith("-");
|
|
2037
|
-
const body = neg ? s.slice(1) : s;
|
|
2038
|
-
const dot = body.indexOf(".");
|
|
2039
|
-
const intPart = dot === -1 ? body : body.slice(0, dot);
|
|
2040
|
-
const fracPart = dot === -1 ? "" : body.slice(dot + 1);
|
|
2041
|
-
const int = BigInt((intPart === "" ? "0" : intPart) + fracPart);
|
|
2042
|
-
return { int: neg ? -int : int, scale: fracPart.length };
|
|
2043
|
-
}
|
|
2044
|
-
function divRoundHalfEven(n, d) {
|
|
2045
|
-
const q = n / d;
|
|
2046
|
-
const r = n % d;
|
|
2047
|
-
const twiceR = (r < 0n ? -r : r) * 2n;
|
|
2048
|
-
if (twiceR < d) return q;
|
|
2049
|
-
if (twiceR > d) return q + (n < 0n ? -1n : 1n);
|
|
2050
|
-
return q % 2n === 0n ? q : q + (n < 0n ? -1n : 1n);
|
|
2051
|
-
}
|
|
2052
|
-
function convertScaled(value, srcScale, rate, targetScale) {
|
|
2053
|
-
const { int: rateInt, scale: rateScale } = parseRate(rate);
|
|
2054
|
-
const product = value * rateInt;
|
|
2055
|
-
const curScale = srcScale + rateScale;
|
|
2056
|
-
if (curScale === targetScale) return product;
|
|
2057
|
-
if (curScale < targetScale) return product * 10n ** BigInt(targetScale - curScale);
|
|
2058
|
-
return divRoundHalfEven(product, 10n ** BigInt(curScale - targetScale));
|
|
2059
|
-
}
|
|
2060
|
-
function finalizeSum(state, desc, convertTo, fx) {
|
|
2061
|
-
if (convertTo !== void 0) {
|
|
2062
|
-
if (fx === void 0) {
|
|
2063
|
-
throw new Error(`money: sum convertTo "${convertTo}" requires an fx rate map`);
|
|
2064
|
-
}
|
|
2065
|
-
const targetScale = targetScaleFor(desc, convertTo);
|
|
2066
|
-
let total = 0n;
|
|
2067
|
-
for (const [cur, v] of state) {
|
|
2068
|
-
if (cur === convertTo) {
|
|
2069
|
-
total += convertScaled(v, desc.scaleFor(cur), 1, targetScale);
|
|
2070
|
-
continue;
|
|
2071
|
-
}
|
|
2072
|
-
const rate = fx[`${cur}->${convertTo}`];
|
|
2073
|
-
if (rate === void 0) {
|
|
2074
|
-
throw new Error(`money: no fx rate for "${cur}->${convertTo}"`);
|
|
2075
|
-
}
|
|
2076
|
-
total += convertScaled(v, desc.scaleFor(cur), rate, targetScale);
|
|
2077
|
-
}
|
|
2078
|
-
return formatScaledInt(total, targetScale);
|
|
2079
|
-
}
|
|
2080
|
-
if (desc.mode === "fixed") {
|
|
2081
|
-
const cur = desc.fixedCurrency;
|
|
2082
|
-
return formatScaledInt(state.get(cur) ?? 0n, desc.scaleFor(cur));
|
|
2083
|
-
}
|
|
2084
|
-
const out = {};
|
|
2085
|
-
for (const [cur, v] of state) out[cur] = formatScaledInt(v, desc.scaleFor(cur));
|
|
2086
|
-
return out;
|
|
2087
|
-
}
|
|
2088
|
-
function moneySumReducer(field, desc, convertTo, fx) {
|
|
2089
|
-
return {
|
|
2090
|
-
op: "sum",
|
|
2091
|
-
field,
|
|
2092
|
-
init: () => /* @__PURE__ */ new Map(),
|
|
2093
|
-
step: (state, record) => {
|
|
2094
|
-
const m = readMoney(record, field, desc);
|
|
2095
|
-
if (m) state.set(m.currency, (state.get(m.currency) ?? 0n) + m.value);
|
|
2096
|
-
return state;
|
|
2097
|
-
},
|
|
2098
|
-
remove: (state, record) => {
|
|
2099
|
-
const m = readMoney(record, field, desc);
|
|
2100
|
-
if (m) state.set(m.currency, (state.get(m.currency) ?? 0n) - m.value);
|
|
2101
|
-
return state;
|
|
2102
|
-
},
|
|
2103
|
-
finalize: (state) => finalizeSum(state, desc, convertTo, fx)
|
|
2104
|
-
};
|
|
2105
|
-
}
|
|
2106
|
-
function extremum(values, op) {
|
|
2107
|
-
let out = values[0];
|
|
2108
|
-
for (let i = 1; i < values.length; i++) {
|
|
2109
|
-
const v = values[i];
|
|
2110
|
-
if (op === "min" ? v < out : v > out) out = v;
|
|
2111
|
-
}
|
|
2112
|
-
return out;
|
|
2113
|
-
}
|
|
2114
|
-
function moneyMinMaxReducer(op, field, desc) {
|
|
2115
|
-
return {
|
|
2116
|
-
op,
|
|
2117
|
-
field,
|
|
2118
|
-
init: () => /* @__PURE__ */ new Map(),
|
|
2119
|
-
step: (state, record) => {
|
|
2120
|
-
const m = readMoney(record, field, desc);
|
|
2121
|
-
if (m) {
|
|
2122
|
-
const arr = state.get(m.currency);
|
|
2123
|
-
if (arr) arr.push(m.value);
|
|
2124
|
-
else state.set(m.currency, [m.value]);
|
|
2125
|
-
}
|
|
2126
|
-
return state;
|
|
2127
|
-
},
|
|
2128
|
-
remove: (state, record) => {
|
|
2129
|
-
const m = readMoney(record, field, desc);
|
|
2130
|
-
if (m) {
|
|
2131
|
-
const arr = state.get(m.currency);
|
|
2132
|
-
if (arr) {
|
|
2133
|
-
const idx = arr.indexOf(m.value);
|
|
2134
|
-
if (idx >= 0) arr.splice(idx, 1);
|
|
2135
|
-
}
|
|
2136
|
-
}
|
|
2137
|
-
return state;
|
|
2138
|
-
},
|
|
2139
|
-
finalize: (state) => {
|
|
2140
|
-
if (desc.mode === "fixed") {
|
|
2141
|
-
const cur = desc.fixedCurrency;
|
|
2142
|
-
const arr = state.get(cur);
|
|
2143
|
-
if (!arr || arr.length === 0) return null;
|
|
2144
|
-
return formatScaledInt(extremum(arr, op), desc.scaleFor(cur));
|
|
2145
|
-
}
|
|
2146
|
-
const out = {};
|
|
2147
|
-
for (const [cur, arr] of state) {
|
|
2148
|
-
if (arr.length > 0) out[cur] = formatScaledInt(extremum(arr, op), desc.scaleFor(cur));
|
|
2149
|
-
}
|
|
2150
|
-
return out;
|
|
2151
|
-
}
|
|
2152
|
-
};
|
|
2153
|
-
}
|
|
2154
|
-
function wrapMoneyReducers(spec, moneyFields) {
|
|
2155
|
-
let changed = false;
|
|
2156
|
-
const out = {};
|
|
2157
|
-
for (const [key, reducer] of Object.entries(spec)) {
|
|
2158
|
-
const field = reducer.field;
|
|
2159
|
-
const desc = field ? moneyFields[field] : void 0;
|
|
2160
|
-
if (desc && reducer.op === "avg") {
|
|
2161
|
-
throw new MoneyUnsupportedError(
|
|
2162
|
-
field,
|
|
2163
|
-
`avg() is not supported on money field "${field}" in v1 \u2014 use sum() and count() and divide at the boundary.`
|
|
2164
|
-
);
|
|
2165
|
-
}
|
|
2166
|
-
if (desc && (reducer.op === "sum" || reducer.op === "min" || reducer.op === "max")) {
|
|
2167
|
-
changed = true;
|
|
2168
|
-
out[key] = reducer.op === "sum" ? moneySumReducer(field, desc, reducer.convertTo, reducer.fx) : moneyMinMaxReducer(reducer.op, field, desc);
|
|
2169
|
-
} else {
|
|
2170
|
-
out[key] = reducer;
|
|
2171
|
-
}
|
|
2172
|
-
}
|
|
2173
|
-
return changed ? out : spec;
|
|
2174
|
-
}
|
|
2175
|
-
|
|
2176
|
-
// src/via/money/binding.ts
|
|
2177
|
-
function moneyBinding(moneyFields, virtualMoneyFields) {
|
|
2178
|
-
validateMoneyFieldPaths(moneyFields);
|
|
2179
|
-
const hasVirtualMoney = virtualMoneyFields !== void 0 && virtualMoneyFields.size > 0;
|
|
2180
|
-
const ordinaryPresentFields = hasVirtualMoney ? Object.fromEntries(Object.entries(moneyFields).filter(([f]) => !virtualMoneyFields.has(f))) : moneyFields;
|
|
2181
|
-
return {
|
|
2182
|
-
brand: "money",
|
|
2183
|
-
posture: { encryptedAtRest: "envelope", queryable: "ordered", exportable: true, forgettable: true },
|
|
2184
|
-
covers: (field) => field in moneyFields,
|
|
2185
|
-
ingest: (r) => canonicalizeIncomingMoney(r, moneyFields),
|
|
2186
|
-
canonicalizeStored: (r) => canonicalizeStoredMoney(r, moneyFields),
|
|
2187
|
-
encodeWrite: (r) => quantizeMoneyFields(r, moneyFields),
|
|
2188
|
-
present: (r, ctx) => decodeMoneyFields(r, ordinaryPresentFields, typeof ctx.locale === "string" ? ctx.locale : void 0),
|
|
2189
|
-
...hasVirtualMoney ? {
|
|
2190
|
-
presentLate: (r, ctx) => presentVirtualMoneyFields(r, moneyFields, virtualMoneyFields, typeof ctx.locale === "string" ? ctx.locale : void 0)
|
|
2191
|
-
} : {},
|
|
2192
|
-
buildClause: (field, op, value) => {
|
|
2193
|
-
const desc = moneyFields[field];
|
|
2194
|
-
if (!desc) return void 0;
|
|
2195
|
-
return moneyFieldClause(field, op, value, desc);
|
|
2196
|
-
},
|
|
2197
|
-
evaluateClause: (actual, op, payload) => evaluateMoneyClause(actual, op, payload),
|
|
2198
|
-
indexProbe: (op, payload) => moneyIndexProbe(op, payload),
|
|
2199
|
-
canonicalizeIndexKey: (field, rawValue) => canonicalizeMoneyIndexKey(field, rawValue, moneyFields),
|
|
2200
|
-
decodeResults: (r) => decodeMoneyFields(r, moneyFields, "raw"),
|
|
2201
|
-
compareForOrder: (field, a, b) => {
|
|
2202
|
-
const desc = moneyFields[field];
|
|
2203
|
-
if (!desc) return void 0;
|
|
2204
|
-
const av = moneyScaledValue(a, desc);
|
|
2205
|
-
const bv = moneyScaledValue(b, desc);
|
|
2206
|
-
if (av === null) return bv === null ? 0 : 1;
|
|
2207
|
-
if (bv === null) return -1;
|
|
2208
|
-
return av < bv ? -1 : av > bv ? 1 : 0;
|
|
2209
|
-
},
|
|
2210
|
-
wrapReducers: (spec) => wrapMoneyReducers(spec, moneyFields)
|
|
2211
|
-
};
|
|
2212
|
-
}
|
|
2213
|
-
function linkMoneyVia() {
|
|
2214
|
-
installViaBinder("money", (cfg) => {
|
|
2215
|
-
const c = cfg;
|
|
2216
|
-
return moneyBinding(c.moneyFields, c.virtualMoneyFields);
|
|
2217
|
-
});
|
|
2218
|
-
}
|
|
2219
|
-
|
|
2220
|
-
// src/via/money/descriptor.ts
|
|
2221
|
-
var MoneyPrecisionError = class extends NoydbError {
|
|
2222
|
-
constructor(field, value, scale) {
|
|
2223
|
-
super(
|
|
2224
|
-
"MONEY_PRECISION",
|
|
2225
|
-
`money: value ${JSON.stringify(value)} for field "${field}" exceeds scale ${scale} and no rounding mode is configured`
|
|
2226
|
-
);
|
|
2227
|
-
this.field = field;
|
|
2228
|
-
this.value = value;
|
|
2229
|
-
this.scale = scale;
|
|
2230
|
-
this.name = "MoneyPrecisionError";
|
|
2231
|
-
}
|
|
2232
|
-
field;
|
|
2233
|
-
value;
|
|
2234
|
-
scale;
|
|
2235
|
-
};
|
|
2236
|
-
var MoneyCurrencyError = class extends NoydbError {
|
|
2237
|
-
constructor(currency, reason, field) {
|
|
2238
|
-
super(
|
|
2239
|
-
"MONEY_CURRENCY",
|
|
2240
|
-
reason === "not-allowed" ? `money: currency "${currency}" is not allowed${field ? ` for field "${field}"` : ""}` : `money: no scale known for currency "${currency}"${field ? ` (field "${field}")` : ""} \u2014 pass an explicit scale / scaleOverrides`
|
|
2241
|
-
);
|
|
2242
|
-
this.currency = currency;
|
|
2243
|
-
this.reason = reason;
|
|
2244
|
-
this.field = field;
|
|
2245
|
-
this.name = "MoneyCurrencyError";
|
|
2246
|
-
}
|
|
2247
|
-
currency;
|
|
2248
|
-
reason;
|
|
2249
|
-
field;
|
|
2250
|
-
};
|
|
2251
|
-
var MoneyUnsupportedError = class extends NoydbError {
|
|
2252
|
-
constructor(field, message) {
|
|
2253
|
-
super(
|
|
2254
|
-
"MONEY_UNSUPPORTED",
|
|
2255
|
-
message ?? `money: operation is not supported on field "${field}" \u2014 use sum() and count() and divide at the boundary`
|
|
2256
|
-
);
|
|
2257
|
-
this.field = field;
|
|
2258
|
-
this.name = "MoneyUnsupportedError";
|
|
2259
|
-
}
|
|
2260
|
-
field;
|
|
2261
|
-
};
|
|
2262
|
-
function isMultiOptions(o) {
|
|
2263
|
-
return "currencies" in o;
|
|
2264
|
-
}
|
|
2265
|
-
function money(options) {
|
|
2266
|
-
linkMoneyVia();
|
|
2267
|
-
const hasFixed = "currency" in options;
|
|
2268
|
-
const hasMulti = "currencies" in options;
|
|
2269
|
-
if (hasFixed && hasMulti) {
|
|
2270
|
-
throw new TypeError("money: `currency` and `currencies` are mutually exclusive");
|
|
2271
|
-
}
|
|
2272
|
-
if (!hasFixed && !hasMulti) {
|
|
2273
|
-
throw new TypeError("money: one of `currency` or `currencies` is required");
|
|
2274
|
-
}
|
|
2275
|
-
const rounding = options.rounding;
|
|
2276
|
-
if (isMultiOptions(options)) {
|
|
2277
|
-
const overrides = options.scaleOverrides ?? {};
|
|
2278
|
-
const allowList = options.currencies;
|
|
2279
|
-
const allows = (c) => allowList === "any" ? true : allowList.includes(c);
|
|
2280
|
-
const scaleFor = (c) => {
|
|
2281
|
-
if (!allows(c)) throw new MoneyCurrencyError(c, "not-allowed");
|
|
2282
|
-
const s = overrides[c] ?? scaleForCurrency(c);
|
|
2283
|
-
if (s === null || s === void 0) throw new MoneyCurrencyError(c, "unknown-scale");
|
|
2284
|
-
return s;
|
|
2285
|
-
};
|
|
2286
|
-
if (allowList !== "any") for (const c of allowList) scaleFor(c);
|
|
2287
|
-
const soleCurrency = () => allowList !== "any" && allowList.length === 1 ? allowList[0] : void 0;
|
|
2288
|
-
return {
|
|
2289
|
-
_noydbMoney: true,
|
|
2290
|
-
_viaBrand: "money",
|
|
2291
|
-
mode: "multi",
|
|
2292
|
-
options,
|
|
2293
|
-
rounding,
|
|
2294
|
-
fixedCurrency: void 0,
|
|
2295
|
-
scaleFor,
|
|
2296
|
-
allows,
|
|
2297
|
-
soleCurrency
|
|
2298
|
-
};
|
|
2299
|
-
}
|
|
2300
|
-
const currency = options.currency;
|
|
2301
|
-
const resolvedScale = options.scale ?? scaleForCurrency(currency);
|
|
2302
|
-
if (resolvedScale === null || resolvedScale === void 0) {
|
|
2303
|
-
throw new MoneyCurrencyError(currency, "unknown-scale");
|
|
2304
|
-
}
|
|
2305
|
-
return {
|
|
2306
|
-
_noydbMoney: true,
|
|
2307
|
-
_viaBrand: "money",
|
|
2308
|
-
mode: "fixed",
|
|
2309
|
-
options,
|
|
2310
|
-
rounding,
|
|
2311
|
-
fixedCurrency: currency,
|
|
2312
|
-
scaleFor(c) {
|
|
2313
|
-
if (c !== currency) throw new MoneyCurrencyError(c, "not-allowed");
|
|
2314
|
-
return resolvedScale;
|
|
2315
|
-
},
|
|
2316
|
-
allows: (c) => c === currency,
|
|
2317
|
-
soleCurrency: () => currency
|
|
2318
|
-
};
|
|
2319
|
-
}
|
|
2320
|
-
function isMoneyDescriptor(x) {
|
|
2321
|
-
return typeof x === "object" && x !== null && x._noydbMoney === true;
|
|
2322
|
-
}
|
|
2323
|
-
|
|
2324
|
-
// src/via/money/arith.ts
|
|
2325
|
-
function parseAmount(label, amount, scale, rounding) {
|
|
2326
|
-
const r = parseToScaledInt(amount, scale, rounding);
|
|
2327
|
-
if (!r.ok) {
|
|
2328
|
-
throw new MoneyUnsupportedError(
|
|
2329
|
-
r.reason === "precision" ? `${label}: amount ${JSON.stringify(amount)} has more precision than scale ${scale} and no rounding mode is configured` : `${label}: amount ${JSON.stringify(amount)} is not a finite decimal`
|
|
2330
|
-
);
|
|
2331
|
-
}
|
|
2332
|
-
return r.value;
|
|
2333
|
-
}
|
|
2334
|
-
function resolveScale(label, amount, explicit) {
|
|
2335
|
-
if (explicit !== void 0) {
|
|
2336
|
-
if (!Number.isInteger(explicit) || explicit < 0) {
|
|
2337
|
-
throw new MoneyUnsupportedError(`${label}: scale must be a non-negative integer`);
|
|
2338
|
-
}
|
|
2339
|
-
return explicit;
|
|
2340
|
-
}
|
|
2341
|
-
const inferred = decimalScaleOf(amount);
|
|
2342
|
-
if (inferred === null) {
|
|
2343
|
-
throw new MoneyUnsupportedError(`${label}: amount ${JSON.stringify(amount)} is not a finite decimal`);
|
|
2344
|
-
}
|
|
2345
|
-
return inferred;
|
|
2346
|
-
}
|
|
2347
|
-
function mulRate(amount, rate, opts = {}) {
|
|
2348
|
-
const scale = resolveScale("mulRate", amount, opts.scale);
|
|
2349
|
-
const rounding = opts.rounding ?? "half-up";
|
|
2350
|
-
const a = parseAmount("mulRate", amount, scale, rounding);
|
|
2351
|
-
const rateScale = decimalScaleOf(rate);
|
|
2352
|
-
if (rateScale === null) {
|
|
2353
|
-
throw new MoneyUnsupportedError(`mulRate: rate ${JSON.stringify(rate)} is not a finite decimal`);
|
|
2354
|
-
}
|
|
2355
|
-
const r = parseToScaledInt(rate, rateScale);
|
|
2356
|
-
if (!r.ok) {
|
|
2357
|
-
throw new MoneyUnsupportedError(`mulRate: rate ${JSON.stringify(rate)} is not a finite decimal`);
|
|
2358
|
-
}
|
|
2359
|
-
const product = a * r.value;
|
|
2360
|
-
return formatScaledInt(rescaleScaledInt(product, scale + rateScale, scale, rounding), scale);
|
|
2361
|
-
}
|
|
2362
|
-
function allocate(amount, weights, opts = {}) {
|
|
2363
|
-
if (weights.length === 0) {
|
|
2364
|
-
throw new MoneyUnsupportedError("allocate: weights must not be empty");
|
|
2365
|
-
}
|
|
2366
|
-
const scale = resolveScale("allocate", amount, opts.scale);
|
|
2367
|
-
const a = parseAmount("allocate", amount, scale);
|
|
2368
|
-
let weightScale = 0;
|
|
2369
|
-
for (const w of weights) {
|
|
2370
|
-
const s = decimalScaleOf(w);
|
|
2371
|
-
if (s === null) {
|
|
2372
|
-
throw new MoneyUnsupportedError(`allocate: weight ${JSON.stringify(w)} is not a finite decimal`);
|
|
2373
|
-
}
|
|
2374
|
-
if (s > weightScale) weightScale = s;
|
|
2375
|
-
}
|
|
2376
|
-
const scaledWeights = weights.map((w) => {
|
|
2377
|
-
const r = parseToScaledInt(w, weightScale);
|
|
2378
|
-
if (!r.ok || r.value < 0n) {
|
|
2379
|
-
throw new MoneyUnsupportedError(`allocate: weight ${JSON.stringify(w)} must be a non-negative decimal`);
|
|
2380
|
-
}
|
|
2381
|
-
return r.value;
|
|
2382
|
-
});
|
|
2383
|
-
const sumW = scaledWeights.reduce((acc, w) => acc + w, 0n);
|
|
2384
|
-
if (sumW === 0n) {
|
|
2385
|
-
throw new MoneyUnsupportedError("allocate: weights must not all be zero");
|
|
2386
|
-
}
|
|
2387
|
-
const negative = a < 0n;
|
|
2388
|
-
const mag = negative ? -a : a;
|
|
2389
|
-
const base = [];
|
|
2390
|
-
const remainders = [];
|
|
2391
|
-
let distributed = 0n;
|
|
2392
|
-
for (let i = 0; i < scaledWeights.length; i++) {
|
|
2393
|
-
const product = mag * scaledWeights[i];
|
|
2394
|
-
const share = product / sumW;
|
|
2395
|
-
base.push(share);
|
|
2396
|
-
distributed += share;
|
|
2397
|
-
remainders.push({ index: i, rem: product % sumW });
|
|
2398
|
-
}
|
|
2399
|
-
let leftover = mag - distributed;
|
|
2400
|
-
remainders.sort((x, y) => y.rem > x.rem ? 1 : y.rem < x.rem ? -1 : x.index - y.index);
|
|
2401
|
-
for (const { index } of remainders) {
|
|
2402
|
-
if (leftover === 0n) break;
|
|
2403
|
-
base[index] = base[index] + 1n;
|
|
2404
|
-
leftover -= 1n;
|
|
2405
|
-
}
|
|
2406
|
-
return base.map((p) => formatScaledInt(negative && p !== 0n ? -p : p, scale));
|
|
2407
|
-
}
|
|
2408
|
-
|
|
2409
|
-
// src/via/money/branded.ts
|
|
2410
|
-
function asMoney(value) {
|
|
2411
|
-
if (!isMoneyLike(value)) {
|
|
2412
|
-
throw new MoneyUnsupportedError(`asMoney: ${JSON.stringify(value)} is not a finite decimal`);
|
|
2413
|
-
}
|
|
2414
|
-
return String(value).trim();
|
|
2415
|
-
}
|
|
2416
|
-
function isMoneyString(value) {
|
|
2417
|
-
return typeof value === "string" && isMoneyLike(value);
|
|
2418
|
-
}
|
|
2419
|
-
function moneyNumber(value) {
|
|
2420
|
-
if (!isMoneyLike(value)) {
|
|
2421
|
-
throw new MoneyUnsupportedError(`moneyNumber: ${JSON.stringify(value)} is not a finite decimal`);
|
|
2422
|
-
}
|
|
2423
|
-
return Number(value);
|
|
2424
|
-
}
|
|
2425
|
-
function isMoneyLike(value) {
|
|
2426
|
-
if (typeof value === "number") return Number.isFinite(value);
|
|
2427
|
-
if (typeof value !== "string") return false;
|
|
2428
|
-
return decimalScaleOf(value) !== null;
|
|
2429
638
|
}
|
|
2430
639
|
|
|
2431
640
|
// src/via/computed/descriptor.ts
|
|
@@ -2718,7 +927,6 @@ function dict(dimension, opts) {
|
|
|
2718
927
|
};
|
|
2719
928
|
}
|
|
2720
929
|
export {
|
|
2721
|
-
Aggregation,
|
|
2722
930
|
AlreadyElevatedError,
|
|
2723
931
|
AmendmentForbiddenError,
|
|
2724
932
|
AttestationError,
|
|
@@ -2759,19 +967,15 @@ export {
|
|
|
2759
967
|
CrossJoinTooLargeError,
|
|
2760
968
|
CustodyApi,
|
|
2761
969
|
CustodyNotEnabledError,
|
|
2762
|
-
DEED_RECORD_ID,
|
|
2763
970
|
DEFAULT_CHUNK_SIZE,
|
|
2764
971
|
DEFAULT_COVER_SCHEMA,
|
|
2765
972
|
DEFAULT_CROSS_JOIN_MAX_ROWS,
|
|
2766
973
|
DEFAULT_FRESHNESS_MS,
|
|
2767
974
|
DEFAULT_JOIN_MAX_ROWS,
|
|
2768
|
-
DELEGATIONS_COLLECTION,
|
|
2769
975
|
DICT_COLLECTION_PREFIX,
|
|
2770
976
|
DIRECTORY_RECORD_ID,
|
|
2771
977
|
DanglingReferenceError,
|
|
2772
978
|
DataResidencyError,
|
|
2773
|
-
DebugPlaintextError,
|
|
2774
|
-
DebugReservedFieldError,
|
|
2775
979
|
DecryptionError,
|
|
2776
980
|
DelegationTargetMissingError,
|
|
2777
981
|
DerivationCapExceededError,
|
|
@@ -2794,12 +998,7 @@ export {
|
|
|
2794
998
|
FieldNotQueryableError,
|
|
2795
999
|
FilenameSanitizationError,
|
|
2796
1000
|
ForgetStrategyNotConfiguredError,
|
|
2797
|
-
GROUPBY_MAX_CARDINALITY,
|
|
2798
|
-
GROUPBY_WARN_CARDINALITY,
|
|
2799
1001
|
GroupCardinalityError,
|
|
2800
|
-
GroupedAggregation,
|
|
2801
|
-
GroupedQuery,
|
|
2802
|
-
GroupedQueryN,
|
|
2803
1002
|
INDEXED_STORE_POLICY,
|
|
2804
1003
|
IllegalTransitionError,
|
|
2805
1004
|
ImportCapabilityError,
|
|
@@ -2818,9 +1017,7 @@ export {
|
|
|
2818
1017
|
LinkIntegrityError,
|
|
2819
1018
|
LocaleNotSpecifiedError,
|
|
2820
1019
|
Lru,
|
|
2821
|
-
MAGIC_LINK_CONTENT_INFO_PREFIX,
|
|
2822
1020
|
MAGIC_LINK_GRANTS_COLLECTION,
|
|
2823
|
-
MAGIC_LINK_KEK_INFO_PREFIX,
|
|
2824
1021
|
META_COLLECTION,
|
|
2825
1022
|
ManagedRecoveryNotEnrolledError,
|
|
2826
1023
|
MaterializedViewConfigError,
|
|
@@ -2888,7 +1085,6 @@ export {
|
|
|
2888
1085
|
ReservedVaultNameError,
|
|
2889
1086
|
RestrictRefUnresolvableError,
|
|
2890
1087
|
SCHEMAS_COLLECTION,
|
|
2891
|
-
SEALED_SECRET_RECORD_ID,
|
|
2892
1088
|
STATE_VAULT_NAME,
|
|
2893
1089
|
STRICT_POLICY,
|
|
2894
1090
|
SYNC_CREDENTIALS_COLLECTION,
|
|
@@ -2956,8 +1152,6 @@ export {
|
|
|
2956
1152
|
approveWithdrawal,
|
|
2957
1153
|
asMoney,
|
|
2958
1154
|
assertStrongSecret,
|
|
2959
|
-
assertTierAccess,
|
|
2960
|
-
avg,
|
|
2961
1155
|
base64ToBuffer,
|
|
2962
1156
|
blindUpdate,
|
|
2963
1157
|
bufferToBase64,
|
|
@@ -2972,7 +1166,6 @@ export {
|
|
|
2972
1166
|
computePatch,
|
|
2973
1167
|
computed,
|
|
2974
1168
|
coordinatedCutover,
|
|
2975
|
-
count,
|
|
2976
1169
|
createBundleStore,
|
|
2977
1170
|
createDeedOwner,
|
|
2978
1171
|
createEnforcer,
|
|
@@ -2985,7 +1178,6 @@ export {
|
|
|
2985
1178
|
decryptBytes,
|
|
2986
1179
|
decryptDeterministic,
|
|
2987
1180
|
decryptExtractedPartition,
|
|
2988
|
-
dekKey,
|
|
2989
1181
|
deleteCredential,
|
|
2990
1182
|
deleteIntent,
|
|
2991
1183
|
deleteUserEnvelope,
|
|
@@ -3005,7 +1197,6 @@ export {
|
|
|
3005
1197
|
dictKey,
|
|
3006
1198
|
diff,
|
|
3007
1199
|
diffVault,
|
|
3008
|
-
effectiveClearance,
|
|
3009
1200
|
enableDevUnlock,
|
|
3010
1201
|
encryptBytes,
|
|
3011
1202
|
encryptDeterministic,
|
|
@@ -3029,11 +1220,9 @@ export {
|
|
|
3029
1220
|
generateULID,
|
|
3030
1221
|
getCredential,
|
|
3031
1222
|
getIntent,
|
|
3032
|
-
groupAndReduce,
|
|
3033
1223
|
hasExportCapability,
|
|
3034
1224
|
hasImportCapability,
|
|
3035
1225
|
hasNoydbBundleMagic,
|
|
3036
|
-
hasRecoveryEnrolled,
|
|
3037
1226
|
hashEntry,
|
|
3038
1227
|
i18nText,
|
|
3039
1228
|
immutableGuard,
|
|
@@ -3060,8 +1249,6 @@ export {
|
|
|
3060
1249
|
isULID,
|
|
3061
1250
|
isViaFieldSpec,
|
|
3062
1251
|
isZodSchema,
|
|
3063
|
-
issueDelegation,
|
|
3064
|
-
recoverSecret as keyringRecoverSecret,
|
|
3065
1252
|
rotateSecret as keyringRotateSecret,
|
|
3066
1253
|
liberateVault,
|
|
3067
1254
|
listCredentials,
|
|
@@ -3070,40 +1257,30 @@ export {
|
|
|
3070
1257
|
listUsers,
|
|
3071
1258
|
listUsersWithEnvelopes,
|
|
3072
1259
|
listWithdrawalRequests,
|
|
3073
|
-
loadActiveDelegations,
|
|
3074
1260
|
loadCover,
|
|
3075
1261
|
loadDeedMarker,
|
|
3076
1262
|
loadDevUnlock,
|
|
3077
1263
|
loadPaperRecoveryEntries,
|
|
3078
1264
|
loadPersistedSchema,
|
|
3079
|
-
loadSealedSecret,
|
|
3080
|
-
loadShamirRecoveryEntries,
|
|
3081
1265
|
loadUserEnvelope,
|
|
3082
1266
|
loadVaultPolicy,
|
|
3083
1267
|
lockSchema,
|
|
3084
1268
|
lookup,
|
|
3085
1269
|
luhnCheck,
|
|
3086
1270
|
magicLinkGrantRecordId,
|
|
3087
|
-
max,
|
|
3088
1271
|
memoryObjectProjection,
|
|
3089
1272
|
memoryStore,
|
|
3090
1273
|
mergeCrdtStates,
|
|
3091
1274
|
mergePolicy,
|
|
3092
|
-
min,
|
|
3093
1275
|
mintPaperRecoveryEntry,
|
|
3094
|
-
mintShamirRecoveryEntry,
|
|
3095
1276
|
mintWrappedDeksBlob,
|
|
3096
1277
|
money,
|
|
3097
|
-
moneyMax,
|
|
3098
|
-
moneyMin,
|
|
3099
1278
|
moneyNumber,
|
|
3100
|
-
moneySum,
|
|
3101
1279
|
mulRate,
|
|
3102
1280
|
paddedIndex,
|
|
3103
1281
|
parseBytes,
|
|
3104
1282
|
parseIndex,
|
|
3105
1283
|
parseRsaOaepTlv,
|
|
3106
|
-
parseSealedEnvelope,
|
|
3107
1284
|
persistDirectoryConfig,
|
|
3108
1285
|
persistSchemaIfNeeded,
|
|
3109
1286
|
persistUserVisibility,
|
|
@@ -3114,21 +1291,16 @@ export {
|
|
|
3114
1291
|
readNoydbBundle,
|
|
3115
1292
|
readNoydbBundleHeader,
|
|
3116
1293
|
readPath,
|
|
3117
|
-
readPlaintextRecord,
|
|
3118
1294
|
readPod,
|
|
3119
1295
|
readPodCover,
|
|
3120
1296
|
readPodHeader,
|
|
3121
1297
|
readUserVisibility,
|
|
3122
1298
|
recoverUser,
|
|
3123
|
-
reduceRecords,
|
|
3124
|
-
reducerBuilder,
|
|
3125
1299
|
ref,
|
|
3126
1300
|
refArray,
|
|
3127
1301
|
rejectWithdrawal,
|
|
3128
1302
|
removeAuthenticator,
|
|
3129
1303
|
requestWithdrawal,
|
|
3130
|
-
resetBrotliSupportCache,
|
|
3131
|
-
resetJoinWarnings,
|
|
3132
1304
|
resolveClassifiedFields,
|
|
3133
1305
|
resolveSchema as resolveCoverSchema,
|
|
3134
1306
|
resolveCrdtSnapshot,
|
|
@@ -3137,7 +1309,6 @@ export {
|
|
|
3137
1309
|
resolveSequenceKey,
|
|
3138
1310
|
resolveSession,
|
|
3139
1311
|
revokeAllSessions,
|
|
3140
|
-
revokeDelegation,
|
|
3141
1312
|
revokeMagicLinkGrant,
|
|
3142
1313
|
revokeSession,
|
|
3143
1314
|
routeStore,
|
|
@@ -3145,21 +1316,17 @@ export {
|
|
|
3145
1316
|
saveCover,
|
|
3146
1317
|
savePaperRecoveryEntries,
|
|
3147
1318
|
savePersistedSchema,
|
|
3148
|
-
saveSealedSecret,
|
|
3149
|
-
saveShamirRecoveryEntries,
|
|
3150
1319
|
saveUserEnvelope,
|
|
3151
1320
|
saveVaultPolicy,
|
|
3152
1321
|
scaleForCurrency,
|
|
3153
1322
|
sealRsaOaepTlv,
|
|
3154
1323
|
sha256Hex,
|
|
3155
1324
|
staticDict,
|
|
3156
|
-
sum,
|
|
3157
1325
|
sweepBlobIntents,
|
|
3158
1326
|
tokenize,
|
|
3159
1327
|
transitionGuard,
|
|
3160
1328
|
unwrapDeksFromBlob,
|
|
3161
1329
|
unwrapDeksFromPaperEntry,
|
|
3162
|
-
unwrapDeksFromShamirEntry,
|
|
3163
1330
|
unwrapMagicLinkGrant,
|
|
3164
1331
|
validateCoverInput,
|
|
3165
1332
|
validateI18nTextValue,
|