@harperfast/harper 5.2.12 → 5.2.14
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/components/Application.ts +7 -7
- package/components/componentLoader.ts +70 -33
- package/dist/components/Application.js +1 -7
- package/dist/components/Application.js.map +1 -1
- package/dist/components/componentLoader.d.ts +6 -0
- package/dist/components/componentLoader.js +60 -31
- package/dist/components/componentLoader.js.map +1 -1
- package/dist/resources/RocksTransactionLogStore.d.ts +4 -2
- package/dist/resources/RocksTransactionLogStore.js +12 -6
- package/dist/resources/RocksTransactionLogStore.js.map +1 -1
- package/dist/resources/Table.d.ts +2 -2
- package/dist/resources/Table.js +222 -65
- package/dist/resources/Table.js.map +1 -1
- package/dist/resources/replayLogs.js +25 -21
- package/dist/resources/replayLogs.js.map +1 -1
- package/dist/resources/transactionBroadcast.js +4 -6
- package/dist/resources/transactionBroadcast.js.map +1 -1
- package/dist/security/certificateVerification/index.js +40 -11
- package/dist/security/certificateVerification/index.js.map +1 -1
- package/dist/security/certificateVerification/trustedIssuers.d.ts +24 -0
- package/dist/security/certificateVerification/trustedIssuers.js +79 -0
- package/dist/security/certificateVerification/trustedIssuers.js.map +1 -0
- package/dist/security/certificateVerification/types.d.ts +1 -0
- package/dist/security/keys.js +4 -0
- package/dist/security/keys.js.map +1 -1
- package/dist/server/loadRootComponents.js +4 -2
- package/dist/server/loadRootComponents.js.map +1 -1
- package/dist/server/threads/manageThreads.d.ts +1 -0
- package/dist/server/threads/manageThreads.js +175 -24
- package/dist/server/threads/manageThreads.js.map +1 -1
- package/dist/utility/errors/hdbError.d.ts +8 -0
- package/dist/utility/errors/hdbError.js +29 -0
- package/dist/utility/errors/hdbError.js.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/resources/DESIGN.md +5 -0
- package/resources/RocksTransactionLogStore.ts +12 -6
- package/resources/Table.ts +216 -66
- package/resources/replayLogs.ts +25 -22
- package/resources/transactionBroadcast.ts +4 -4
- package/security/certificateVerification/index.ts +54 -13
- package/security/certificateVerification/trustedIssuers.ts +76 -0
- package/security/certificateVerification/types.ts +1 -0
- package/security/keys.ts +3 -0
- package/server/DESIGN.md +14 -13
- package/server/loadRootComponents.js +9 -2
- package/server/threads/manageThreads.js +176 -23
- package/studio/web/404.html +79 -0
- package/studio/web/assets/{Chat-CokJOjyX.js → Chat-C97PMlIn.js} +274 -247
- package/studio/web/assets/FloatingChat-BUlsFGMV.js +23 -0
- package/studio/web/assets/_basePickBy-QJXUw_pr.js +1 -0
- package/studio/web/assets/_baseUniq-DR4vVjyC.js +1 -0
- package/studio/web/assets/{abnfDiagram-VCTEODGH-B0BebmD2.js → abnfDiagram-O67JEVCF-DpPZWMOf.js} +1 -1
- package/studio/web/assets/{alertDialog-CQyAJJhl.js → alertDialog-UrbiMgQt.js} +1 -1
- package/studio/web/assets/{apiToken-B_g12QrM.js → apiToken-CPhbc_zN.js} +1 -1
- package/studio/web/assets/applications-D3Z6BVDl.js +296 -0
- package/studio/web/assets/architecture-7GRP2DOG-11l4Ny1l.js +1 -0
- package/studio/web/assets/architectureDiagram-NJMV4G6O-OmgLraID.js +36 -0
- package/studio/web/assets/authStore-5jSS5pTW.js +3 -0
- package/studio/web/assets/{blockDiagram-I7D4REHJ-BqguiadH.js → blockDiagram-BEXU5L5S-Cv7CD3Ai.js} +15 -4
- package/studio/web/assets/{button-BIsUKRZq.js → button-MFP9n8Ck.js} +1 -1
- package/studio/web/assets/c4Diagram-YGBWAQC7-Ds1vKYnN.js +38 -0
- package/studio/web/assets/channel-BDtouPd6.js +1 -0
- package/studio/web/assets/chevron-up-CFe8x5Bp.js +1 -0
- package/studio/web/assets/chunk-3FUC2YCW-DpnBPH8B.js +2 -0
- package/studio/web/assets/{chunk-GVQU2GXP-sbwVIQ8i.js → chunk-5DYCD2WN-LLLCQSzg.js} +1 -1
- package/studio/web/assets/{chunk-PWAF6VOD-1z1THyS5.js → chunk-742MDFTN-BL8J_pIO.js} +1 -1
- package/studio/web/assets/chunk-7INBJB4K-C-hJHiiK.js +62 -0
- package/studio/web/assets/chunk-7M6MHVWA-C6ZqkFbA.js +213 -0
- package/studio/web/assets/chunk-7PRAP22T-CUXM8BG6.js +1 -0
- package/studio/web/assets/chunk-DUW6YSOI-Dgx8z5s3.js +1 -0
- package/studio/web/assets/{chunk-FOHPRMQF-DHwB1DNv.js → chunk-FOHPRMQF-DzxwRta7.js} +9 -9
- package/studio/web/assets/{chunk-SVP7TREG-jtdAHw0S.js → chunk-GTNCS2PH-DJ2BFvS1.js} +1 -1
- package/studio/web/assets/{chunk-F27PBJKO-BVA5EPhV.js → chunk-GWA4HPMP-C42bSqLL.js} +1 -1
- package/studio/web/assets/chunk-J5ZVWO5B-oDCd-gWO.js +1 -0
- package/studio/web/assets/chunk-MBY4JIJT-C-5jz6Lo.js +72 -0
- package/studio/web/assets/chunk-NETBCI7D-D-bzlN4r.js +1 -0
- package/studio/web/assets/chunk-O7XYJQB3-ep14zA23.js +128 -0
- package/studio/web/assets/chunk-UA2S7LBM-BMRWRHED.js +1 -0
- package/studio/web/assets/{chunk-POPQ4Y6H-ClWhhkwW.js → chunk-WEXAMYUT-DdLYVdX1.js} +1 -1
- package/studio/web/assets/{chunk-XXDRQBXY-BoGZu3HH.js → chunk-XXDRQBXY-CbPh2l8S.js} +1 -1
- package/studio/web/assets/{chunk-OSK3NFVY-ByciRftO.js → chunk-Z7XXMR3K-BmKEDjcP.js} +3 -3
- package/studio/web/assets/{chunk-75Z2AOVW-QGQD6th2.js → chunk-ZIGJFQKS-DLZgdNxA.js} +2 -2
- package/studio/web/assets/classDiagram-v2-NBCMYWYE-DOI5vgKT.js +217 -0
- package/studio/web/assets/cose-bilkent-JH36ORCC-BSOszL11.js +1 -0
- package/studio/web/assets/createLucideIcon-bziYxJli.js +1 -0
- package/studio/web/assets/{css.worker-BD9HbRGW.js → css.worker-l1psR_wG.js} +13 -10
- package/studio/web/assets/{cssMode-DAjzPoBf.js → cssMode-DyLZPMjo.js} +1 -1
- package/studio/web/assets/cynefin-OW5HDTMX-BSW-DB7S.js +1 -0
- package/studio/web/assets/cynefinDiagram-VND7K2PF-CbAHEwxt.js +62 -0
- package/studio/web/assets/cytoscape.esm-BZkf-uXn.js +321 -0
- package/studio/web/assets/dagre-6A5THRUB-Csxewgs4.js +4 -0
- package/studio/web/assets/diagram-22UHCM2B-a0rt8tY4.js +200 -0
- package/studio/web/assets/{diagram-VX7I27RA-DccVJet6.js → diagram-3UASUU5V-lEj2SVNh.js} +2 -2
- package/studio/web/assets/{diagram-VSXAHHWV-fhEdmkwM.js → diagram-ATOU4E4O-HcrAeB-q.js} +3 -3
- package/studio/web/assets/{diagram-S7CK7UJ4-aoCVTtcy.js → diagram-CDSNMT55-CYxiuyEx.js} +3 -3
- package/studio/web/assets/{diagram-Z3DM3KII-D-RyJJb7.js → diagram-MLGK6HIB-ChbCJTgJ.js} +1 -1
- package/studio/web/assets/diagram-MPIPVDR6-DaX9Y-N3.js +41 -0
- package/studio/web/assets/dialog-DTepachC.js +1 -0
- package/studio/web/assets/{dist-kYfyPZP9.js → dist-BRuBKNNy.js} +1 -1
- package/studio/web/assets/{dist-DP8UjMB_.js → dist-Cz2Y6-6G.js} +2 -2
- package/studio/web/assets/download-CtostjYn.js +1 -0
- package/studio/web/assets/{ebnfDiagram-PWID7BFC-DJGpIpz_.js → ebnfDiagram-ZINNZB2B-CwAsENB1.js} +1 -1
- package/studio/web/assets/{editor-VUNQ-5Ye.js → editor-CFQ5kbiT.js} +1 -1
- package/studio/web/assets/editor.worker-CkkvdXvO.js +33 -0
- package/studio/web/assets/elk-276RUBZZ-Hexg9E4D.js +27 -0
- package/studio/web/assets/{erDiagram-RLTQ6QDP-CIfNlgkC.js → erDiagram-OPXOYQCR-CeC-wwO1.js} +15 -15
- package/studio/web/assets/eventmodeling-NTZA5JFV-CFb03e0o.js +1 -0
- package/studio/web/assets/flowDiagram-KWPJA3E3-Cidi00_Y.js +1 -0
- package/studio/web/assets/{ganttDiagram-EL5Y4UJY-BxToTzzD.js → ganttDiagram-FUAMR5RP-C2_Hhl1-.js} +2 -2
- package/studio/web/assets/{getAnalytics-GHK8ORfM.js → getAnalytics-CjthMQqF.js} +1 -1
- package/studio/web/assets/gitGraph-4MIJSDKK-xIk5Vuew.js +1 -0
- package/studio/web/assets/{gitGraphDiagram-WWUBYQGX-Dwntd4-x.js → gitGraphDiagram-X574FWY7-CMxJ34up.js} +4 -4
- package/studio/web/assets/graphlib-C9Tl7QrK.js +1 -0
- package/studio/web/assets/{html-CFqhtdfa.js → html-DdMBJEGu.js} +1 -1
- package/studio/web/assets/{html.worker-DsMmVtuG.js → html.worker-DdwM4IrA.js} +12 -9
- package/studio/web/assets/{htmlMode-CpgOTfjz.js → htmlMode-DNtBx3OV.js} +1 -1
- package/studio/web/assets/index-CPoDzQTe.css +1 -0
- package/studio/web/assets/index-zZCxAIEb.js +824 -0
- package/studio/web/assets/index.lazy-CKbsHbSN.js +2 -0
- package/studio/web/assets/info-A6RAGUB7-o49TEbj-.js +1 -0
- package/studio/web/assets/infoDiagram-VRGFBTTK-Cjhh7yzZ.js +2 -0
- package/studio/web/assets/{ishikawaDiagram-5VMMS53U-D9Xh2r6X.js → ishikawaDiagram-OU5B5YK6-C63aXRmh.js} +2 -2
- package/studio/web/assets/{javascript-9l5JXJwc.js → javascript-Dy6KbeHT.js} +1 -1
- package/studio/web/assets/{journeyDiagram-3NMN7TZE-CokIi6ll.js → journeyDiagram-ZHPQQLJL-D_o0P5Mu.js} +3 -3
- package/studio/web/assets/json.worker-CSi2hF-a.js +65 -0
- package/studio/web/assets/{jsonMode-BJBH-iR0.js → jsonMode-BiuDVrzl.js} +1 -1
- package/studio/web/assets/{kanban-definition-UXKFOSKX-CukSFJfX.js → kanban-definition-PNTS6WVX-CTI9SSxY.js} +7 -7
- package/studio/web/assets/{katex-CXMH3UgJ.js → katex-ZlcWpGUi.js} +2 -2
- package/studio/web/assets/languageServices-Dk8_6B25.js +1 -0
- package/studio/web/assets/linear-Ds1AeO4V.js +1 -0
- package/studio/web/assets/{lspLanguageFeatures-sNVDopx3.js → lspLanguageFeatures-DwJKXzQa.js} +2 -2
- package/studio/web/assets/{mermaid-parser.core-BlEsOWNO.js → mermaid-parser.core-C2lcH_jP.js} +3 -3
- package/studio/web/assets/mermaid.core-BG5bjfIG.js +44 -0
- package/studio/web/assets/{mindmap-definition-YA3MSWOX-IprMc_0j.js → mindmap-definition-NLK3R4M7-BK7ho6JD.js} +24 -24
- package/studio/web/assets/{notifications-BukjVuVe.js → notifications-DJqAtWxD.js} +1 -1
- package/studio/web/assets/{notifications-DvBJIIO0.js → notifications-DsDtb41c.js} +1 -1
- package/studio/web/assets/packet-AYTQ26CC-BHPy6KBV.js +1 -0
- package/studio/web/assets/{pegDiagram-XKGWAZYB-BNuPDLZY.js → pegDiagram-GJSIUBJH-DzjwG3jO.js} +1 -1
- package/studio/web/assets/pie-WAS4IAKB-D0cP-DTU.js +1 -0
- package/studio/web/assets/{pieDiagram-E7YTZNPT-DqNb6Ht2.js → pieDiagram-5QR66LMP-C_hOP9Lv.js} +2 -2
- package/studio/web/assets/profile-zTGUN51x.js +1 -0
- package/studio/web/assets/{quadrantDiagram-AXDQQJYC-BGH9E2YR.js → quadrantDiagram-O4NWA36T-CZW8PbV1.js} +3 -3
- package/studio/web/assets/radar-RG4KPBEZ-C8fk0U81.js +1 -0
- package/studio/web/assets/railroad-74A4TZTK-B60FWm17.js +1 -0
- package/studio/web/assets/railroad-abnf-HS5TGJTU-CLMVZvH0.js +1 -0
- package/studio/web/assets/railroad-ebnf-LZEXJU2U--tlwFoVB.js +1 -0
- package/studio/web/assets/railroad-peg-WCYAUIDC-Dpuslblm.js +1 -0
- package/studio/web/assets/{railroadDiagram-O6MQD6OU-DGTPh2KZ.js → railroadDiagram-XR7U4H2S-DyyNmgbU.js} +1 -1
- package/studio/web/assets/regions-SOtABPB9.js +1 -0
- package/studio/web/assets/{register-CU-gCfLP.js → register-7JezVakc.js} +39 -39
- package/studio/web/assets/{requirementDiagram-BXWQKSXE-BJnO6uLz.js → requirementDiagram-PLB6GJNP-C4H-mLKu.js} +11 -11
- package/studio/web/assets/{rolldown-runtime-hePW80VL.js → rolldown-runtime-Dd_uD5pT.js} +1 -1
- package/studio/web/assets/sankeyDiagram-IPEJSGJF-DHDyga4c.js +40 -0
- package/studio/web/assets/sequenceDiagram-PO4LG4MO-CdNcHXRI.js +169 -0
- package/studio/web/assets/setComponentFile-BavlhfY0.js +1 -0
- package/studio/web/assets/{setup-DG3Ws0Gg.js → setup-04yVzr2I.js} +2 -2
- package/studio/web/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
- package/studio/web/assets/{src-CMc7m_Ut.js → src-D0vMJQRr.js} +1 -1
- package/studio/web/assets/stateDiagram-v2-GCMORJYK-CpKuXq15.js +291 -0
- package/studio/web/assets/status-g_mNYE7j.js +61 -0
- package/studio/web/assets/swimlanes-2SLR337P-NRHa2D8I.js +1 -0
- package/studio/web/assets/swimlanesDiagram-TC7HE7FX-BBk4t4hO.js +8 -0
- package/studio/web/assets/{tabs-BrHu7gJi.js → tabs-CnQ_zenf.js} +1 -1
- package/studio/web/assets/{time-Cclkb7kQ.js → time-Ci1v4fvT.js} +1 -1
- package/studio/web/assets/timeline-definition-EJHVYXUP-D39Y-xpq.js +120 -0
- package/studio/web/assets/toggleHighContrast-i2FjCrzO.js +49 -0
- package/studio/web/assets/treeView-Q6P3EWNA-CRWR9OqD.js +1 -0
- package/studio/web/assets/treemap-WGGIJYW6-ZfXyJgLO.js +1 -0
- package/studio/web/assets/{ts.worker-DpaaFKhy.js → ts.worker-DDMUrpqh.js} +118 -115
- package/studio/web/assets/{tsMode-D3T_5QzW.js → tsMode-DGeWfx0W.js} +5 -5
- package/studio/web/assets/{typescript-BegjUvtB.js → typescript-62_1FUbs.js} +1 -1
- package/studio/web/assets/{useEntityRestURL-BicFpx_N.js → useEntityRestURL-DSVwev9J.js} +1 -1
- package/studio/web/assets/useLocalStorage-BYoZF60G.js +1 -0
- package/studio/web/assets/usecaseDiagram-POWQR4AR-jf-zIDZ_.js +328 -0
- package/studio/web/assets/vendor-core-BdkdbUek.js +63 -0
- package/studio/web/assets/vendor-datadog-fCQhBHGk.js +6 -0
- package/studio/web/assets/vendor-react-izWchTRL.js +9 -0
- package/studio/web/assets/vendor-tanstack-CQ1aRjVa.js +2 -0
- package/studio/web/assets/vendor-ui-aE1tHcW7.js +41 -0
- package/studio/web/assets/vennDiagram-UO4OBE2U-BKYAZUh_.js +34 -0
- package/studio/web/assets/wardley-WFR3VGLG-BO7f36ci.js +1 -0
- package/studio/web/assets/{wardleyDiagram-VM6X3IG4-CjrkKWUR.js → wardleyDiagram-VNRHLVJA-Djb0JDQc.js} +3 -3
- package/studio/web/assets/{workers-Bmx4l_9B.js → workers-Cs52GyHv.js} +1 -1
- package/studio/web/assets/x-vYntCxm4.js +1 -0
- package/studio/web/assets/{xml-Bg40Rcra.js → xml-Co5ow_Ix.js} +1 -1
- package/studio/web/assets/{xychartDiagram-S5SC5T6Z-Biok4GYV.js → xychartDiagram-PMCCYNJV-BQh9ubvb.js} +3 -3
- package/studio/web/assets/{yaml-DolDvfXE.js → yaml-BcngpXye.js} +1 -1
- package/studio/web/assets/yaml.worker-DAK2o_H1.js +479 -0
- package/studio/web/auth/fabric-globe-dark.png +0 -0
- package/studio/web/auth/fabric-globe-light.png +0 -0
- package/studio/web/auth/fabric-platform-dark.png +0 -0
- package/studio/web/auth/fabric-platform-light.png +0 -0
- package/studio/web/index.html +15 -15
- package/utility/errors/hdbError.ts +26 -0
- package/studio/web/assets/FloatingChat-h9BJo6YG.js +0 -23
- package/studio/web/assets/applications-Dlq5kJ2O.js +0 -296
- package/studio/web/assets/architecture-7GRP2DOG-LB-MLAAb.js +0 -1
- package/studio/web/assets/architectureDiagram-5GKGNRK7-7SW3GD-K.js +0 -36
- package/studio/web/assets/authStore-C3Nfubqr.js +0 -3
- package/studio/web/assets/c4Diagram-7LVT6UL2-LBNf8t_X.js +0 -38
- package/studio/web/assets/channel-yictG-U-.js +0 -1
- package/studio/web/assets/chevron-up-DtKGqDn3.js +0 -1
- package/studio/web/assets/chunk-4HAMMTFA-DWtTut21.js +0 -62
- package/studio/web/assets/chunk-DU6HZSFF-Chq20Ba5.js +0 -127
- package/studio/web/assets/chunk-GMAD6QVW-BeS7S07A.js +0 -72
- package/studio/web/assets/chunk-IMKFNOWR-Bnh3tAVd.js +0 -231
- package/studio/web/assets/chunk-L3NEJ4N5-COfUyKII.js +0 -1
- package/studio/web/assets/chunk-P2QGCYS3-CP1VhG_c.js +0 -1
- package/studio/web/assets/chunk-SHT3W25Y-LpQkMsah.js +0 -168
- package/studio/web/assets/chunk-TICWLB2K-VOwzetX-.js +0 -206
- package/studio/web/assets/classDiagram-ZZMXUADV-VaEwSy_g.js +0 -1
- package/studio/web/assets/classDiagram-v2-VYDZK3BY-VaEwSy_g.js +0 -1
- package/studio/web/assets/cose-bilkent-JH36ORCC-Cuuf67Bh.js +0 -1
- package/studio/web/assets/createLucideIcon-CzW9508A.js +0 -1
- package/studio/web/assets/cynefin-OW5HDTMX-BbdbCvub.js +0 -1
- package/studio/web/assets/cynefinDiagram-5FMLGOSQ-TP-aIqbt.js +0 -62
- package/studio/web/assets/cytoscape.esm-C2x7inlt.js +0 -321
- package/studio/web/assets/dagre-GXQ25YYZ-DShnGpGo.js +0 -4
- package/studio/web/assets/dagre-PrKaheQc.js +0 -1
- package/studio/web/assets/diagram-UQ7AKVKN-DglXtQ6x.js +0 -41
- package/studio/web/assets/dialog-Cn2uWgD4.js +0 -1
- package/studio/web/assets/download-B5T5r7ss.js +0 -1
- package/studio/web/assets/editor.worker-DwcOiOeP.js +0 -30
- package/studio/web/assets/eventmodeling-NTZA5JFV-CLxnp2CR.js +0 -1
- package/studio/web/assets/flowDiagram-HODETNUW-BIbhmz9f.js +0 -1
- package/studio/web/assets/gitGraph-4MIJSDKK-D2s2w8lE.js +0 -1
- package/studio/web/assets/graphlib-DS17s2tU.js +0 -1
- package/studio/web/assets/index-7RMEgVG1.css +0 -1
- package/studio/web/assets/index-ZQ1upnh7.js +0 -824
- package/studio/web/assets/index.lazy-HDafSRxx.js +0 -2
- package/studio/web/assets/info-A6RAGUB7-DYjkvb0C.js +0 -1
- package/studio/web/assets/infoDiagram-27XIBGKW-Bnp1FJE5.js +0 -2
- package/studio/web/assets/json.worker-fO_hOLCP.js +0 -62
- package/studio/web/assets/languageServices-0ZvgO63b.js +0 -1
- package/studio/web/assets/linear-Cnt8506Q.js +0 -1
- package/studio/web/assets/mermaid.core-BlkGaMIH.js +0 -44
- package/studio/web/assets/packet-AYTQ26CC-Bi3V04Zi.js +0 -1
- package/studio/web/assets/pie-WAS4IAKB-_6DoDbng.js +0 -1
- package/studio/web/assets/profile-B-jyYdzV.js +0 -1
- package/studio/web/assets/radar-RG4KPBEZ-DDdVczcL.js +0 -1
- package/studio/web/assets/railroad-74A4TZTK-BJUP4Jds.js +0 -1
- package/studio/web/assets/railroad-abnf-HS5TGJTU-Bm3L1L0h.js +0 -1
- package/studio/web/assets/railroad-ebnf-LZEXJU2U-CKzLGlkw.js +0 -1
- package/studio/web/assets/railroad-peg-WCYAUIDC-S8xLjslx.js +0 -1
- package/studio/web/assets/regions-GN6Mu5aH.js +0 -1
- package/studio/web/assets/sankeyDiagram-P5KCCOFB-0vSOdymH.js +0 -40
- package/studio/web/assets/sequenceDiagram-WJ2MYXX4-hETizDWE.js +0 -162
- package/studio/web/assets/setComponentFile-D7Fww0lC.js +0 -1
- package/studio/web/assets/sizeCapture-INFHLROL-B0uUizjq.js +0 -1
- package/studio/web/assets/stateDiagram-D77RDMKH-CdYQ_KtC.js +0 -1
- package/studio/web/assets/stateDiagram-v2-MP3YSRHH-CdKuzQMT.js +0 -1
- package/studio/web/assets/status-koJd66XF.js +0 -61
- package/studio/web/assets/swimlanes-42K2YHIH-B8cHIpU4.js +0 -1
- package/studio/web/assets/swimlanesDiagram-VR7AAH4N-DmOSJwaH.js +0 -8
- package/studio/web/assets/timeline-definition-24CTP7MA-BJWYSXqF.js +0 -120
- package/studio/web/assets/toggleHighContrast-CGksgPgv.js +0 -49
- package/studio/web/assets/treeView-Q6P3EWNA-qxe_v6CQ.js +0 -1
- package/studio/web/assets/treemap-WGGIJYW6-dDo97XXF.js +0 -1
- package/studio/web/assets/useLocalStorage-BqMR3D8_.js +0 -1
- package/studio/web/assets/vendor-core-c2JRRJpV.js +0 -58
- package/studio/web/assets/vendor-datadog-CLUcJXOo.js +0 -6
- package/studio/web/assets/vendor-react-CJV_K1u4.js +0 -9
- package/studio/web/assets/vendor-tanstack-DxzraizX.js +0 -1
- package/studio/web/assets/vendor-ui-BUjK0h8a.js +0 -41
- package/studio/web/assets/vennDiagram-4TSXK5OY-A3i-lCdl.js +0 -34
- package/studio/web/assets/wardley-WFR3VGLG-B0ik-_6g.js +0 -1
- package/studio/web/assets/x-DIzaLEdK.js +0 -1
- package/studio/web/assets/yaml.worker-BDL8_iuk.js +0 -454
package/dist/resources/Table.js
CHANGED
|
@@ -102,6 +102,20 @@ const EVICTION_BATCH_SIZE = 100;
|
|
|
102
102
|
// letting an unbounded number of open transactions (and their snapshots) accumulate.
|
|
103
103
|
const MAX_INFLIGHT_EVICTION_BATCHES = 4;
|
|
104
104
|
const CACHEABLE_STATUS_CODES = new Set([200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414, 501]);
|
|
105
|
+
// Smallest forward sample `getRecordCount` will extrapolate a record rate from; below it the scan runs
|
|
106
|
+
// to completion and reports an exact count.
|
|
107
|
+
const MIN_ESTIMATOR_SAMPLE = 1_000;
|
|
108
|
+
// Budget intervals the forward scan may spend before it must estimate rather than keep scanning.
|
|
109
|
+
const MAX_ESTIMATE_CHECKPOINTS = 20;
|
|
110
|
+
// A store estimate's `count`, or 0 when the store answered with a shape that cannot be trusted --
|
|
111
|
+
// DESIGN.md's invariant for this API family is that such an answer degrades rather than poisons.
|
|
112
|
+
function usableCount(estimate) {
|
|
113
|
+
const { count, confidence } = estimate ?? {};
|
|
114
|
+
// `confidence` needs its own finiteness check, not just the range: `null >= 0 && null <= 1` is true
|
|
115
|
+
if (!Number.isFinite(count) || count < 0 || !Number.isFinite(confidence) || confidence < 0 || confidence > 1)
|
|
116
|
+
return 0;
|
|
117
|
+
return count;
|
|
118
|
+
}
|
|
105
119
|
envMngr.initSync();
|
|
106
120
|
const LMDB_PREFETCH_WRITES = envMngr.get(hdbTerms_ts_1.CONFIG_PARAMS.STORAGE_PREFETCHWRITES);
|
|
107
121
|
const LOCK_TIMEOUT = 10000;
|
|
@@ -1534,7 +1548,7 @@ function makeTable(options) {
|
|
|
1534
1548
|
records: './', // an href to the records themselves
|
|
1535
1549
|
name: tableName,
|
|
1536
1550
|
database: databaseName,
|
|
1537
|
-
auditSize: auditStore
|
|
1551
|
+
auditSize: auditStore?.getStats().entryCount,
|
|
1538
1552
|
attributes,
|
|
1539
1553
|
recordCount: undefined,
|
|
1540
1554
|
estimatedRecordRange: undefined,
|
|
@@ -2485,7 +2499,10 @@ function makeTable(options) {
|
|
|
2485
2499
|
// getRange yields ascending by audit-log key, so the first entry is the oldest retained.
|
|
2486
2500
|
// Mirror replicationConnection's retention check and the cleanup key basis (localTime ??
|
|
2487
2501
|
// version). Fall back to the nominal time-based purge floor when the log is empty/unavailable.
|
|
2488
|
-
for (const entry of auditStore.getRange({
|
|
2502
|
+
for (const entry of auditStore.getRange({
|
|
2503
|
+
start: 1,
|
|
2504
|
+
log: auditStore.logFor(options?.nodeId, options?.viaNodeId).name,
|
|
2505
|
+
})) {
|
|
2489
2506
|
oldestRetainedAuditTime = entry.localTime ?? entry.version;
|
|
2490
2507
|
break;
|
|
2491
2508
|
}
|
|
@@ -2509,7 +2526,7 @@ function makeTable(options) {
|
|
|
2509
2526
|
// A recommit of the same transaction survived that skip only because the old write batch
|
|
2510
2527
|
// still carried the put; a fresh-transaction replay (ERR_TRY_AGAIN) would drop the write.
|
|
2511
2528
|
if (isRocksDB && !stagedOwnAuditEntry && dedupVersionCouldBeRetained(txnTime)) {
|
|
2512
|
-
const priorAudit = auditStore.get(txnTime, tableId, id, options?.nodeId);
|
|
2529
|
+
const priorAudit = auditStore.get(txnTime, tableId, id, options?.nodeId, options?.viaNodeId);
|
|
2513
2530
|
if (priorAudit &&
|
|
2514
2531
|
priorAudit.version === txnTime &&
|
|
2515
2532
|
precedesExistingVersion(txnTime, { version: txnTime, localTime: txnTime, key: id, nodeId: priorAudit.nodeId }, options?.nodeId) === 0) {
|
|
@@ -2558,7 +2575,7 @@ function makeTable(options) {
|
|
|
2558
2575
|
return false;
|
|
2559
2576
|
if (!dedupVersionCouldBeRetained(txnTime))
|
|
2560
2577
|
return false; // pre-retention version — skip the end-of-log scan (best-effort; see above)
|
|
2561
|
-
const duplicate = auditStore.get(txnTime, tableId, id, options?.nodeId);
|
|
2578
|
+
const duplicate = auditStore.get(txnTime, tableId, id, options?.nodeId, options?.viaNodeId);
|
|
2562
2579
|
return (duplicate &&
|
|
2563
2580
|
duplicate.version === txnTime &&
|
|
2564
2581
|
precedesExistingVersion(txnTime, { version: txnTime, localTime: txnTime, key: id, nodeId: duplicate.nodeId }, options?.nodeId) === 0);
|
|
@@ -2966,6 +2983,7 @@ function makeTable(options) {
|
|
|
2966
2983
|
commit: (txnTime, existingEntry, retry, transaction) => {
|
|
2967
2984
|
write.stagedEntry = undefined; // reset per round; set below once the removal is applied
|
|
2968
2985
|
write.superseded = false; // reset per round, as in the update path
|
|
2986
|
+
write.skipped = false;
|
|
2969
2987
|
// what a preceding write in this transaction left for this key is what gets removed
|
|
2970
2988
|
// from the indices here, not the pre-transaction record (harper#1968)
|
|
2971
2989
|
const priorStagedOp = (0, DatabaseTransaction_ts_1.priorStagedWrite)(write);
|
|
@@ -2984,6 +3002,20 @@ function makeTable(options) {
|
|
|
2984
3002
|
if (precedesExistingVersion(txnTime, existingEntry, options?.nodeId) < 0) {
|
|
2985
3003
|
return;
|
|
2986
3004
|
}
|
|
3005
|
+
const removalNodeId = options?.nodeId ?? 0; // this node's own id is 0
|
|
3006
|
+
const stagedRemoval = { value: undefined, version: txnTime, nodeId: removalNodeId };
|
|
3007
|
+
// re-delivered onto the removal it already made: writing again would append an audit entry
|
|
3008
|
+
// that every peer forwards and re-logs in turn. On a recommit the kept write batch shows this write's own
|
|
3009
|
+
// round-one tombstone as the existing entry, so a retry round repeats the first round's decision.
|
|
3010
|
+
const redelivered = retry
|
|
3011
|
+
? write.redelivered
|
|
3012
|
+
: existingRecord == null && isSameRemoval(removalBefore(write, existingEntry), txnTime, removalNodeId);
|
|
3013
|
+
write.redelivered = redelivered;
|
|
3014
|
+
if (redelivered) {
|
|
3015
|
+
write.stagedEntry = stagedRemoval;
|
|
3016
|
+
write.skipped = true;
|
|
3017
|
+
return;
|
|
3018
|
+
}
|
|
2987
3019
|
updateIndices(id, existingRecord, null, transaction && { transaction });
|
|
2988
3020
|
if (audit || trackDeletes) {
|
|
2989
3021
|
updateRecord(id, null, existingEntry, txnTime, 0, audit, {
|
|
@@ -3000,7 +3032,7 @@ function makeTable(options) {
|
|
|
3000
3032
|
// Only RocksDB's remove() takes an options object; on LMDB the 2nd arg is ifVersion, and its writes already join the batched txn.
|
|
3001
3033
|
(0, RecordEncoder_ts_1.removeEntry)(primaryStore, existingEntry, isRocksDB && transaction ? { transaction } : undefined);
|
|
3002
3034
|
}
|
|
3003
|
-
write.stagedEntry =
|
|
3035
|
+
write.stagedEntry = stagedRemoval; // the key holds no record for the rest of this transaction
|
|
3004
3036
|
// the removal supersedes the nearest record an earlier write in this transaction stored
|
|
3005
3037
|
// (older ones were already marked by their staged successors), so its saved blobs are
|
|
3006
3038
|
// cleaned up post-commit unless its audit entry references them
|
|
@@ -4674,85 +4706,182 @@ function makeTable(options) {
|
|
|
4674
4706
|
const exactCount = options?.exactCount;
|
|
4675
4707
|
const TIME_LIMIT = options?.timeLimit ?? 1000 / 2; // one second time limit, enforced by seeing if we are halfway through at 500ms
|
|
4676
4708
|
const start = performance.now();
|
|
4677
|
-
// `entryCount` (the exact key count) is only needed once the scan blows the time budget --
|
|
4678
|
-
// to decide whether to estimate and as the extrapolation base. On RocksDB it is a full
|
|
4679
|
-
// key-only scan, so we defer it: tables that finish within budget (the common case) and
|
|
4680
|
-
// `exact_count` requests never pay for it. `halfway`/`entryCount` stay 0 until first computed.
|
|
4681
4709
|
let entryCount = 0;
|
|
4682
|
-
let
|
|
4683
|
-
let
|
|
4684
|
-
|
|
4710
|
+
let remainderPhysical = 0;
|
|
4711
|
+
let estimator;
|
|
4712
|
+
// feature-detected per DESIGN.md's invariant for this API family; LMDB stores do not implement it
|
|
4713
|
+
const canEstimate = typeof primaryStore.createCountEstimator === 'function' && typeof primaryStore.estimateCount === 'function';
|
|
4714
|
+
let estimatorFailed = false;
|
|
4715
|
+
let warnedNoBase = false;
|
|
4716
|
+
let checkpoints = 0;
|
|
4717
|
+
let checkpointedEntries = 0;
|
|
4685
4718
|
let recordCount = 0;
|
|
4686
4719
|
let entriesScanned = 0;
|
|
4720
|
+
let lastKey;
|
|
4687
4721
|
let limit;
|
|
4688
|
-
|
|
4722
|
+
let nextCheckAt = start + TIME_LIMIT;
|
|
4723
|
+
for (const { key, value } of primaryStore.getRange({ start: true, lazy: true, snapshot: false })) {
|
|
4689
4724
|
if (value != null)
|
|
4690
4725
|
recordCount++;
|
|
4691
4726
|
entriesScanned++;
|
|
4727
|
+
lastKey = key;
|
|
4692
4728
|
await rest();
|
|
4693
|
-
|
|
4694
|
-
|
|
4695
|
-
|
|
4696
|
-
|
|
4697
|
-
|
|
4698
|
-
|
|
4699
|
-
|
|
4700
|
-
|
|
4701
|
-
|
|
4702
|
-
|
|
4703
|
-
|
|
4704
|
-
|
|
4729
|
+
// a table too small to reach the floor is small enough to finish exactly
|
|
4730
|
+
if (exactCount || entriesScanned < MIN_ESTIMATOR_SAMPLE)
|
|
4731
|
+
continue;
|
|
4732
|
+
const now = performance.now();
|
|
4733
|
+
if (now <= nextCheckAt)
|
|
4734
|
+
continue;
|
|
4735
|
+
nextCheckAt = now + TIME_LIMIT;
|
|
4736
|
+
checkpoints++;
|
|
4737
|
+
if (canEstimate && !estimatorFailed) {
|
|
4738
|
+
try {
|
|
4739
|
+
estimator ??= primaryStore.createCountEstimator({ start: true });
|
|
4740
|
+
estimator.advance(lastKey, entriesScanned - checkpointedEntries);
|
|
4741
|
+
checkpointedEntries = entriesScanned;
|
|
4742
|
+
entryCount = usableCount(estimator.estimate());
|
|
4743
|
+
}
|
|
4744
|
+
catch (error) {
|
|
4745
|
+
// a store closing concurrently -- drop_table can, while this scan is parked in a yield
|
|
4746
|
+
logger_ts_1.logger.debug?.('Count estimator unavailable, falling back to an exact scan', error);
|
|
4747
|
+
estimatorFailed = true;
|
|
4748
|
+
estimator = undefined;
|
|
4749
|
+
entryCount = 0;
|
|
4750
|
+
}
|
|
4751
|
+
}
|
|
4752
|
+
else if (!canEstimate) {
|
|
4753
|
+
// `canEstimate` false is not the same as "LMDB": a RocksDB store whose native module predates
|
|
4754
|
+
// the estimator API lands here too, and `RocksDatabase.getStats()` carries no `entryCount`.
|
|
4755
|
+
try {
|
|
4756
|
+
const stats = primaryStore.getStats?.();
|
|
4757
|
+
entryCount = Number.isFinite(stats?.entryCount) && stats.entryCount > 0 ? stats.entryCount : 0;
|
|
4758
|
+
}
|
|
4759
|
+
catch {
|
|
4760
|
+
entryCount = 0;
|
|
4761
|
+
}
|
|
4762
|
+
}
|
|
4763
|
+
if (!entryCount && canEstimate && !estimatorFailed) {
|
|
4764
|
+
// Range estimates are block-granular and can report 0 for a store whose entries are still
|
|
4765
|
+
// in the memtable. Without a base the escape cannot fire at all, so fall back to the
|
|
4766
|
+
// whole-store property rather than silently walking the table.
|
|
4767
|
+
try {
|
|
4768
|
+
const wholeStore = primaryStore.getEstimatedKeyCount();
|
|
4769
|
+
entryCount = Number.isFinite(wholeStore) && wholeStore > 0 ? wholeStore : 0;
|
|
4770
|
+
}
|
|
4771
|
+
catch {
|
|
4772
|
+
entryCount = 0;
|
|
4773
|
+
}
|
|
4774
|
+
if (!entryCount && !warnedNoBase) {
|
|
4775
|
+
warnedNoBase = true;
|
|
4776
|
+
logger_ts_1.logger.debug?.(`No usable key-count estimate for ${tableName}; counting records by full scan`);
|
|
4777
|
+
}
|
|
4778
|
+
}
|
|
4779
|
+
// Zero is "no usable base": degrade to the exact scan. The checkpoint ceiling is what stops a
|
|
4780
|
+
// base that keeps undershooting from holding the halfway test false forever and walking the
|
|
4781
|
+
// whole table; the reverse sample is bounded by `limit` in turn.
|
|
4782
|
+
if (entryCount > 0 &&
|
|
4783
|
+
(checkpoints >= MAX_ESTIMATE_CHECKPOINTS || entriesScanned < Math.floor(entryCount / 2))) {
|
|
4784
|
+
if (canEstimate) {
|
|
4785
|
+
try {
|
|
4786
|
+
const remaining = primaryStore.estimateCount({ start: lastKey, exclusiveStart: true });
|
|
4787
|
+
// widened by its own reported untrustworthiness: block-granular, so it can land below
|
|
4788
|
+
// the live count it is meant to bound
|
|
4789
|
+
const remainingCount = usableCount(remaining);
|
|
4790
|
+
remainderPhysical = remainingCount > 0 ? remainingCount * (2 - remaining.confidence) : 0;
|
|
4791
|
+
}
|
|
4792
|
+
catch {
|
|
4793
|
+
remainderPhysical = 0;
|
|
4794
|
+
}
|
|
4795
|
+
// A zero or unusable remainder is valid -- entries still in the memtable read as none
|
|
4796
|
+
// through range statistics -- but it would leave `baseMax` resting on the sampled ends
|
|
4797
|
+
// alone. The whole-store property is a separate, non-range source, so fall back to it.
|
|
4798
|
+
if (!remainderPhysical) {
|
|
4799
|
+
try {
|
|
4800
|
+
const wholeStore = primaryStore.getEstimatedKeyCount();
|
|
4801
|
+
if (Number.isFinite(wholeStore))
|
|
4802
|
+
remainderPhysical = Math.max(wholeStore - entriesScanned, 0);
|
|
4803
|
+
}
|
|
4804
|
+
catch {
|
|
4805
|
+
remainderPhysical = 0;
|
|
4806
|
+
}
|
|
4807
|
+
}
|
|
4705
4808
|
}
|
|
4706
|
-
|
|
4707
|
-
|
|
4708
|
-
completeForExact = true;
|
|
4809
|
+
limit = entriesScanned;
|
|
4810
|
+
break;
|
|
4709
4811
|
}
|
|
4710
4812
|
}
|
|
4711
4813
|
if (limit) {
|
|
4712
4814
|
// in this case we are going to make an estimate of the table count using the first thousand
|
|
4713
4815
|
// entries and last thousand entries
|
|
4714
4816
|
const firstRecordCount = recordCount;
|
|
4817
|
+
const firstKey = lastKey;
|
|
4715
4818
|
recordCount = 0;
|
|
4716
4819
|
// Bound the reverse scan explicitly. The getRange `limit` option is honored by lmdb-js but
|
|
4717
4820
|
// ignored by rocksdb-js; without this break the scan reads the whole table, so `recordRate`
|
|
4718
4821
|
// blows up to ~entryCount/(2*limit) and the estimate scales with entryCount^2 -- the source
|
|
4719
4822
|
// of the wildly inflated `record_count` (e.g. 20,000,000 for ~105k rows) on large RocksDB
|
|
4720
|
-
// tables.
|
|
4823
|
+
// tables.
|
|
4721
4824
|
let reverseScanned = 0;
|
|
4722
|
-
|
|
4825
|
+
// Sized independently of the forward scan. `entriesScanned` is whatever the forward pass
|
|
4826
|
+
// covered before it escaped, and the checkpoint ceiling lets that run twenty budget
|
|
4827
|
+
// intervals when the base keeps undershooting; matching it here would read that same count
|
|
4828
|
+
// again and double the wall clock of the call this path exists to bound.
|
|
4829
|
+
const reverseLimit = Math.min(limit, MIN_ESTIMATOR_SAMPLE);
|
|
4830
|
+
// Disjointness is enforced against the forward scan's own last key rather than inferred from
|
|
4831
|
+
// the base, which is an estimate that can overshoot by more than 2x.
|
|
4832
|
+
let sampledWholeTable = false;
|
|
4833
|
+
for (const { key, value } of primaryStore.getRange({
|
|
4723
4834
|
start: '\uffff',
|
|
4724
4835
|
reverse: true,
|
|
4725
4836
|
lazy: true,
|
|
4726
|
-
limit,
|
|
4837
|
+
limit: reverseLimit,
|
|
4727
4838
|
snapshot: false,
|
|
4728
4839
|
})) {
|
|
4840
|
+
if ((0, ordered_binary_1.compareKeys)(key, firstKey) <= 0) {
|
|
4841
|
+
sampledWholeTable = true;
|
|
4842
|
+
break;
|
|
4843
|
+
}
|
|
4729
4844
|
if (value != null)
|
|
4730
4845
|
recordCount++;
|
|
4731
4846
|
reverseScanned++;
|
|
4732
4847
|
await rest();
|
|
4733
|
-
if (reverseScanned >=
|
|
4848
|
+
if (reverseScanned >= reverseLimit)
|
|
4734
4849
|
break;
|
|
4735
4850
|
}
|
|
4851
|
+
// the samples met, so between them they covered every entry
|
|
4852
|
+
if (sampledWholeTable)
|
|
4853
|
+
return { recordCount: recordCount + firstRecordCount };
|
|
4736
4854
|
// Use the actual entries sampled, not limit*2: the reverse scan can yield fewer than `limit`
|
|
4737
4855
|
// (concurrent deletions under snapshot:false, or an overestimated entryCount), and counting
|
|
4738
4856
|
// those un-scanned slots would inflate the denominator and underestimate the rate.
|
|
4739
|
-
const
|
|
4740
|
-
const recordRate = (
|
|
4741
|
-
|
|
4742
|
-
|
|
4743
|
-
|
|
4744
|
-
|
|
4745
|
-
//
|
|
4746
|
-
//
|
|
4747
|
-
const
|
|
4748
|
-
const
|
|
4749
|
-
|
|
4750
|
-
|
|
4751
|
-
|
|
4752
|
-
|
|
4857
|
+
const sampledRecords = recordCount + firstRecordCount;
|
|
4858
|
+
const recordRate = sampledRecords / (limit + reverseScanned);
|
|
4859
|
+
// Endpoints for the extrapolation base, spanning both ways an estimated base can be wrong:
|
|
4860
|
+
// every remaining entry superseded (only what was sampled is live) through every remaining
|
|
4861
|
+
// entry live (the uncalibrated physical count). Churn concentrated outside the sampled ends
|
|
4862
|
+
// calibrates to nothing, so an interval derived from the estimator's confidence would sit
|
|
4863
|
+
// narrowly around the wrong number. Both endpoints are themselves estimates on RocksDB, so
|
|
4864
|
+
// this is a widened heuristic interval, not a guaranteed bound on the live count.
|
|
4865
|
+
const baseMin = entriesScanned + reverseScanned;
|
|
4866
|
+
const baseMax = Math.max(entriesScanned + remainderPhysical, entryCount, baseMin);
|
|
4867
|
+
const estimatedRecordCount = Math.round(recordRate * Math.max(entryCount, baseMin));
|
|
4868
|
+
// The samples counted these directly, and the entries between them can only add; everything
|
|
4869
|
+
// outside the samples could be live. A statistical interval inside those endpoints would be
|
|
4870
|
+
// narrowest exactly where the ends are least representative of the middle -- sampled ends
|
|
4871
|
+
// that are all deletion entries give a rate of 0, collapsing an upper end to ~0 with live
|
|
4872
|
+
// rows in between -- so the endpoints are the evidence itself.
|
|
4873
|
+
const lower = sampledRecords;
|
|
4874
|
+
const upper = Math.round(baseMax);
|
|
4875
|
+
// Report only the precision the interval supports, but never so coarse a unit that the
|
|
4876
|
+
// estimate rounds away: `baseMax` is physical and can exceed a calibrated estimate by
|
|
4877
|
+
// orders of magnitude, which a single division cannot walk back.
|
|
4878
|
+
let significantUnit = Math.pow(10, Math.round(Math.log10(Math.max((upper - lower) / 2, 1))));
|
|
4879
|
+
while (significantUnit > estimatedRecordCount && significantUnit > 1)
|
|
4880
|
+
significantUnit /= 10;
|
|
4881
|
+
recordCount = Math.min(Math.max(Math.round(estimatedRecordCount / significantUnit) * significantUnit, lower), upper);
|
|
4753
4882
|
return {
|
|
4754
4883
|
recordCount,
|
|
4755
|
-
estimatedRange: [
|
|
4884
|
+
estimatedRange: [lower, upper],
|
|
4756
4885
|
};
|
|
4757
4886
|
}
|
|
4758
4887
|
return {
|
|
@@ -5670,6 +5799,24 @@ function makeTable(options) {
|
|
|
5670
5799
|
}
|
|
5671
5800
|
return ids;
|
|
5672
5801
|
}
|
|
5802
|
+
/**
|
|
5803
|
+
* What left a delete's key without a record: the nearest earlier write in the transaction that staged
|
|
5804
|
+
* state, else the stored entry. Only writes marked skipped are passed over, because an invalidate or
|
|
5805
|
+
* relocate stores a null stub without staging it.
|
|
5806
|
+
*/
|
|
5807
|
+
function removalBefore(write, existingEntry) {
|
|
5808
|
+
for (let prior = write.priorWrite; prior; prior = prior.priorWrite) {
|
|
5809
|
+
if (prior.stagedEntry)
|
|
5810
|
+
return prior.stagedEntry;
|
|
5811
|
+
if (!prior.skipped)
|
|
5812
|
+
return;
|
|
5813
|
+
}
|
|
5814
|
+
if (!(existingEntry?.metadataFlags & exports.INVALIDATED))
|
|
5815
|
+
return existingEntry;
|
|
5816
|
+
}
|
|
5817
|
+
function isSameRemoval(entry, txnTime, nodeId) {
|
|
5818
|
+
return entry != null && entry.value == null && entry.version === txnTime && (entry.nodeId ?? 0) === nodeId;
|
|
5819
|
+
}
|
|
5673
5820
|
function precedesExistingVersion(txnTime, existingEntry, nodeId) {
|
|
5674
5821
|
if (nodeId === undefined) {
|
|
5675
5822
|
nodeId = (0, nodeIdMapping_ts_1.getThisNodeId)(auditStore);
|
|
@@ -5903,25 +6050,35 @@ function makeTable(options) {
|
|
|
5903
6050
|
resolve(resolvedEntry);
|
|
5904
6051
|
}
|
|
5905
6052
|
catch (error) {
|
|
5906
|
-
|
|
5907
|
-
|
|
5908
|
-
|
|
5909
|
-
|
|
5910
|
-
|
|
5911
|
-
|
|
5912
|
-
|
|
5913
|
-
|
|
5914
|
-
|
|
5915
|
-
|
|
5916
|
-
|
|
5917
|
-
|
|
5918
|
-
|
|
5919
|
-
|
|
5920
|
-
|
|
5921
|
-
|
|
6053
|
+
// A source may reject with anything at all, so deciding how to settle is itself
|
|
6054
|
+
// fallible: `message` is not assignable on every error (a DOMException from
|
|
6055
|
+
// AbortSignal.timeout), and a nullish rejection makes the reads below throw.
|
|
6056
|
+
// Leaving this promise unsettled hangs the caller forever, so every path here
|
|
6057
|
+
// has to end in resolve() or reject().
|
|
6058
|
+
try {
|
|
6059
|
+
(0, hdbError_ts_1.appendErrorContext)(error, ` while resolving record ${id} for ${tableName}`);
|
|
6060
|
+
if (existingRecord &&
|
|
6061
|
+
(((error.code === 'ECONNRESET' || error.code === 'ECONNREFUSED' || error.code === 'EAI_AGAIN') &&
|
|
6062
|
+
!context?.mustRevalidate) ||
|
|
6063
|
+
(context?.staleIfError &&
|
|
6064
|
+
(error.statusCode === 500 ||
|
|
6065
|
+
error.statusCode === 502 ||
|
|
6066
|
+
error.statusCode === 503 ||
|
|
6067
|
+
error.statusCode === 504)))) {
|
|
6068
|
+
// these are conditions under which we can use stale data after an error
|
|
6069
|
+
resolve({
|
|
6070
|
+
key: id,
|
|
6071
|
+
version: existingVersion,
|
|
6072
|
+
value: existingRecord,
|
|
6073
|
+
});
|
|
6074
|
+
logger_ts_1.logger.trace?.(error?.message, '(returned stale record)');
|
|
6075
|
+
}
|
|
6076
|
+
else
|
|
6077
|
+
reject(error);
|
|
6078
|
+
}
|
|
6079
|
+
catch (settlingError) {
|
|
6080
|
+
reject(error ?? settlingError);
|
|
5922
6081
|
}
|
|
5923
|
-
else
|
|
5924
|
-
reject(error);
|
|
5925
6082
|
const resolveDuration = performance.now() - start;
|
|
5926
6083
|
(0, write_ts_1.recordAction)(resolveDuration, 'cache-resolution', tableName, null, 'fail');
|
|
5927
6084
|
if (responseHeaders)
|