harper 5.3.2 → 5.3.4
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/bin/cliOperations.ts +3 -3
- package/bin/copyDb.ts +4 -3
- package/components/DESIGN.md +12 -0
- package/components/packageComponent.ts +42 -17
- package/config/DESIGN.md +4 -0
- package/config/configUtils.ts +8 -8
- package/config/parseConfigFile.ts +11 -7
- package/dist/bin/cliOperations.js +3 -3
- package/dist/bin/cliOperations.js.map +1 -1
- package/dist/bin/copyDb.js +3 -3
- package/dist/bin/copyDb.js.map +1 -1
- package/dist/components/packageComponent.d.ts +9 -7
- package/dist/components/packageComponent.js +41 -16
- package/dist/components/packageComponent.js.map +1 -1
- package/dist/config/configUtils.js +4 -3
- package/dist/config/configUtils.js.map +1 -1
- package/dist/config/parseConfigFile.d.ts +1 -0
- package/dist/config/parseConfigFile.js +7 -3
- package/dist/config/parseConfigFile.js.map +1 -1
- package/dist/resources/DatabaseTransaction.d.ts +80 -11
- package/dist/resources/DatabaseTransaction.js +1100 -281
- package/dist/resources/DatabaseTransaction.js.map +1 -1
- package/dist/resources/LMDBTransaction.d.ts +1 -1
- package/dist/resources/LMDBTransaction.js +4 -3
- package/dist/resources/LMDBTransaction.js.map +1 -1
- package/dist/resources/Resource.js +40 -14
- package/dist/resources/Resource.js.map +1 -1
- package/dist/resources/RocksTransactionLogStore.js +1 -0
- package/dist/resources/RocksTransactionLogStore.js.map +1 -1
- package/dist/resources/Table.js +97 -34
- package/dist/resources/Table.js.map +1 -1
- package/dist/resources/analytics/write.js +34 -16
- package/dist/resources/analytics/write.js.map +1 -1
- package/dist/resources/databases.d.ts +5 -0
- package/dist/resources/databases.js +38 -4
- package/dist/resources/databases.js.map +1 -1
- package/dist/resources/recordLock.d.ts +9 -4
- package/dist/resources/recordLock.js +79 -19
- package/dist/resources/recordLock.js.map +1 -1
- package/dist/server/DurableSubscriptionsSession.d.ts +2 -0
- package/dist/server/DurableSubscriptionsSession.js +24 -24
- package/dist/server/DurableSubscriptionsSession.js.map +1 -1
- package/dist/server/mqtt.js +59 -29
- package/dist/server/mqtt.js.map +1 -1
- package/dist/server/serverHelpers/NodeAdapterResponse.js +18 -0
- package/dist/server/serverHelpers/NodeAdapterResponse.js.map +1 -1
- package/dist/server/serverHelpers/contentTypes.js +8 -2
- package/dist/server/serverHelpers/contentTypes.js.map +1 -1
- package/dist/server/serverHelpers/sharedMessageEncoding.js +3 -2
- package/dist/server/serverHelpers/sharedMessageEncoding.js.map +1 -1
- package/dist/utility/npmUtilities.js +18 -7
- package/dist/utility/npmUtilities.js.map +1 -1
- package/package.json +1 -1
- package/resources/DESIGN.md +46 -10
- package/resources/DatabaseTransaction.ts +1268 -279
- package/resources/LMDBTransaction.ts +4 -3
- package/resources/Resource.ts +39 -14
- package/resources/RocksTransactionLogStore.ts +1 -0
- package/resources/Table.ts +120 -41
- package/resources/analytics/DESIGN.md +17 -0
- package/resources/analytics/write.ts +28 -15
- package/resources/databases.ts +40 -4
- package/resources/record-locks.md +34 -17
- package/resources/recordLock.ts +89 -22
- package/server/DESIGN.md +9 -1
- package/server/DurableSubscriptionsSession.ts +22 -23
- package/server/mqtt.ts +54 -29
- package/server/serverHelpers/NodeAdapterResponse.ts +19 -1
- package/server/serverHelpers/contentTypes.ts +8 -1
- package/server/serverHelpers/sharedMessageEncoding.ts +3 -2
- package/studio/web/assets/Chat-DjZNWwwA.js +2100 -0
- package/studio/web/assets/FloatingChat-BWfKK_RX.js +23 -0
- package/studio/web/assets/SearchDialog-CdlNxWef.js +1 -0
- package/studio/web/assets/{abnfDiagram-O67JEVCF-raXE027J.js → abnfDiagram-YUKMZFIV-DPR2lFRk.js} +1 -1
- package/studio/web/assets/{apiToken-DNrfij0E.js → apiToken-DyI8IwU3.js} +1 -1
- package/studio/web/assets/applications-DgGopKJq.js +296 -0
- package/studio/web/assets/architecture-WOLXFQ4H-DtJHIK0_.js +1 -0
- package/studio/web/assets/{architectureDiagram-NJMV4G6O-C8_Eet7w.js → architectureDiagram-47P4ROYG-MDymp2dh.js} +3 -3
- package/studio/web/assets/authStore-DE1HFvVP.js +3 -0
- package/studio/web/assets/{blockDiagram-BEXU5L5S-DR6S5-1D.js → blockDiagram-E7TT5TSB-O5qRgZmd.js} +3 -3
- package/studio/web/assets/button-C37w80Uk.js +21 -0
- package/studio/web/assets/{c4Diagram-YGBWAQC7-BAfZ1G01.js → c4Diagram-CRA5TL53-BdPORGHo.js} +2 -2
- package/studio/web/assets/channel-yCStoq0_.js +1 -0
- package/studio/web/assets/{chevron-up-CFxbMGv2.js → chevron-up-DozwrIz-.js} +1 -1
- package/studio/web/assets/chunk-2BW5OAIV-DJ-iXJAw.js +10 -0
- package/studio/web/assets/{chunk-ZIGJFQKS-Cs8fUn7y.js → chunk-3YJQHVM4-BOgacqS1.js} +2 -2
- package/studio/web/assets/{chunk-7PRAP22T-KyqX6x3f.js → chunk-4EA7E6EY-C-7xqUBl.js} +1 -1
- package/studio/web/assets/{chunk-GWA4HPMP-DsejB6gA.js → chunk-7TKQ45FW-C3XA1bIN.js} +1 -1
- package/studio/web/assets/{chunk-GTNCS2PH-DGHLXyow.js → chunk-AW2ZBBNX-BdvgD1UW.js} +3 -3
- package/studio/web/assets/{chunk-5DYCD2WN-BceBfIHT.js → chunk-DBDB3WZW-CKKxIc6F.js} +1 -1
- package/studio/web/assets/{chunk-MBY4JIJT-BwSGweQP.js → chunk-E2ZNV5FY-bVefNHvz.js} +3 -3
- package/studio/web/assets/chunk-EU5HNXII-BHv2kWp4.js +213 -0
- package/studio/web/assets/chunk-FVRAUYC3-BoL_NO6b.js +2 -0
- package/studio/web/assets/{chunk-742MDFTN-CIkt8ijt.js → chunk-HJ2JQQFS-N_98oMRS.js} +1 -1
- package/studio/web/assets/{chunk-NETBCI7D-C8UnOw_f.js → chunk-HTAEGDNF-BQ1fSjPs.js} +1 -1
- package/studio/web/assets/{chunk-WEXAMYUT-BAIhTwyh.js → chunk-KQW6MTUR-qP0QiQAg.js} +1 -1
- package/studio/web/assets/chunk-NGNAAXSQ-DqoPQk1a.js +136 -0
- package/studio/web/assets/{chunk-UA2S7LBM-BHpEdH8D.js → chunk-NTY3LDVX-CSBFjlJg.js} +1 -1
- package/studio/web/assets/chunk-VPRB5NB3-BVHOe9Q-.js +129 -0
- package/studio/web/assets/{chunk-7INBJB4K-BpeAXyOi.js → chunk-XC4XBNZT-46uQwtF4.js} +10 -10
- package/studio/web/assets/{classDiagram-v2-NBCMYWYE-DmDPkt2u.js → classDiagram-v2-K4WV4PDN-Da0ps1Ui.js} +3 -3
- package/studio/web/assets/cn-DpF1PxBT.js +1 -0
- package/studio/web/assets/{createLucideIcon-fO5dL7D5.js → createLucideIcon-DLWRoWN-.js} +1 -1
- package/studio/web/assets/{cssMode-DBucrQdT.js → cssMode-4ddO86ey.js} +1 -1
- package/studio/web/assets/cynefin-EF2NZ3EQ-jQ2eCUaU.js +1 -0
- package/studio/web/assets/cynefinDiagram-3GCD6N5R-TNi5iS0E.js +62 -0
- package/studio/web/assets/dagre-W4DXFKR2-BnLHmA44.js +4 -0
- package/studio/web/assets/{diagram-22UHCM2B-DJCvcaWP.js → diagram-2UJZ2QOL-r_jehhZR.js} +7 -7
- package/studio/web/assets/{diagram-3UASUU5V-Du6VKWln.js → diagram-OVF4WLC6-BSUXGVh8.js} +11 -11
- package/studio/web/assets/{diagram-CDSNMT55-l5Ga0u-W.js → diagram-PFPMY2P6-BrVedycw.js} +3 -3
- package/studio/web/assets/{diagram-MLGK6HIB-CNQY47LA.js → diagram-UMYRVEAY-CBIaakBB.js} +1 -1
- package/studio/web/assets/diagram-YEKJPTXX-DFmmDXCl.js +41 -0
- package/studio/web/assets/diagram-ZIFT7M5P-CQfOWxOi.js +3 -0
- package/studio/web/assets/dist-9lpzt2Hn.js +11 -0
- package/studio/web/assets/{ebnfDiagram-ZINNZB2B-5OnkTpfi.js → ebnfDiagram-VR2GEFS7-FXA3Xe6e.js} +1 -1
- package/studio/web/assets/{editor-CHpQCuBq.js → editor-DATuu7_v.js} +1 -1
- package/studio/web/assets/elk-IJKZMXRS-CC4gfVRU.js +27 -0
- package/studio/web/assets/{erDiagram-OPXOYQCR-CQlCX84D.js → erDiagram-O2IAPWRE-C-BkDTPl.js} +2 -2
- package/studio/web/assets/errorText-8xV8WZBt.js +1 -0
- package/studio/web/assets/eventmodeling-K75KTNOO-D0dJ_PbR.js +1 -0
- package/studio/web/assets/flowDiagram-OXPTDLAJ-C1LEc_Hf.js +1 -0
- package/studio/web/assets/{ganttDiagram-FUAMR5RP-bloX3Voy.js → ganttDiagram-R7TSEDQI-85F44BIo.js} +4 -4
- package/studio/web/assets/{getAnalytics-C0FHjtdQ.js → getAnalytics-B1xpd4kG.js} +1 -1
- package/studio/web/assets/gitGraph-VSP46ZUC-BBmqrmjK.js +1 -0
- package/studio/web/assets/gitGraphDiagram-XJZIOB7I-CFY6iMwg.js +106 -0
- package/studio/web/assets/graphlib-DS17s2tU.js +1 -0
- package/studio/web/assets/{html-B1iA8q38.js → html-c4OKnEF1.js} +1 -1
- package/studio/web/assets/{htmlMode-CrL3YO5Y.js → htmlMode-yXjqUsW9.js} +1 -1
- package/studio/web/assets/index-CDnn0-PN.css +1 -0
- package/studio/web/assets/index-CIK9Nhgo.js +833 -0
- package/studio/web/assets/index.lazy-DQpKL_QQ.js +1 -0
- package/studio/web/assets/info-OHQRW6UA-Bs2aEco7.js +1 -0
- package/studio/web/assets/{infoDiagram-VRGFBTTK-B0J1132p.js → infoDiagram-5W2HQ5XZ-d6yG1yfZ.js} +1 -1
- package/studio/web/assets/invalidateEntityQueries-BkWXiqjz.js +1 -0
- package/studio/web/assets/{ishikawaDiagram-OU5B5YK6-BNk0tuQx.js → ishikawaDiagram-K3B6WC7H-CSYz-WRA.js} +2 -2
- package/studio/web/assets/{javascript-CXgQMkoa.js → javascript-CP1WPkLu.js} +1 -1
- package/studio/web/assets/{journeyDiagram-ZHPQQLJL-Be79RMQM.js → journeyDiagram-COXZFDF6-BDj6Wqcj.js} +3 -3
- package/studio/web/assets/{jsonMode-DycqRKOv.js → jsonMode-BWsIHqbb.js} +1 -1
- package/studio/web/assets/{kanban-definition-PNTS6WVX-4uuoQP9W.js → kanban-definition-P3RFRI5V-C2Bjfbp-.js} +6 -6
- package/studio/web/assets/{languageServices-HYHV1wDJ.js → languageServices-Ca72n4Ql.js} +1 -1
- package/studio/web/assets/{lspLanguageFeatures-CH_6SYiA.js → lspLanguageFeatures-BQdsSDeh.js} +1 -1
- package/studio/web/assets/{mermaid-parser.core-V1UYMeXV.js → mermaid-parser.core-Ch_T61iL.js} +6 -6
- package/studio/web/assets/mermaid.core-BOAgKzo5.js +44 -0
- package/studio/web/assets/{mindmap-definition-NLK3R4M7-C70Ctm0J.js → mindmap-definition-LZFPQGKD-DzOapzMM.js} +3 -3
- package/studio/web/assets/notifications-BYgO5-yk.js +1 -0
- package/studio/web/assets/notifications-DsGk-TnW.js +1 -0
- package/studio/web/assets/operations-Dy69AlTr.js +4 -0
- package/studio/web/assets/packet-JDAUHWVQ-CGHB_EIE.js +1 -0
- package/studio/web/assets/{pegDiagram-GJSIUBJH-d6z1cc7W.js → pegDiagram-BGZESJAR-ADzOIKrz.js} +1 -1
- package/studio/web/assets/pie-XZMESJXO-Bijz5Y2o.js +1 -0
- package/studio/web/assets/pieDiagram-CAPJLFHJ-VM7fvbwO.js +39 -0
- package/studio/web/assets/profile-DzQvoYBF.js +1 -0
- package/studio/web/assets/{quadrantDiagram-O4NWA36T-CIF5Qkou.js → quadrantDiagram-GDMTTRAM-Bmza84_j.js} +3 -3
- package/studio/web/assets/radar-ABXABTNO-IaC8pB63.js +1 -0
- package/studio/web/assets/railroad-I3PHUGI6-CCrSUqeq.js +1 -0
- package/studio/web/assets/railroad-abnf-LNEFI6M7-BhobVp-t.js +1 -0
- package/studio/web/assets/railroad-ebnf-DWYD2UWJ-OHhGUTEh.js +1 -0
- package/studio/web/assets/railroad-peg-JR7BVNR7-FupC3Jcn.js +1 -0
- package/studio/web/assets/{railroadDiagram-XR7U4H2S-y3Jv2U6N.js → railroadDiagram-SM67HX2B-CgFGOVI5.js} +1 -1
- package/studio/web/assets/regions-Sv_IN7XA.js +1 -0
- package/studio/web/assets/{register-DCN4QUii.js → register-AM2_79FO.js} +3 -3
- package/studio/web/assets/request-BJj8dbdU.js +2 -0
- package/studio/web/assets/{requirementDiagram-PLB6GJNP-ChINZEmu.js → requirementDiagram-X7JNWC4A-BHoQgkoT.js} +4 -4
- package/studio/web/assets/restartGate-D_e93lFE.js +1 -0
- package/studio/web/assets/restartUnconfirmed-BqcDZ__Y.js +1 -0
- package/studio/web/assets/sankeyDiagram-UM26HJRW-8tFu_oUe.js +40 -0
- package/studio/web/assets/sequenceDiagram-ZO4K6R2Y-jryb1rwT.js +169 -0
- package/studio/web/assets/setComponentFile-BCnAnxjR.js +1 -0
- package/studio/web/assets/setup-Ca4RpPzm.js +2 -0
- package/studio/web/assets/{stateDiagram-v2-GCMORJYK-Bs8RIb9K.js → stateDiagram-v2-TBUQTH76-CnWE5yFn.js} +2 -2
- package/studio/web/assets/status-D05eZ5pQ.js +61 -0
- package/studio/web/assets/{swimlanes-2SLR337P-B52xrf6t.js → swimlanes-N4OXWK64-CBlFzDJn.js} +1 -1
- package/studio/web/assets/swimlanesDiagram-K3J5GTZL-DvFLtUPi.js +8 -0
- package/studio/web/assets/{timeline-definition-EJHVYXUP-DJSITpQX.js → timeline-definition-YOQAKGHF-CFWqHrqI.js} +4 -4
- package/studio/web/assets/{toggleHighContrast-CfAp6Sxb.js → toggleHighContrast-JRkLfyfb.js} +1 -1
- package/studio/web/assets/treeView-D4JQ5SDB-CpV9zuVb.js +1 -0
- package/studio/web/assets/treemap-SAJKECNS-Bc94Tqiq.js +1 -0
- package/studio/web/assets/{tsMode-HZR0bfq4.js → tsMode-C_-eSRVR.js} +1 -1
- package/studio/web/assets/{typescript-UMJSfZyF.js → typescript-BYXigM_n.js} +1 -1
- package/studio/web/assets/{useEntityRestURL-B379CS-h.js → useEntityRestURL-HHmjsRm9.js} +1 -1
- package/studio/web/assets/usecaseDiagram-VIAY4XPW-Brf2xP3S.js +328 -0
- package/studio/web/assets/{vendor-core-6LhfJlRC.js → vendor-core-PejxhUWQ.js} +1 -1
- package/studio/web/assets/vendor-datadog-GjET_Cbn.js +6 -0
- package/studio/web/assets/{vendor-react-BOliS0BL.js → vendor-react-DSIx92Ld.js} +1 -1
- package/studio/web/assets/vendor-tanstack-C5Y-nrd2.js +2 -0
- package/studio/web/assets/vendor-ui-BBWHOEoQ.js +41 -0
- package/studio/web/assets/{vennDiagram-UO4OBE2U-DZTsDA4k.js → vennDiagram-BLWOH2XV-XxOyJPq_.js} +3 -3
- package/studio/web/assets/wardley-7MLQ67FV-DRW0zuE4.js +1 -0
- package/studio/web/assets/{wardleyDiagram-VNRHLVJA-qu_f7Tvl.js → wardleyDiagram-YMQ3BMBF-B3WskJ9W.js} +3 -3
- package/studio/web/assets/wasAReleasedBeforeB-D5grAaGM.js +1 -0
- package/studio/web/assets/{workers-Bn_0_L1R.js → workers-DY0ka4Y7.js} +1 -1
- package/studio/web/assets/{xml-CG2N-1r1.js → xml-CdGINpmN.js} +1 -1
- package/studio/web/assets/xychartDiagram-TAQBALBS-D5NV4Env.js +7 -0
- package/studio/web/assets/{yaml-68pda6Av.js → yaml-DYeF07_w.js} +1 -1
- package/studio/web/index.html +17 -15
- package/utility/npmUtilities.ts +17 -7
- package/studio/web/assets/Chat-CrxPD4ph.js +0 -2294
- package/studio/web/assets/FloatingChat-EXzoUQ-9.js +0 -23
- package/studio/web/assets/SearchDialog-7qRL8Yqx.js +0 -1
- package/studio/web/assets/_basePickBy-QJXUw_pr.js +0 -1
- package/studio/web/assets/_baseUniq-DR4vVjyC.js +0 -1
- package/studio/web/assets/alertDialog-BbWD9Xxa.js +0 -1
- package/studio/web/assets/applications-CdqjiSQe.js +0 -296
- package/studio/web/assets/architecture-7GRP2DOG-DDmz3hpI.js +0 -1
- package/studio/web/assets/arrow-up-D2g_57vT.js +0 -1
- package/studio/web/assets/authStore-CJCaADw9.js +0 -3
- package/studio/web/assets/button-DWwfgGWI.js +0 -21
- package/studio/web/assets/channel-D0AkPjJ8.js +0 -1
- package/studio/web/assets/chunk-3FUC2YCW-DuRp-j19.js +0 -2
- package/studio/web/assets/chunk-7M6MHVWA-h6WlaTzO.js +0 -213
- package/studio/web/assets/chunk-FOHPRMQF-DzxwRta7.js +0 -161
- package/studio/web/assets/chunk-O7XYJQB3-CBS3nZYV.js +0 -128
- package/studio/web/assets/chunk-Z7XXMR3K-DSHbImdf.js +0 -10
- package/studio/web/assets/cn-6T8VranJ.js +0 -1
- package/studio/web/assets/cynefin-OW5HDTMX-DIvbXLSj.js +0 -1
- package/studio/web/assets/cynefinDiagram-VND7K2PF-BdtaXiCE.js +0 -62
- package/studio/web/assets/dagre-6A5THRUB-C7RUWHyz.js +0 -4
- package/studio/web/assets/diagram-ATOU4E4O-dxRfeG4B.js +0 -3
- package/studio/web/assets/diagram-MPIPVDR6-7prveD1B.js +0 -41
- package/studio/web/assets/dist-BrRuMUzt.js +0 -11
- package/studio/web/assets/download-Cn6tPG4L.js +0 -1
- package/studio/web/assets/elk-276RUBZZ-DxDQPjQT.js +0 -27
- package/studio/web/assets/errorText-NpBmvk9I.js +0 -1
- package/studio/web/assets/eventmodeling-NTZA5JFV-DONQf5aG.js +0 -1
- package/studio/web/assets/flowDiagram-KWPJA3E3-BoZ8_QR1.js +0 -1
- package/studio/web/assets/gitGraph-4MIJSDKK-BrXWmJt2.js +0 -1
- package/studio/web/assets/gitGraphDiagram-X574FWY7-C2KnnZeY.js +0 -106
- package/studio/web/assets/graphlib-C9Tl7QrK.js +0 -1
- package/studio/web/assets/index-QLZw6xrU.css +0 -1
- package/studio/web/assets/index-qCLyhyah.js +0 -828
- package/studio/web/assets/index.lazy-DCx-DxIV.js +0 -2
- package/studio/web/assets/info-A6RAGUB7-BhzBHe4U.js +0 -1
- package/studio/web/assets/mermaid.core-1PX6R49U.js +0 -44
- package/studio/web/assets/notifications-BSObVIY1.js +0 -1
- package/studio/web/assets/notifications-DFLXk68b.js +0 -1
- package/studio/web/assets/packet-AYTQ26CC-DWbXHx5g.js +0 -1
- package/studio/web/assets/pie-WAS4IAKB-DjoTm3yr.js +0 -1
- package/studio/web/assets/pieDiagram-5QR66LMP-Dz3RHpDA.js +0 -39
- package/studio/web/assets/profile-TBjzOMIy.js +0 -1
- package/studio/web/assets/radar-RG4KPBEZ-CVBgjCOj.js +0 -1
- package/studio/web/assets/railroad-74A4TZTK-BdhXw10Q.js +0 -1
- package/studio/web/assets/railroad-abnf-HS5TGJTU-BcoQPN39.js +0 -1
- package/studio/web/assets/railroad-ebnf-LZEXJU2U-B1Lke2JN.js +0 -1
- package/studio/web/assets/railroad-peg-WCYAUIDC-D-oJFkiV.js +0 -1
- package/studio/web/assets/regions-C4an4H7e.js +0 -1
- package/studio/web/assets/restartGate-nHAFLDh-.js +0 -1
- package/studio/web/assets/sankeyDiagram-IPEJSGJF-D9AyLce2.js +0 -40
- package/studio/web/assets/sequenceDiagram-PO4LG4MO-hfk4aIEm.js +0 -169
- package/studio/web/assets/setComponentFile-BrqOM1Zm.js +0 -1
- package/studio/web/assets/setup-0v2MCm-E.js +0 -2
- package/studio/web/assets/status-DdezofUu.js +0 -61
- package/studio/web/assets/swimlanesDiagram-TC7HE7FX-DfN7BAP5.js +0 -8
- package/studio/web/assets/tabs-BCTQzoQK.js +0 -1
- package/studio/web/assets/treeView-Q6P3EWNA-C-epdxRo.js +0 -1
- package/studio/web/assets/treemap-WGGIJYW6-DOVyp_zw.js +0 -1
- package/studio/web/assets/usecaseDiagram-POWQR4AR-B6252cbq.js +0 -328
- package/studio/web/assets/vendor-datadog-ozKf-pts.js +0 -6
- package/studio/web/assets/vendor-tanstack-Bntfka-M.js +0 -2
- package/studio/web/assets/vendor-ui-9EYYDgoN.js +0 -41
- package/studio/web/assets/wardley-WFR3VGLG-Cfqoe6z4.js +0 -1
- package/studio/web/assets/xychartDiagram-PMCCYNJV-UrOKRsmR.js +0 -7
package/dist/resources/Table.js
CHANGED
|
@@ -118,6 +118,8 @@ const MAX_CONCURRENT_LMDB_HISTORY_REMOVALS = 1000;
|
|
|
118
118
|
// Each evict otherwise pays a full transaction commit, so batching amortizes that cost. LMDB already
|
|
119
119
|
// coalesces async writes per event turn (eventTurnBatching), so it keeps the per-record path.
|
|
120
120
|
const EVICTION_BATCH_SIZE = 100;
|
|
121
|
+
const COMMITTED_READ = { uncachedRead: true };
|
|
122
|
+
const UNRESOLVED = Symbol('unresolved');
|
|
121
123
|
// Cap on eviction-batch commits in flight at once, so commit I/O overlaps scan/staging without
|
|
122
124
|
// letting an unbounded number of open transactions (and their snapshots) accumulate.
|
|
123
125
|
const MAX_INFLIGHT_EVICTION_BATCHES = 4;
|
|
@@ -2969,10 +2971,22 @@ function makeTable(options) {
|
|
|
2969
2971
|
before: this.constructor.source?.relocate && !context?.source
|
|
2970
2972
|
? this.constructor.source.relocate.bind(this.constructor.source, id, undefined, context)
|
|
2971
2973
|
: undefined,
|
|
2972
|
-
commit: (txnTime, existingEntry, _retry, transaction) => {
|
|
2974
|
+
commit: (txnTime, existingEntry, _retry, transaction, committedBy) => {
|
|
2973
2975
|
const txnLogKey = isRocksDB && options?.version != null ? (transaction?.getTimestamp?.() ?? txnTime) : txnTime;
|
|
2974
|
-
|
|
2976
|
+
write.skipped = false;
|
|
2977
|
+
const precedesExisting = precedesExistingVersion(txnTime, existingEntry, options?.nodeId);
|
|
2978
|
+
if (precedesExisting < 0)
|
|
2979
|
+
return;
|
|
2980
|
+
if (
|
|
2981
|
+
// a re-delivered relocate would restamp the committed head, which can be another write of its transaction
|
|
2982
|
+
precedesExisting === 0 &&
|
|
2983
|
+
committedBy?.sourceApply &&
|
|
2984
|
+
isRocksDB &&
|
|
2985
|
+
txnLogKey === txnTime &&
|
|
2986
|
+
isHeadIdentity(identityBase(write, existingEntry, committedBy), txnTime, options?.nodeId)) {
|
|
2987
|
+
write.skipped = true;
|
|
2975
2988
|
return;
|
|
2989
|
+
}
|
|
2976
2990
|
const residency = _a.getResidencyRecord(options.residencyId);
|
|
2977
2991
|
let metadata = 0;
|
|
2978
2992
|
let newRecord = null;
|
|
@@ -3477,7 +3491,9 @@ function makeTable(options) {
|
|
|
3477
3491
|
return this;
|
|
3478
3492
|
}
|
|
3479
3493
|
/**
|
|
3480
|
-
* Release the lock this instance holds. Resolves true when this call cleared the native key lock
|
|
3494
|
+
* Release the lock this instance holds. Resolves true when this call cleared the native key lock;
|
|
3495
|
+
* false when it was already released, or when a commit of this lock's writes is still in flight
|
|
3496
|
+
* and the native key is returned once that commit settles.
|
|
3481
3497
|
* Works for both held (`{ hold: true }`) and transaction-scoped locks. After unlock() the
|
|
3482
3498
|
* instance is no longer lock-writable; writes through it require a fresh lock.
|
|
3483
3499
|
*/
|
|
@@ -3776,16 +3792,14 @@ function makeTable(options) {
|
|
|
3776
3792
|
}
|
|
3777
3793
|
},
|
|
3778
3794
|
before: writeToSource(),
|
|
3779
|
-
commit: (txnTime, existingEntry, retry, transaction) => {
|
|
3780
|
-
// Whether a prior attempt of THIS write appended its
|
|
3781
|
-
// save()
|
|
3782
|
-
//
|
|
3783
|
-
//
|
|
3784
|
-
//
|
|
3785
|
-
//
|
|
3786
|
-
//
|
|
3787
|
-
// from the last attempt's skipped state launders when a recommit round self-skips
|
|
3788
|
-
// (walk identity tie against its own staged record) before a fresh-transaction replay.
|
|
3795
|
+
commit: (txnTime, existingEntry, retry, transaction, committedBy) => {
|
|
3796
|
+
// Whether a prior attempt of THIS write appended its audit entry (sticky, set in
|
|
3797
|
+
// save()). A retry cannot infer that its record mutation committed from an exact log
|
|
3798
|
+
// match alone, so keyed probes stay shielded and walk skips require committed provenance.
|
|
3799
|
+
// Per-write: a transaction-wide retry flag would also suppress dedup for unrelated
|
|
3800
|
+
// deliveries co-batched with the conflict or fresh writes in a reused transaction.
|
|
3801
|
+
// Sticky: a proxy read from the last attempt's skipped state launders when a recommit
|
|
3802
|
+
// round self-skips (walk identity tie against its own staged record) before a replay.
|
|
3789
3803
|
const stagedOwnAuditEntry = retry && write.appendedAuditEntry === true;
|
|
3790
3804
|
write.skipped = false; // reset on each retry; cleanup happens after commit if still true
|
|
3791
3805
|
write.stagedEntry = undefined; // likewise: only set once this round actually stores a record
|
|
@@ -3867,6 +3881,16 @@ function makeTable(options) {
|
|
|
3867
3881
|
let belowAuditFloor = false;
|
|
3868
3882
|
let dedupVersionCouldBeRetained;
|
|
3869
3883
|
if (audit) {
|
|
3884
|
+
let identityRecord = UNRESOLVED;
|
|
3885
|
+
if (committedBy?.sourceApply &&
|
|
3886
|
+
isRocksDB &&
|
|
3887
|
+
!replaying &&
|
|
3888
|
+
precedesExisting === 0 &&
|
|
3889
|
+
txnLogKey === txnTime &&
|
|
3890
|
+
isHeadIdentity((identityRecord = identityBase(write, existingEntry, committedBy)), txnTime, options?.nodeId)) {
|
|
3891
|
+
write.skipped = true;
|
|
3892
|
+
return;
|
|
3893
|
+
}
|
|
3870
3894
|
// A re-delivered out-of-order write (full-copy audit-replay re-delivers writes) must not have
|
|
3871
3895
|
// its commutative ops re-folded. additionalAuditRefs is the record's own list of folded
|
|
3872
3896
|
// out-of-order versions, read with read-your-writes consistency, so this skips the duplicate up
|
|
@@ -3879,7 +3903,9 @@ function makeTable(options) {
|
|
|
3879
3903
|
// best-effort keyed lookup in the capped block below — see #1148. precedesExistingVersion(...)
|
|
3880
3904
|
// === 0 is the identity tie: same version AND same node (the local node is id 0, so an undefined
|
|
3881
3905
|
// options?.nodeId resolves to the same 0 the ref stored).
|
|
3882
|
-
if (
|
|
3906
|
+
if ((identityRecord === UNRESOLVED
|
|
3907
|
+
? identityBase(write, existingEntry, committedBy)
|
|
3908
|
+
: identityRecord)?.additionalAuditRefs?.some((ref) => ref.version === txnLogKey &&
|
|
3883
3909
|
precedesExistingVersion(txnTime, { version: txnTime, localTime: txnLogKey, key: id, nodeId: ref.nodeId }, options?.nodeId) === 0)) {
|
|
3884
3910
|
write.skipped = true;
|
|
3885
3911
|
return; // out-of-order write already folded into this record
|
|
@@ -3930,11 +3956,7 @@ function makeTable(options) {
|
|
|
3930
3956
|
// RocksDB-only: LMDB audit entries are keyed by local audit time, so this lookup doesn't apply
|
|
3931
3957
|
// there (LMDB keeps the exact unbounded walk). A miss (the keyed lookup can lag a back-to-back re-delivery — #1137)
|
|
3932
3958
|
// simply falls through to the walk, so this never changes correctness; the additionalAuditRefs
|
|
3933
|
-
// check above remains the read-your-writes guard.
|
|
3934
|
-
// failed attempt: that attempt already appended this write's own audit entry, so the lookup
|
|
3935
|
-
// would find it and skip the write as "already applied" when the record was never committed.
|
|
3936
|
-
// A recommit of the same transaction survived that skip only because the old write batch
|
|
3937
|
-
// still carried the put; a fresh-transaction replay (ERR_TRY_AGAIN) would drop the write.
|
|
3959
|
+
// check above remains the read-your-writes guard. Not on a same-write retry (see stagedOwnAuditEntry).
|
|
3938
3960
|
if (isRocksDB && !replaying && !stagedOwnAuditEntry && dedupVersionCouldBeRetained(txnLogKey)) {
|
|
3939
3961
|
const priorAudit = auditStore.get(txnLogKey, tableId, id, options?.nodeId);
|
|
3940
3962
|
if (priorAudit &&
|
|
@@ -3970,9 +3992,18 @@ function makeTable(options) {
|
|
|
3970
3992
|
// `previousNodeId` is never encoded, so absent there means the log is unknown and only the
|
|
3971
3993
|
// aggregate lookup can resolve a cross-origin predecessor.
|
|
3972
3994
|
let nodeId = initialAuditHead.nodeId ?? 0;
|
|
3995
|
+
// A retry can load a base restamped by an earlier saved publish/relocate from this
|
|
3996
|
+
// transaction. Those writes do not set stagedEntry, so priorStaged alone cannot
|
|
3997
|
+
// establish that the base is committed.
|
|
3998
|
+
const retryBaseIsCommitted = !priorStaged && !(stagedOwnAuditEntry && hasSavedSameKeySibling(write, committedBy));
|
|
3999
|
+
let walkOriginKnown = retryBaseIsCommitted;
|
|
3973
4000
|
const succeedingUpdates = []; // record the "future" updates, as we need to apply the updates in reverse order
|
|
3974
4001
|
const auditRefsToVisit = existingEntry.additionalAuditRefs
|
|
3975
|
-
? existingEntry.additionalAuditRefs.map((ref) => ({
|
|
4002
|
+
? existingEntry.additionalAuditRefs.map((ref) => ({
|
|
4003
|
+
localTime: ref.version,
|
|
4004
|
+
nodeId: ref.nodeId,
|
|
4005
|
+
originKnown: retryBaseIsCommitted,
|
|
4006
|
+
}))
|
|
3976
4007
|
: [];
|
|
3977
4008
|
// Out-of-order merges retain every existing branch head; per-origin log keys are not globally ordered.
|
|
3978
4009
|
if (existingEntry.additionalAuditRefs) {
|
|
@@ -3983,11 +4014,11 @@ function makeTable(options) {
|
|
|
3983
4014
|
let addedAuditRef = false;
|
|
3984
4015
|
let nextRef;
|
|
3985
4016
|
const visitedAuditRefs = new Set();
|
|
3986
|
-
const queuePreviousAuditRefs = (auditRecord) => {
|
|
4017
|
+
const queuePreviousAuditRefs = (auditRecord, originKnown) => {
|
|
3987
4018
|
const previousRefs = auditRecord.previousAdditionalAuditRefs;
|
|
3988
4019
|
if (previousRefs) {
|
|
3989
4020
|
for (const ref of previousRefs) {
|
|
3990
|
-
auditRefsToVisit.push({ localTime: ref.version, nodeId: ref.nodeId });
|
|
4021
|
+
auditRefsToVisit.push({ localTime: ref.version, nodeId: ref.nodeId, originKnown });
|
|
3991
4022
|
logger_ts_1.logger.debug?.('Adding audit ref from audit record to visit queue', {
|
|
3992
4023
|
version: ref.version,
|
|
3993
4024
|
nodeId: ref.nodeId,
|
|
@@ -4002,6 +4033,7 @@ function makeTable(options) {
|
|
|
4002
4033
|
: { txnLogKey: auditRecord.previousVersion, nodeId: auditRecord.previousNodeId };
|
|
4003
4034
|
localTime = previousHead.txnLogKey;
|
|
4004
4035
|
nodeId = previousHead.nodeId;
|
|
4036
|
+
walkOriginKnown = walkOriginKnown && previousHead.nodeId != null;
|
|
4005
4037
|
};
|
|
4006
4038
|
let walkSteps = 0;
|
|
4007
4039
|
let auditWalkCapped = false;
|
|
@@ -4017,9 +4049,7 @@ function makeTable(options) {
|
|
|
4017
4049
|
// A re-delivered write whose exact (version, nodeId) is already in the audit log was already
|
|
4018
4050
|
// applied; drop it rather than re-applying it (double-applying commutative ops) or writing a
|
|
4019
4051
|
// duplicate audit-only record. Used by the early-out and the depth-cap block below.
|
|
4020
|
-
//
|
|
4021
|
-
// appended this write's own audit entry, so the lookup would match it while the record was
|
|
4022
|
-
// never committed (see the up-front keyed dedup above).
|
|
4052
|
+
// Not for a same-write retry (see stagedOwnAuditEntry).
|
|
4023
4053
|
const isReDeliveredDuplicate = () => {
|
|
4024
4054
|
if (replaying || stagedOwnAuditEntry)
|
|
4025
4055
|
return false;
|
|
@@ -4047,12 +4077,14 @@ function makeTable(options) {
|
|
|
4047
4077
|
const auditRecord = auditStore.get(localTime, tableId, id, nodeId);
|
|
4048
4078
|
if (!auditRecord)
|
|
4049
4079
|
break;
|
|
4050
|
-
queuePreviousAuditRefs(auditRecord);
|
|
4080
|
+
queuePreviousAuditRefs(auditRecord, walkOriginKnown);
|
|
4051
4081
|
if (isRocksDB &&
|
|
4052
4082
|
!replaying &&
|
|
4053
|
-
|
|
4083
|
+
// on a retry only a link from committed state proves the write committed: an
|
|
4084
|
+
// orphaned log entry can match the identity but is never linked from a committed record
|
|
4085
|
+
(!stagedOwnAuditEntry || walkOriginKnown) &&
|
|
4054
4086
|
localTime === txnLogKey &&
|
|
4055
|
-
|
|
4087
|
+
(auditRecord.nodeId ?? 0) === (options?.nodeId ?? (0, nodeIdMapping_ts_1.getThisNodeId)(auditStore))) {
|
|
4056
4088
|
write.skipped = true;
|
|
4057
4089
|
return;
|
|
4058
4090
|
}
|
|
@@ -4066,9 +4098,8 @@ function makeTable(options) {
|
|
|
4066
4098
|
// orders the otherwise non-unique record clock without comparing keys across origins.
|
|
4067
4099
|
precedesExisting = txnLogKey > localTime ? 1 : -1;
|
|
4068
4100
|
}
|
|
4069
|
-
else if (replaying || stagedOwnAuditEntry) {
|
|
4070
|
-
//
|
|
4071
|
-
// the write itself, not proof that its primary-store mutation committed.
|
|
4101
|
+
else if (replaying || (stagedOwnAuditEntry && !walkOriginKnown)) {
|
|
4102
|
+
// replayed, or reached on a retry without committed provenance: not proof it committed
|
|
4072
4103
|
precedesExisting = 1;
|
|
4073
4104
|
}
|
|
4074
4105
|
else {
|
|
@@ -4150,6 +4181,7 @@ function makeTable(options) {
|
|
|
4150
4181
|
if (nextRef) {
|
|
4151
4182
|
localTime = auditedVersion = nextRef.localTime;
|
|
4152
4183
|
nodeId = nextRef.nodeId;
|
|
4184
|
+
walkOriginKnown = nextRef.originKnown;
|
|
4153
4185
|
logger_ts_1.logger.debug?.('Following additional audit ref to continue scanning', { localTime, nodeId });
|
|
4154
4186
|
}
|
|
4155
4187
|
} while (nextRef);
|
|
@@ -4975,6 +5007,7 @@ function makeTable(options) {
|
|
|
4975
5007
|
// scans), the read transaction reads against the latest committed data without pinning a
|
|
4976
5008
|
// consistent snapshot, so the scan doesn't hold a snapshot that blocks compaction.
|
|
4977
5009
|
const readTxn = txn.useReadTxn(target.snapshot === false);
|
|
5010
|
+
const readTxnGeneration = txn.readTxnGeneration;
|
|
4978
5011
|
// The explicit row filter participates in query execution: it is pushed into HNSW
|
|
4979
5012
|
// traversal for vector sorts, applied after conditions otherwise, and checked again after
|
|
4980
5013
|
// cache/source materialization below. A policy error aborts the query instead of silently
|
|
@@ -5093,7 +5126,8 @@ function makeTable(options) {
|
|
|
5093
5126
|
finally {
|
|
5094
5127
|
// We own the iteration here (no results.onDone consumer), so release the read
|
|
5095
5128
|
// transaction unconditionally — including when the drain throws — or the snapshot leaks.
|
|
5096
|
-
|
|
5129
|
+
if (readTxn)
|
|
5130
|
+
txn.doneReadTxn(readTxnGeneration);
|
|
5097
5131
|
}
|
|
5098
5132
|
let total;
|
|
5099
5133
|
if (wantExact) {
|
|
@@ -5137,7 +5171,8 @@ function makeTable(options) {
|
|
|
5137
5171
|
results.onDone = () => {
|
|
5138
5172
|
results.onDone = null; // ensure that it isn't called twice
|
|
5139
5173
|
txn.unregisterReadIterator(results);
|
|
5140
|
-
|
|
5174
|
+
if (readTxn)
|
|
5175
|
+
txn.doneReadTxn(readTxnGeneration);
|
|
5141
5176
|
};
|
|
5142
5177
|
// Recorded ownership: if the request dies before anything consumes these results, the
|
|
5143
5178
|
// transaction closes them itself rather than leaving its read snapshot pinned.
|
|
@@ -5147,7 +5182,8 @@ function makeTable(options) {
|
|
|
5147
5182
|
return results;
|
|
5148
5183
|
}
|
|
5149
5184
|
catch (error) {
|
|
5150
|
-
|
|
5185
|
+
if (readTxn)
|
|
5186
|
+
txn.doneReadTxn(readTxnGeneration);
|
|
5151
5187
|
throw error;
|
|
5152
5188
|
}
|
|
5153
5189
|
}
|
|
@@ -6966,6 +7002,7 @@ function makeTable(options) {
|
|
|
6966
7002
|
},
|
|
6967
7003
|
};
|
|
6968
7004
|
propertyResolvers.$highlights.directReturn = true;
|
|
7005
|
+
primaryKeyAttribute = undefined;
|
|
6969
7006
|
for (const attribute of this.attributes) {
|
|
6970
7007
|
if (attribute.isPrimaryKey)
|
|
6971
7008
|
primaryKeyAttribute = attribute;
|
|
@@ -8137,6 +8174,32 @@ function makeTable(options) {
|
|
|
8137
8174
|
if (!(existingEntry?.metadataFlags & exports.INVALIDATED))
|
|
8138
8175
|
return existingEntry;
|
|
8139
8176
|
}
|
|
8177
|
+
// The commit base is the committed record unless another write to the key already saved without being
|
|
8178
|
+
// skipped this round: a publish or relocate saves when it is added and restamps the base without staging it.
|
|
8179
|
+
function identityBase(write, existingEntry, transaction) {
|
|
8180
|
+
if (hasSavedSameKeySibling(write, transaction))
|
|
8181
|
+
return committedEntry(write.key);
|
|
8182
|
+
return existingEntry;
|
|
8183
|
+
}
|
|
8184
|
+
function hasSavedSameKeySibling(write, transaction) {
|
|
8185
|
+
for (let other = transaction?.writesByKey?.get(write.store)?.get(write.keyId); other; other = other.priorWrite) {
|
|
8186
|
+
if (other !== write &&
|
|
8187
|
+
other.saved &&
|
|
8188
|
+
!other.skipped &&
|
|
8189
|
+
other.committedOn === write.committedOn &&
|
|
8190
|
+
other.committedRound === write.committedRound)
|
|
8191
|
+
return true;
|
|
8192
|
+
}
|
|
8193
|
+
return false;
|
|
8194
|
+
}
|
|
8195
|
+
function committedEntry(id) {
|
|
8196
|
+
return primaryStore.getEntry(id, COMMITTED_READ);
|
|
8197
|
+
}
|
|
8198
|
+
function isHeadIdentity(entry, version, nodeId) {
|
|
8199
|
+
return (entry?.version === version &&
|
|
8200
|
+
(entry.nodeId ?? 0) === (nodeId ?? (0, nodeIdMapping_ts_1.getThisNodeId)(auditStore)) &&
|
|
8201
|
+
!entry.additionalAuditRefs?.length);
|
|
8202
|
+
}
|
|
8140
8203
|
function precedesExistingVersion(txnTime, existingEntry, nodeId) {
|
|
8141
8204
|
if (nodeId === undefined) {
|
|
8142
8205
|
nodeId = (0, nodeIdMapping_ts_1.getThisNodeId)(auditStore);
|