collabmd 0.1.34 → 0.1.36
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/client/assets/{CodeMirrorEditor-UCMRAMCV-Bg0dawOb.js → CodeMirrorEditor-UCMRAMCV-DnBV8gCm.js} +1 -1
- package/dist/client/assets/_baseFor-BSErPbF2.js +1 -0
- package/dist/client/assets/{ar-SA-NXDWD63E-WivLHHDW.js → ar-SA-NXDWD63E-CTf_wpt3.js} +1 -1
- package/dist/client/assets/arc-DD8jaAGl.js +1 -0
- package/dist/client/assets/architecture-YZFGNWBL-DWWrde02.js +1 -0
- package/dist/client/assets/{architectureDiagram-2XIMDMQ5-kYbOThe4.js → architectureDiagram-Q4EWVU46-BftXiJA8.js} +4 -4
- package/dist/client/assets/{az-AZ-MXSORGZV-DOdq1TKC.js → az-AZ-MXSORGZV-C_C9i9u3.js} +1 -1
- package/dist/client/assets/{bg-BG-O6MV2KSF-CYucKuDS.js → bg-BG-O6MV2KSF-YmfvQf63.js} +1 -1
- package/dist/client/assets/blockDiagram-DXYQGD6D-6UN-nR8-.js +132 -0
- package/dist/client/assets/{bn-IN-MMW2ORAC-DYr8kqNL.js → bn-BD-T2VJNT7N-BD0ob0JE.js} +1 -1
- package/dist/client/assets/{bn-BD-T2VJNT7N-2OKWLCYa.js → bn-IN-MMW2ORAC-BTEFR4Ed.js} +1 -1
- package/dist/client/assets/c4Diagram-AHTNJAMY-Gz7ZAK0d.js +10 -0
- package/dist/client/assets/{ca-ES-MKBCGNOG-B9Aeb43I.js → ca-ES-MKBCGNOG-aLX_cjA0.js} +1 -1
- package/dist/client/assets/channel-XGCkuPi6.js +1 -0
- package/dist/client/assets/chunk-2KRD3SAO-CFcF2aNP.js +1 -0
- package/dist/client/assets/chunk-336JU56O-DvrrHsJT.js +2 -0
- package/dist/client/assets/chunk-426QAEUC-CEbmCgux.js +1 -0
- package/dist/client/assets/{chunk-4BX2VUAB-2e7V-uuE.js → chunk-4BX2VUAB-D5YiFdu1.js} +1 -1
- package/dist/client/assets/chunk-4TB4RGXK-CoouNThi.js +206 -0
- package/dist/client/assets/{chunk-55IACEB6-CpncB3ru.js → chunk-55IACEB6-VHgZjidg.js} +1 -1
- package/dist/client/assets/chunk-5FUZZQ4R-CxIIxXPy.js +62 -0
- package/dist/client/assets/chunk-5PVQY5BW-ciE7eHID.js +2 -0
- package/dist/client/assets/chunk-67CJDMHE-CW-fbgQB.js +1 -0
- package/dist/client/assets/chunk-7N4EOEYR-DbAW6XnF.js +1 -0
- package/dist/client/assets/chunk-AA7GKIK3-ClDHDAza.js +1 -0
- package/dist/client/assets/chunk-BSJP7CBP-D2KkrA_B.js +1 -0
- package/dist/client/assets/chunk-CIAEETIT-BnB8a6HR.js +1 -0
- package/dist/client/assets/{chunk-KX2RTZJC-BTiOJb7N.js → chunk-EDXVE4YY-M4QxyGNt.js} +1 -1
- package/dist/client/assets/chunk-ENJZ2VHE-BQj_1YA_.js +10 -0
- package/dist/client/assets/{chunk-FMBD7UC4-CMahlBa_.js → chunk-FMBD7UC4-qQT7MtX2.js} +1 -1
- package/dist/client/assets/chunk-FOC6F5B3-Bw6XfKDP.js +1 -0
- package/dist/client/assets/chunk-ICPOFSXX-DqJi89rc.js +122 -0
- package/dist/client/assets/chunk-K5T4RW27-CQtjKF2g.js +94 -0
- package/dist/client/assets/chunk-KGLVRYIC-BWSPiKjp.js +1 -0
- package/dist/client/assets/chunk-LIHQZDEY-DtYrHuCi.js +1 -0
- package/dist/client/assets/{chunk-AXZTUZBK-DuMiJYO9.js → chunk-LOOWOR4L-C5BUwXgZ.js} +2 -2
- package/dist/client/assets/chunk-ORNJ4GCN-Csga44e5.js +1 -0
- package/dist/client/assets/{chunk-NQ4KR5QH-CMJKI6Oj.js → chunk-OYMX7WX6-DvtmCasj.js} +25 -14
- package/dist/client/assets/chunk-QZHKN3VN-CHVH9_3S.js +1 -0
- package/dist/client/assets/{chunk-SRAX5OIU-CLVBQRWC.js → chunk-SRAX5OIU-yDw8XRsi.js} +1 -1
- package/dist/client/assets/{chunk-PU5JKC2W-D_6N6t8f.js → chunk-U2HBQHQK-BBXgsocS.js} +6 -6
- package/dist/client/assets/{chunk-PQ6SQG4A-D1AbThjy.js → chunk-X2U36JSP-D3OEPG7k.js} +1 -1
- package/dist/client/assets/{chunk-XPW4576I-DJr4_4Yy.js → chunk-XPW4576I-BUfyrOtN.js} +2 -2
- package/dist/client/assets/chunk-YHkbxXgt.js +1 -0
- package/dist/client/assets/chunk-YKPWT25G-GISHuloq.js +35 -0
- package/dist/client/assets/{chunk-JSJVCQXG-DPQ9cPJt.js → chunk-YZCP3GAM-D1jf1WUI.js} +1 -1
- package/dist/client/assets/{chunk-Z5NKEFVG-HOkYqaKa.js → chunk-Z5NKEFVG-Vu8zBV4H.js} +1 -1
- package/dist/client/assets/chunk-ZZ45TVLE-DGIhE_ST.js +1 -0
- package/dist/client/assets/classDiagram-6PBFFD2Q-D1KhAUL3.js +1 -0
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-BSyyJpnR.js +1 -0
- package/dist/client/assets/clike-BFTLRaGS.js +1 -0
- package/dist/client/assets/clone-DI0bYZ1L.js +1 -0
- package/dist/client/assets/{coffeescript-B_7eyHAa.js → coffeescript-B7GZajzV.js} +1 -1
- package/dist/client/assets/{cose-bilkent-S5V4N54A-DASO2hrk.js → cose-bilkent-S5V4N54A-A8ssRFyt.js} +1 -1
- package/dist/client/assets/{cs-CZ-V77HGUP7-BDg-F0CJ.js → cs-CZ-V77HGUP7-Du3y53BB.js} +1 -1
- package/dist/client/assets/{cypher-DE6I2lIA.js → cypher-DEGl2llJ.js} +1 -1
- package/dist/client/assets/cytoscape.esm-BurByw8X.js +321 -0
- package/dist/client/assets/{d-BNkKjn0o.js → d-BspB0dox.js} +1 -1
- package/dist/client/assets/{da-DK-I5RFNTM4-wtSQ0Jxa.js → da-DK-I5RFNTM4-CDJtjf5s.js} +1 -1
- package/dist/client/assets/dagre-Dn6rkrte.js +1 -0
- package/dist/client/assets/dagre-KV5264BT-COzej2en.js +4 -0
- package/dist/client/assets/{de-CH-WLRDEVBV-C1swvmZy.js → de-CH-WLRDEVBV-CLV2tVw6.js} +1 -1
- package/dist/client/assets/{de-DE-DTI4WUSC-C0L6Nz8X.js → de-DE-DTI4WUSC-B53J0BQ8.js} +1 -1
- package/dist/client/assets/diagram-5BDNPKRD-BuK-UBuN.js +10 -0
- package/dist/client/assets/diagram-G4DWMVQ6-CbswIU9X.js +24 -0
- package/dist/client/assets/diagram-MMDJMWI5-BE-yOVGX.js +43 -0
- package/dist/client/assets/diagram-TYMM5635-CT8BdT4s.js +24 -0
- package/dist/client/assets/{dist-3uAMa5w5.js → dist-B98fHn5m.js} +1 -1
- package/dist/client/assets/{dist-BtnXjRx0.js → dist-BE8C_ouo.js} +1 -1
- package/dist/client/assets/{dist-rMhng5DK.js → dist-BEKQo64E.js} +1 -1
- package/dist/client/assets/{dist-DsL7sqZR.js → dist-BOP-dC-R.js} +1 -1
- package/dist/client/assets/{dist-DUvaQ-Bj.js → dist-BPEi1dEF.js} +1 -1
- package/dist/client/assets/{dist-B4uQVR_X.js → dist-BScEL4VP.js} +1 -1
- package/dist/client/assets/dist-BfVljg0L2.js +1 -0
- package/dist/client/assets/{dist-CGV1S_as.js → dist-BiCgLddE.js} +1 -1
- package/dist/client/assets/{dist-CxfohGIV.js → dist-Bn8WRPs1.js} +1 -1
- package/dist/client/assets/dist-Brrlevif.js +6 -0
- package/dist/client/assets/{dist-BLAlZer_.js → dist-CBEw2W2P.js} +1 -1
- package/dist/client/assets/{dist-B-02vKOA.js → dist-CJWCCWEW.js} +1 -1
- package/dist/client/assets/{dist-Dyt7n5Ui.js → dist-CQVTTk81.js} +1 -1
- package/dist/client/assets/dist-CaMl1R6P.js +13 -0
- package/dist/client/assets/dist-CcG3Y7Wp.js +1 -0
- package/dist/client/assets/dist-CghBwrO3.js +1 -0
- package/dist/client/assets/dist-Csbx9lQ-.js +1 -0
- package/dist/client/assets/dist-D34Xzrah.js +1 -0
- package/dist/client/assets/dist-DLyohOXi.js +1 -0
- package/dist/client/assets/{dist-Bc2ND6i3.js → dist-DPCUH5MO.js} +1 -1
- package/dist/client/assets/{dist-BzpfHRaE.js → dist-DQiph4qx.js} +1 -1
- package/dist/client/assets/{dist-CL-jjdvG.js → dist-DWRyOl2w.js} +1 -1
- package/dist/client/assets/{dist-CXpKYW9s.js → dist-DZ2t5lUX.js} +1 -1
- package/dist/client/assets/{dist-BzbYwa8m.js → dist-Dbg8P4C5.js} +1 -1
- package/dist/client/assets/{dist-k47-Io7D.js → dist-DdAqzGFU.js} +1 -1
- package/dist/client/assets/dist-DwvSvkOE.js +1 -0
- package/dist/client/assets/dist-WXLmfDGg.js +1 -0
- package/dist/client/assets/{dist-lDhnP-K1.js → dist-aE0_04fl.js} +1 -1
- package/dist/client/assets/{dist-E_jPb93e.js → dist-mPPUaHhq.js} +1 -1
- package/dist/client/assets/{dist-CjII8VDS.js → dist-v3i1ifes.js} +1 -1
- package/dist/client/assets/dist-wkd-N1L5.js +1 -0
- package/dist/client/assets/drawio-editor-D4Qoluwz.js +9 -0
- package/dist/client/assets/{drawioEditor-D6clB5OH.js → drawioEditor-B65FWq-b.js} +2 -2
- package/dist/client/assets/{ecl-M7Iek4lq.js → ecl-D9rhJ9-u.js} +1 -1
- package/dist/client/assets/editor-session-DV80PhYL.js +16 -0
- package/dist/client/assets/{el-GR-ZXDJ2OS4-BH0saXds.js → el-GR-ZXDJ2OS4-DFmRQv0o.js} +1 -1
- package/dist/client/assets/{en-IQZW2TQM-CzlcEpq3.js → en-CMP6EMR6-D9x8hVSu.js} +1 -1
- package/dist/client/assets/{erDiagram-INFDFZHY-DlIf-fb7.js → erDiagram-SMLLAGMA-6VFZA3Qb.js} +33 -18
- package/dist/client/assets/{es-ES-DYQHAD43-CyzL9Mni.js → es-ES-DYQHAD43-BiGWIrBG.js} +1 -1
- package/dist/client/assets/{eu-ES-QDSYU5Y3-D2-x316S.js → eu-ES-QDSYU5Y3-BjwS0kZi.js} +1 -1
- package/dist/client/assets/excalidraw-editor-BZCE9ydu.css +1 -0
- package/dist/client/assets/excalidraw-editor-hiJQt1cX.js +9 -0
- package/dist/client/assets/{excalidraw-mermaid-stub-Bwe-bKcT.js → excalidraw-mermaid-stub-Df0Q2qkW.js} +1 -1
- package/dist/client/assets/excalidraw-scene-MyNAJi2A.js +176 -0
- package/dist/client/assets/excalidrawEditor-BnbblxK4.js +2 -0
- package/dist/client/assets/{export-page-PeexH2QK.js → export-page-BKDarp9x.js} +3 -3
- package/dist/client/assets/exportDocument-CULEGKmb.js +2 -0
- package/dist/client/assets/{fa-IR-26LZG4PM-D8-trU2x.js → fa-IR-26LZG4PM-BgANg2TD.js} +1 -1
- package/dist/client/assets/{fcl-BWKK0S4-.js → fcl-CUXJFJn1.js} +1 -1
- package/dist/client/assets/{fi-FI-6YS4KDE4-CCdRVFDQ.js → fi-FI-6YS4KDE4-CBL5f3oN.js} +1 -1
- package/dist/client/assets/flatten-DjXjUsvv.js +1 -0
- package/dist/client/assets/flowDiagram-DWJPFMVM-DO9RH8YQ.js +162 -0
- package/dist/client/assets/{fr-FR-BRLLPTZC-Dqq-O5T_.js → fr-FR-BRLLPTZC-CRibNSLG.js} +1 -1
- package/dist/client/assets/ganttDiagram-T4ZO3ILL-B-NMvHWN.js +292 -0
- package/dist/client/assets/gitGraph-7Q5UKJZL-DWNinXu4.js +1 -0
- package/dist/client/assets/gitGraphDiagram-UUTBAWPF-B95qkCUx.js +106 -0
- package/dist/client/assets/{gl-ES-OKUZTLYG-BK7pbLbm.js → gl-ES-OKUZTLYG-DEDwa_xt.js} +1 -1
- package/dist/client/assets/graphlib-CAwOVCJc.js +1 -0
- package/dist/client/assets/{groovy-BEKazBrO.js → groovy-Di--Vb9Z.js} +1 -1
- package/dist/client/assets/{haxe-BY9d_5nB.js → haxe-CcPA1xnA.js} +1 -1
- package/dist/client/assets/{he-IL-26MGYIU7-C3BuYKyY.js → he-IL-26MGYIU7-47wxy70N.js} +1 -1
- package/dist/client/assets/{hi-IN-Q4ZOGTP2-BEvXWXnH.js → hi-IN-Q4ZOGTP2-bhV7c3dK.js} +1 -1
- package/dist/client/assets/{hu-HU-P2OXPSN5-BWWZeJNp.js → hu-HU-P2OXPSN5-xG-gBMzE.js} +1 -1
- package/dist/client/assets/{id-ID-2EIKXYN6-DxSKi_aJ.js → id-ID-2EIKXYN6-MQuYaNHo.js} +1 -1
- package/dist/client/assets/image-J2CAS7OM-DD4DaQTs.js +1 -0
- package/dist/client/assets/image-blob-reduce.esm-D8JQdTFk.js +2 -0
- package/dist/client/assets/{index-BLrtj9YM.js → index-BjdYZiBM.js} +2 -2
- package/dist/client/assets/{index-BIt5EZXz.css → index-BryqP9QY.css} +1 -1
- package/dist/client/assets/info-OMHHGYJF-DtYG_rX0.js +1 -0
- package/dist/client/assets/{infoDiagram-LFFYTUFH-DFTI0nfs.js → infoDiagram-42DDH7IO-C77Pt7T1.js} +1 -1
- package/dist/client/assets/isEmpty-CpfhGGBo.js +1 -0
- package/dist/client/assets/ishikawaDiagram-UXIWVN3A-Cy1fwvvg.js +70 -0
- package/dist/client/assets/{it-IT-4CFKVXI2-BmA8wW6q.js → it-IT-4CFKVXI2-v2kj-y7j.js} +1 -1
- package/dist/client/assets/{ja-JP-MAND2Z4V-CLS1jI9o.js → ja-JP-MAND2Z4V-BahXSQz-.js} +1 -1
- package/dist/client/assets/{javascript-CdiVhQeA.js → javascript-gTK9fxz6.js} +1 -1
- package/dist/client/assets/javascript-qUBHINSy.js +1 -0
- package/dist/client/assets/{journeyDiagram-4ABVD52K-DDur6iHm.js → journeyDiagram-VCZTEJTY-CYWaI6re.js} +2 -2
- package/dist/client/assets/{jsx-runtime-C2p7wRmT.js → jsx-runtime-1KUJVfx8.js} +1 -1
- package/dist/client/assets/{kaa-HQRTCXTJ-W15DEDPz.js → kaa-HQRTCXTJ-BF26ydFa.js} +1 -1
- package/dist/client/assets/{kab-KAB-JKIKKTGH-MLh1inqS.js → kab-KAB-JKIKKTGH-CEIH0F80.js} +1 -1
- package/dist/client/assets/{kanban-definition-K7BYSVSG-dA6NPLsg.js → kanban-definition-6JOO6SKY-DY1xE7tm.js} +2 -2
- package/dist/client/assets/{kk-KZ-HXQ63ZFC-BtFrPeLs.js → kk-KZ-HXQ63ZFC-CxWjc9Sf.js} +1 -1
- package/dist/client/assets/{km-KH-PKL3LSGX-xO5FyM9T.js → km-KH-PKL3LSGX-DJlCteEp.js} +1 -1
- package/dist/client/assets/{ko-KR-KXLREZX3-NZFoRybS.js → ko-KR-KXLREZX3-B1gtI_ci.js} +1 -1
- package/dist/client/assets/{ku-TR-MJ4IER3X-B5eVPIpK.js → ku-TR-MJ4IER3X-Bf41y2v2.js} +1 -1
- package/dist/client/assets/line-BCItEgq3.js +1 -0
- package/dist/client/assets/{linear-B2dOdA24.js → linear-dsIQT_iU.js} +1 -1
- package/dist/client/assets/{lt-LT-H6WFQ6FJ-D_7_OeJD.js → lt-LT-H6WFQ6FJ-DA1or-Eo.js} +1 -1
- package/dist/client/assets/{lua-kutgyRGY.js → lua-Cg0FqIlO.js} +1 -1
- package/dist/client/assets/{lv-LV-GOCK6SJW-CnpKr0oQ.js → lv-LV-GOCK6SJW-qa0BoYMm.js} +1 -1
- package/dist/client/assets/main-QJcxyvDa.js +1404 -0
- package/dist/client/assets/mermaid-parser.core-CsTVsPcD.js +4 -0
- package/dist/client/assets/mermaid-runtime-BGlnoUXY.js +11 -0
- package/dist/client/assets/{mindmap-definition-YRQLILUH-DjQcsPoe.js → mindmap-definition-QFDTVHPH-DB_M5r-j.js} +39 -11
- package/dist/client/assets/{mr-IN-IXVLDMEQ-Pht2X_GK.js → mr-IN-IXVLDMEQ-DXFRgvgb.js} +1 -1
- package/dist/client/assets/{my-MM-YG6MYTTD-Cgq4HhPO.js → my-MM-YG6MYTTD-BKDIfalJ.js} +1 -1
- package/dist/client/assets/{nb-NO-XGWJISD2-Bn_Bk2un.js → nb-NO-XGWJISD2-DbwbopH8.js} +1 -1
- package/dist/client/assets/{nl-NL-XVDVCPNC-YkWSJS94.js → nl-NL-XVDVCPNC-ChSneTSU.js} +1 -1
- package/dist/client/assets/{nn-NO-EMX5MJX5-DhP5eZJ7.js → nn-NO-EMX5MJX5-Cf7ZWKWZ.js} +1 -1
- package/dist/client/assets/{oc-FR-ROEINTVO-D3udMPnr.js → oc-FR-ROEINTVO-lM7Nl7hD.js} +1 -1
- package/dist/client/assets/{pa-IN-ZYN6SUDY-CR5YzFig.js → pa-IN-ZYN6SUDY-C9WNUTeR.js} +1 -1
- package/dist/client/assets/packet-4T2RLAQJ-CUVefhAv.js +1 -0
- package/dist/client/assets/percentages-5DKR754L-DuhOjTM2.js +1 -0
- package/dist/client/assets/pica-CgGaIJly.js +2 -0
- package/dist/client/assets/pie-ZZUOXDRM-BHBJ1dLX.js +1 -0
- package/dist/client/assets/pieDiagram-DEJITSTG-BOo-WzjZ.js +30 -0
- package/dist/client/assets/{pl-PL-6VTG7PHC-_wZuoIDM.js → pl-PL-6VTG7PHC-DqRVepnC.js} +1 -1
- package/dist/client/assets/{preview-diagram-utils-COt-IYMD.js → preview-diagram-utils-Nqpp4FNV.js} +1 -1
- package/dist/client/assets/preview-render-compiler-BCB8u6iM.js +1 -0
- package/dist/client/assets/{preview-render-compiler-BjLlHmiQ.js → preview-render-compiler-Tkc6JX1O.js} +2 -2
- package/dist/client/assets/{preview-render-profile-CR4dJZrp.js → preview-render-profile-Bf6R7v4w.js} +6 -6
- package/dist/client/assets/{preview-render-worker-B4dH2yxj.js → preview-render-worker-1LBLqgKu.js} +7 -7
- package/dist/client/assets/{pt-BR-5YFKRR5G-M7gIm2Hi.js → pt-BR-5YFKRR5G-CopLYEA6.js} +1 -1
- package/dist/client/assets/{pt-PT-GEIXXZ67-CcxWpkGj.js → pt-PT-GEIXXZ67-BjZ_Lphg.js} +1 -1
- package/dist/client/assets/{pug-DkUcLYWt.js → pug-lkTEco3G.js} +1 -1
- package/dist/client/assets/{python-CZtTmYkS.js → python-BUyhM0Ew.js} +1 -1
- package/dist/client/assets/{q-I27iQntV.js → q-Dls1OX0D.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-337W2JSQ-CYKgdx7K.js → quadrantDiagram-34T5L4WZ-2vfo0l5S.js} +1 -1
- package/dist/client/assets/{quick-switcher-controller-DcyllYpm.js → quick-switcher-controller-B1erSgJ1.js} +1 -1
- package/dist/client/assets/{r-DN_EydfL.js → r-DeZ8Mdev.js} +1 -1
- package/dist/client/assets/radar-PYXPWWZC-2jR4qZNU.js +1 -0
- package/dist/client/assets/reduce-ChpYjEUB.js +1 -0
- package/dist/client/assets/requirementDiagram-MS252O5E-CtUIQnWa.js +84 -0
- package/dist/client/assets/{ro-RO-E2P6TFZI-qR9noVzP.js → ro-RO-E2P6TFZI-DakDz5Xu.js} +1 -1
- package/dist/client/assets/{room-yJaBAoEU.js → room-z2w9b96b.js} +1 -1
- package/dist/client/assets/{ru-RU-YBIIY43T-CE4S_RX8.js → ru-RU-YBIIY43T-BMvCT-XT.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-WA2Y5GQK-CfHe3D6R.js → sankeyDiagram-XADWPNL6-tcSeuifE.js} +1 -1
- package/dist/client/assets/sequenceDiagram-FGHM5R23-DtF-1Kt2.js +157 -0
- package/dist/client/assets/{si-LK-673C2CI2-Bv6Avh3z.js → si-LK-673C2CI2-hGdH1S9E.js} +1 -1
- package/dist/client/assets/{sk-SK-CKZHQ4AP-Cnlpp55z.js → sk-SK-CKZHQ4AP-DiRA-fj8.js} +1 -1
- package/dist/client/assets/{sl-SI-557H2GWM-BfGq7AQF.js → sl-SI-557H2GWM-DN94n_1-.js} +1 -1
- package/dist/client/assets/{sparql-BOvq0dv7.js → sparql-vm8qNO8J.js} +1 -1
- package/dist/client/assets/sql-GL7dVWcd.js +1 -0
- package/dist/client/assets/src-BuiVcSz-.js +1 -0
- package/dist/client/assets/stateDiagram-FHFEXIEX-DKk7Sb0f.js +1 -0
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-DJUaiADr.js +1 -0
- package/dist/client/assets/subset-shared.chunk-CWNYNLru.js +1 -0
- package/dist/client/assets/{subset-worker.chunk-BSCP6IiC.js → subset-worker.chunk-kj1e3wjW.js} +1 -1
- package/dist/client/assets/{sv-SE-XOPKKDWS-B2_Vk-sp.js → sv-SE-XOPKKDWS-CkHUNABj.js} +1 -1
- package/dist/client/assets/{swift-BCxe4-cw.js → swift-CKcKnWv9.js} +1 -1
- package/dist/client/assets/{ta-IN-XBH7DQI3-BXQMZZIx.js → ta-IN-XBH7DQI3-W-157oVK.js} +1 -1
- package/dist/client/assets/{th-TH-TOCWH3R4-C-ZIYMfH.js → th-TH-TOCWH3R4-BsU-Pydr.js} +1 -1
- package/dist/client/assets/timeline-definition-GMOUNBTQ-Bs6U53Mo.js +120 -0
- package/dist/client/assets/{tr-TR-GXW6CYY5-dl702PMA.js → tr-TR-GXW6CYY5-CTddyq89.js} +1 -1
- package/dist/client/assets/treeView-SZITEDCU-DN5dP2ol.js +1 -0
- package/dist/client/assets/treemap-W4RFUUIX-Dva7DBJR.js +1 -0
- package/dist/client/assets/{turtle-GBz_E4RG.js → turtle-BkP3ExOG.js} +1 -1
- package/dist/client/assets/{uk-UA-IJKTNUDG-CUYQvSSF.js → uk-UA-IJKTNUDG-1LzXkII3.js} +1 -1
- package/dist/client/assets/{uz-UZ-TBZZEA4V-B9qw0PXX.js → uz-UZ-TBZZEA4V-kqm-qcUj.js} +1 -1
- package/dist/client/assets/{vault-api-client-p7h7cXKM.js → vault-api-client-DSx3mWkH.js} +1 -1
- package/dist/client/assets/{vault-utils-5Xr0MXCb.js → vault-utils-CRpy8MQz.js} +1 -1
- package/dist/client/assets/vennDiagram-DHZGUBPP-DNnIjRae.js +34 -0
- package/dist/client/assets/{verilog-C4wTycyo.js → verilog-DSARZZPc.js} +1 -1
- package/dist/client/assets/{vhdl-Bwndeg44.js → vhdl-CnYyYTpa.js} +1 -1
- package/dist/client/assets/{vi-VN-MULSGNVB-DqxZ_sVc.js → vi-VN-MULSGNVB-C3H2AUhm.js} +1 -1
- package/dist/client/assets/wardley-RL74JXVD-CDZW5uzY.js +1 -0
- package/dist/client/assets/wardleyDiagram-NUSXRM2D-C-scJfPY.js +20 -0
- package/dist/client/assets/{xychartDiagram-JWTSCODW-C3vA70iJ.js → xychartDiagram-5P7HB3ND-D3nQoxhz.js} +6 -6
- package/dist/client/assets/yjs-provider-reset-guard-DSPzcvAO.js +4 -0
- package/dist/client/assets/{zh-CN-MVX3E32U-BM0aLuGc.js → zh-CN-MVX3E32U-BULPbsyl.js} +1 -1
- package/dist/client/assets/{zh-HK-JNU5RLIE-dmG_YD0d.js → zh-HK-JNU5RLIE-bNGmeSaW.js} +1 -1
- package/dist/client/assets/{zh-TW-LENVCA6T-LFgbiOi3.js → zh-TW-LENVCA6T-CQDp064P.js} +1 -1
- package/dist/client/drawio-editor.html +1 -1
- package/dist/client/excalidraw-editor.html +1 -1
- package/dist/client/export-document.html +1 -1
- package/dist/client/index.html +2 -2
- package/package.json +15 -15
- package/src/client/application/app-shell/presence-feature.js +265 -34
- package/src/client/application/app-shell/ui-feature-shell.js +31 -5
- package/src/client/application/app-shell/ui-feature-tab-activity.js +1 -0
- package/src/client/application/app-shell/workspace-feature.js +5 -2
- package/src/client/application/app-shell-elements.js +3 -0
- package/src/client/application/diagram-preview-export.js +304 -0
- package/src/client/application/mermaid-preview-hydrator.js +153 -23
- package/src/client/application/plantuml-preview-hydrator.js +155 -20
- package/src/client/application/preview-diagram-utils.js +48 -8
- package/src/client/application/preview-renderer.js +2 -0
- package/src/client/application/quick-switcher-loader.js +42 -0
- package/src/client/application/workspace-route-controller.js +35 -2
- package/src/client/application/workspace-state-store.js +1 -0
- package/src/client/bootstrap/collabmd-app-shell.js +25 -20
- package/src/client/domain/diagram-action-icons.js +21 -0
- package/src/client/domain/excalidraw-api-scene-sync.js +70 -0
- package/src/client/domain/keyboard-shortcuts.js +8 -0
- package/src/client/drawio-editor.js +13 -0
- package/src/client/excalidraw-editor.js +119 -18
- package/src/client/infrastructure/excalidraw-room-client.js +42 -5
- package/src/client/infrastructure/workspace-sync-client.js +26 -3
- package/src/client/presentation/app-shell-template.js +18 -1
- package/src/client/presentation/comment-ui/comment-ui-card.js +83 -3
- package/src/client/presentation/comment-ui/comment-ui-state.js +25 -2
- package/src/client/presentation/drawio-embed-controller.js +18 -0
- package/src/client/presentation/excalidraw-embed-controller.js +7 -0
- package/src/client/presentation/file-explorer-controller.js +10 -0
- package/src/client/presentation/file-explorer-view.js +6 -0
- package/src/client/presentation/git-panel-controller.js +2 -0
- package/src/client/presentation/image-lightbox-controller.js +290 -29
- package/src/client/styles/features/collaboration-presence.css +212 -0
- package/src/client/styles/features/diagram-preview.css +71 -4
- package/src/client/styles/features/embedded-preview.css +4 -6
- package/src/client/styles/features/media-lightbox.css +2 -0
- package/src/server/config/env.js +4 -0
- package/src/server/create-app-server.js +2 -0
- package/src/server/domain/backlink-index.js +33 -72
- package/src/server/domain/bases/base-index-snapshot-store.js +46 -62
- package/src/server/domain/bases/base-query-service.js +89 -7
- package/src/server/domain/collaboration/collaboration-room.js +10 -1
- package/src/server/domain/markdown-reference-extractor.js +233 -0
- package/src/server/infrastructure/http/create-request-handler.js +1 -0
- package/src/server/infrastructure/http/create-vault-api-handler.js +2 -0
- package/src/server/infrastructure/http/create-vault-api-query-handler.js +100 -26
- package/src/server/infrastructure/persistence/vault-file-store.js +175 -4
- package/src/server/infrastructure/workspace/file-system-sync-service.js +45 -21
- package/dist/client/assets/_basePickBy-Dv0sK1l7.js +0 -1
- package/dist/client/assets/_baseUniq-DKYX57ji.js +0 -1
- package/dist/client/assets/arc-DrfYGhWk.js +0 -1
- package/dist/client/assets/architecture-PBZL5I3N-DiglIZi9.js +0 -1
- package/dist/client/assets/blockDiagram-WCTKOSBZ-GIgTqnhk.js +0 -132
- package/dist/client/assets/c4Diagram-IC4MRINW-CkHO1i_L.js +0 -10
- package/dist/client/assets/channel-CgsU9TSN.js +0 -1
- package/dist/client/assets/chunk-7E7YKBS2-TdU92i9i.js +0 -1
- package/dist/client/assets/chunk-7R4GIKGN-mqd2GwMg.js +0 -80
- package/dist/client/assets/chunk-C72U2L5F-CJKQWBtz.js +0 -1
- package/dist/client/assets/chunk-DpHwWhuW.js +0 -1
- package/dist/client/assets/chunk-EGIJ26TM-C4nq20om.js +0 -1
- package/dist/client/assets/chunk-GEFDOKGD-Bs7FmFox.js +0 -2
- package/dist/client/assets/chunk-GLR3WWYH-qQe2O5VQ.js +0 -2
- package/dist/client/assets/chunk-HHEYEP7N-DlevL8bq.js +0 -1
- package/dist/client/assets/chunk-KYZI473N-CTSCuqRb.js +0 -53
- package/dist/client/assets/chunk-L3YUKLVL-CJZMBtKF.js +0 -1
- package/dist/client/assets/chunk-MX3YWQON-DQpSwRf6.js +0 -1
- package/dist/client/assets/chunk-NU2UP6EN-DlUENSHU.js +0 -35
- package/dist/client/assets/chunk-O4XLMI2P-CcVxZh41.js +0 -7
- package/dist/client/assets/chunk-OZEHJAEY-DjBZbgu0.js +0 -1
- package/dist/client/assets/chunk-QZHKN3VN-CgLPFSk5.js +0 -1
- package/dist/client/assets/chunk-R5LLSJPH-CkjKXM73.js +0 -1
- package/dist/client/assets/chunk-WL4C6EOR-axcuKSup.js +0 -189
- package/dist/client/assets/chunk-XIRO2GV7-4wqVHjs_.js +0 -1
- package/dist/client/assets/chunk-XZSTWKYB-C8Y_hIKZ.js +0 -94
- package/dist/client/assets/chunk-YBOYWFTD-CKg4ymFF.js +0 -1
- package/dist/client/assets/classDiagram-VBA2DB6C-BHZpvOxK.js +0 -1
- package/dist/client/assets/classDiagram-v2-RAHNMMFH-DA7HMUUs.js +0 -1
- package/dist/client/assets/clike-1_ZsiVV8.js +0 -1
- package/dist/client/assets/clone-Dgi8Z4IL.js +0 -1
- package/dist/client/assets/cytoscape.esm-Czjc507F.js +0 -321
- package/dist/client/assets/dagre-CfB3Fw33.js +0 -1
- package/dist/client/assets/dagre-KLK3FWXG-CC7tq2Ky.js +0 -4
- package/dist/client/assets/diagram-E7M64L7V-CMt7BN5M.js +0 -24
- package/dist/client/assets/diagram-IFDJBPK2-BFMBUGpd.js +0 -43
- package/dist/client/assets/diagram-P4PSJMXO-CviA1xXr.js +0 -24
- package/dist/client/assets/dist-3bQB_we3.js +0 -1
- package/dist/client/assets/dist-8Igu3Ee_2.js +0 -1
- package/dist/client/assets/dist-BU8uusJX.js +0 -1
- package/dist/client/assets/dist-BVB8rn7o.js +0 -1
- package/dist/client/assets/dist-D5QOYy7y.js +0 -6
- package/dist/client/assets/dist-DIi0uqLJ.js +0 -1
- package/dist/client/assets/dist-DJ16N7ol.js +0 -1
- package/dist/client/assets/dist-DWJL3_bF.js +0 -13
- package/dist/client/assets/dist-O1z0Ayg0.js +0 -1
- package/dist/client/assets/dist-OQE68wIX.js +0 -1
- package/dist/client/assets/dist-x7PIEmJu.js +0 -1
- package/dist/client/assets/drawio-editor-BMTwP5mD.js +0 -9
- package/dist/client/assets/editor-session-Dzy_85Wp.js +0 -16
- package/dist/client/assets/excalidraw-editor-CAP9F8CB.js +0 -9
- package/dist/client/assets/excalidraw-editor-Dj3i59LW.css +0 -1
- package/dist/client/assets/excalidraw-scene-BF_bT1OL.js +0 -176
- package/dist/client/assets/excalidrawEditor-DD4AvzYP.js +0 -2
- package/dist/client/assets/exportDocument-Zfwq1XVx.js +0 -2
- package/dist/client/assets/flowDiagram-PKNHOUZH-C_t-mkwb.js +0 -162
- package/dist/client/assets/ganttDiagram-A5KZAMGK-BtK9Tb--.js +0 -292
- package/dist/client/assets/gitGraph-HDMCJU4V-CT7YfbD3.js +0 -1
- package/dist/client/assets/gitGraphDiagram-K3NZZRJ6-DULDLGiJ.js +0 -65
- package/dist/client/assets/graphlib-BgRST-Qg.js +0 -1
- package/dist/client/assets/image-XLNPCCAD-CFiKwiWK.js +0 -1
- package/dist/client/assets/image-blob-reduce.esm-DriR2zT9.js +0 -2
- package/dist/client/assets/info-3K5VOQVL-DUpNyDC-.js +0 -1
- package/dist/client/assets/isArrayLikeObject-BId_dPHM.js +0 -1
- package/dist/client/assets/isEmpty-CVvRj8fj.js +0 -1
- package/dist/client/assets/ishikawaDiagram-PHBUUO56-DpBuDpC6.js +0 -70
- package/dist/client/assets/javascript-UJe68_xi.js +0 -1
- package/dist/client/assets/line-B2GMovaI.js +0 -1
- package/dist/client/assets/main-CfSHaGes.js +0 -1368
- package/dist/client/assets/math-B-LMBwub.js +0 -1
- package/dist/client/assets/mermaid-parser.core-B1ogGcR8.js +0 -4
- package/dist/client/assets/mermaid-runtime-Bn8A6DGx.js +0 -11
- package/dist/client/assets/packet-RMMSAZCW-DEwNbIrA.js +0 -1
- package/dist/client/assets/percentages-5DKR754L-D7n4T776.js +0 -1
- package/dist/client/assets/pica-C1TdTz-C.js +0 -2
- package/dist/client/assets/pie-UPGHQEXC-D5M_lSjo.js +0 -1
- package/dist/client/assets/pieDiagram-SKSYHLDU-jhHouFpk.js +0 -30
- package/dist/client/assets/preview-render-compiler-Duy_3IcP.js +0 -1
- package/dist/client/assets/radar-KQ55EAFF-AU1qh3Bw.js +0 -1
- package/dist/client/assets/requirementDiagram-Z7DCOOCP-D9SHxoW7.js +0 -73
- package/dist/client/assets/sequenceDiagram-2WXFIKYE-CZsMMqAJ.js +0 -145
- package/dist/client/assets/sql-DDFeQNTK.js +0 -1
- package/dist/client/assets/src-Pgt9Gp65.js +0 -1
- package/dist/client/assets/stateDiagram-RAJIS63D-CoNZjTYV.js +0 -1
- package/dist/client/assets/stateDiagram-v2-FVOUBMTO-1zOw6NmQ.js +0 -1
- package/dist/client/assets/subset-shared.chunk-C9HjwTXy.js +0 -1
- package/dist/client/assets/timeline-definition-YZTLITO2-DSe2mrG8.js +0 -61
- package/dist/client/assets/treemap-KZPCXAKY-C9UI2fwP.js +0 -1
- package/dist/client/assets/vennDiagram-LZ73GAT5-xSzaIpy1.js +0 -34
- package/dist/client/assets/yjs-provider-reset-guard-CtERLBID.js +0 -4
- /package/dist/client/assets/{drawio-room-DEivFyNV.js → drawio-room-1i6Nn0_Z.js} +0 -0
- /package/dist/client/assets/{excalidraw-mermaid-stub-BZPU4ZhU.js → excalidraw-mermaid-stub-DzxtBcQW.js} +0 -0
- /package/dist/client/assets/{file-kind-DBptLlF_.js → file-kind-DmKq2MvD.js} +0 -0
- /package/dist/client/assets/{rough.esm-DE_lJ5Ge.js → rough.esm-BU2knLt9.js} +0 -0
- /package/dist/client/assets/{runtime-config-CqhchMC4.js → runtime-config-DWTejofP.js} +0 -0
|
@@ -75,13 +75,12 @@
|
|
|
75
75
|
|
|
76
76
|
.preview-content .mermaid-toolbar,
|
|
77
77
|
.mermaid-maximized-root .mermaid-toolbar {
|
|
78
|
-
|
|
78
|
+
width: 100%;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
.preview-content .mermaid-zoom-btn,
|
|
82
82
|
.mermaid-maximized-root .mermaid-zoom-btn {
|
|
83
|
-
|
|
84
|
-
line-height: 1.5;
|
|
83
|
+
flex-shrink: 0;
|
|
85
84
|
}
|
|
86
85
|
|
|
87
86
|
.preview-content .mermaid-zoom-btn:disabled,
|
|
@@ -174,13 +173,12 @@ body.mermaid-maximized-open::before {
|
|
|
174
173
|
|
|
175
174
|
.preview-content .plantuml-toolbar,
|
|
176
175
|
.plantuml-maximized-root .plantuml-toolbar {
|
|
177
|
-
|
|
176
|
+
width: 100%;
|
|
178
177
|
}
|
|
179
178
|
|
|
180
179
|
.preview-content .plantuml-tool-btn,
|
|
181
180
|
.plantuml-maximized-root .plantuml-tool-btn {
|
|
182
|
-
|
|
183
|
-
line-height: 1.5;
|
|
181
|
+
flex-shrink: 0;
|
|
184
182
|
}
|
|
185
183
|
|
|
186
184
|
.preview-content .plantuml-frame,
|
package/src/server/config/env.js
CHANGED
|
@@ -322,6 +322,10 @@ export function loadConfig(overrides = {}) {
|
|
|
322
322
|
httpRequestTimeoutMs: parsePositiveInt(process.env.HTTP_REQUEST_TIMEOUT_MS, 30_000),
|
|
323
323
|
git,
|
|
324
324
|
gitEnabled: git.enabled,
|
|
325
|
+
maxArchiveEntries: parsePositiveInt(process.env.COLLABMD_MAX_ARCHIVE_ENTRIES, 10_000),
|
|
326
|
+
maxBaseQueryRows: parsePositiveInt(process.env.COLLABMD_MAX_BASE_QUERY_ROWS, 5_000),
|
|
327
|
+
maxDownloadFileBytes: parsePositiveInt(process.env.COLLABMD_MAX_DOWNLOAD_FILE_BYTES, 268_435_456),
|
|
328
|
+
maxInitialSyncBytes: parsePositiveInt(process.env.COLLABMD_MAX_INITIAL_SYNC_BYTES, 16_777_216),
|
|
325
329
|
perfLoggingEnabled: overrides.perfLoggingEnabled ?? isPerfLoggingEnabled(process.env.COLLABMD_PERF_LOGGING),
|
|
326
330
|
port: parsePort(process.env.PORT, 1234),
|
|
327
331
|
nodeEnv,
|
|
@@ -77,6 +77,7 @@ export function createAppServer(config = loadConfig()) {
|
|
|
77
77
|
let fileSystemSyncService = null;
|
|
78
78
|
let workspaceMutationCoordinator = null;
|
|
79
79
|
const baseQueryService = new BaseQueryService({
|
|
80
|
+
maxResultRows: config.maxBaseQueryRows,
|
|
80
81
|
vaultFileStore,
|
|
81
82
|
workspaceStateProvider: () => workspaceMutationCoordinator?.workspaceState ?? null,
|
|
82
83
|
workspaceStateSynchronizer: () => fileSystemSyncService?.flushPendingChanges?.(),
|
|
@@ -104,6 +105,7 @@ export function createAppServer(config = loadConfig()) {
|
|
|
104
105
|
}),
|
|
105
106
|
getHydrateDelayMs: () => testControls.wsRoomHydrateDelayMs,
|
|
106
107
|
idleGraceMs: config.wsRoomIdleGraceMs,
|
|
108
|
+
maxInitialSyncBytes: config.maxInitialSyncBytes,
|
|
107
109
|
maxBufferedAmountBytes: config.wsMaxBufferedAmountBytes,
|
|
108
110
|
name,
|
|
109
111
|
onEmpty,
|
|
@@ -10,11 +10,15 @@
|
|
|
10
10
|
* incrementally whenever a file is persisted, created, deleted, or renamed.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import { createWikiTargetIndex
|
|
14
|
-
import {
|
|
13
|
+
import { createWikiTargetIndex } from '../../domain/wiki-link-resolver.js';
|
|
14
|
+
import { isMarkdownFilePath } from '../../domain/file-kind.js';
|
|
15
|
+
import {
|
|
16
|
+
collectMarkdownReferences,
|
|
17
|
+
collectReferenceTargetKeysForFilePath,
|
|
18
|
+
createReferenceTargetAliasMap,
|
|
19
|
+
} from './markdown-reference-extractor.js';
|
|
15
20
|
import { mapWithConcurrency } from '../shared/async-utils.js';
|
|
16
21
|
|
|
17
|
-
const WIKI_LINK_RE = /\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
|
|
18
22
|
const BACKLINK_BUILD_CONCURRENCY = 8;
|
|
19
23
|
|
|
20
24
|
function createDeferred() {
|
|
@@ -27,39 +31,6 @@ function createDeferred() {
|
|
|
27
31
|
return { promise, reject, resolve };
|
|
28
32
|
}
|
|
29
33
|
|
|
30
|
-
function normalizeWikiTargetKey(target = '') {
|
|
31
|
-
const normalizedTarget = String(target ?? '').trim();
|
|
32
|
-
if (!normalizedTarget) {
|
|
33
|
-
return '';
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
return getVaultFileExtension(normalizedTarget)
|
|
37
|
-
? normalizedTarget
|
|
38
|
-
: `${normalizedTarget}.md`;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
function collectWikiTargetKeysForFilePath(filePath = '') {
|
|
42
|
-
const normalizedPath = String(filePath ?? '').trim();
|
|
43
|
-
if (!normalizedPath) {
|
|
44
|
-
return [];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const segments = normalizedPath.split('/').filter(Boolean);
|
|
48
|
-
const keys = [];
|
|
49
|
-
for (let index = 0; index < segments.length; index += 1) {
|
|
50
|
-
keys.push(segments.slice(index).join('/'));
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (isMarkdownFilePath(normalizedPath)) {
|
|
54
|
-
const rawSegments = normalizedPath.replace(/\.md$/i, '').split('/').filter(Boolean);
|
|
55
|
-
for (let index = 0; index < rawSegments.length; index += 1) {
|
|
56
|
-
keys.push(rawSegments.slice(index).join('/'));
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return [...new Set(keys)];
|
|
61
|
-
}
|
|
62
|
-
|
|
63
34
|
export class BacklinkIndex {
|
|
64
35
|
constructor({
|
|
65
36
|
rebuildDelayMs = 150,
|
|
@@ -225,7 +196,10 @@ export class BacklinkIndex {
|
|
|
225
196
|
* Incrementally update the index when a file's content changes.
|
|
226
197
|
* Call this after every persist / write.
|
|
227
198
|
*/
|
|
228
|
-
updateFile(filePath, content, {
|
|
199
|
+
updateFile(filePath, content, {
|
|
200
|
+
refreshIndex = true,
|
|
201
|
+
targetPathAliases = new Map(),
|
|
202
|
+
} = {}) {
|
|
229
203
|
// Remove old forward links for this file
|
|
230
204
|
this._removeForwardLinks(filePath);
|
|
231
205
|
|
|
@@ -242,7 +216,7 @@ export class BacklinkIndex {
|
|
|
242
216
|
}
|
|
243
217
|
|
|
244
218
|
// Re-index with new content
|
|
245
|
-
this._indexFile(filePath, content);
|
|
219
|
+
this._indexFile(filePath, content, { targetPathAliases });
|
|
246
220
|
}
|
|
247
221
|
|
|
248
222
|
/**
|
|
@@ -514,38 +488,32 @@ export class BacklinkIndex {
|
|
|
514
488
|
|
|
515
489
|
// --- Private methods ---
|
|
516
490
|
|
|
517
|
-
_indexFile(filePath, content) {
|
|
491
|
+
_indexFile(filePath, content, { targetPathAliases = new Map() } = {}) {
|
|
518
492
|
const resolvedTargets = new Set();
|
|
519
493
|
const contextsByTarget = new Map();
|
|
520
494
|
const rawTargetKeys = new Set();
|
|
521
|
-
const
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
while ((match = WIKI_LINK_RE.exec(line)) !== null) {
|
|
527
|
-
const target = match[1].trim();
|
|
528
|
-
if (!target) {
|
|
529
|
-
continue;
|
|
530
|
-
}
|
|
495
|
+
const references = collectMarkdownReferences(content, {
|
|
496
|
+
sourceFilePath: filePath,
|
|
497
|
+
targetPathAliases,
|
|
498
|
+
wikiTargetIndex: this._wikiTargetIndex,
|
|
499
|
+
});
|
|
531
500
|
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
501
|
+
for (const reference of references) {
|
|
502
|
+
if (reference.rawTargetKey) {
|
|
503
|
+
rawTargetKeys.add(reference.rawTargetKey);
|
|
504
|
+
}
|
|
536
505
|
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
506
|
+
const resolved = reference.resolvedPath;
|
|
507
|
+
if (!resolved || resolved === filePath) {
|
|
508
|
+
continue;
|
|
509
|
+
}
|
|
541
510
|
|
|
542
|
-
|
|
511
|
+
resolvedTargets.add(resolved);
|
|
543
512
|
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
}
|
|
547
|
-
contextsByTarget.get(resolved).push(line.trim());
|
|
513
|
+
if (!contextsByTarget.has(resolved)) {
|
|
514
|
+
contextsByTarget.set(resolved, []);
|
|
548
515
|
}
|
|
516
|
+
contextsByTarget.get(resolved).push(reference.context);
|
|
549
517
|
}
|
|
550
518
|
|
|
551
519
|
this.contextsBySource.delete(filePath);
|
|
@@ -594,14 +562,6 @@ export class BacklinkIndex {
|
|
|
594
562
|
this.forward.delete(filePath);
|
|
595
563
|
}
|
|
596
564
|
|
|
597
|
-
/**
|
|
598
|
-
* Resolve a wiki-link target string to a vault file path.
|
|
599
|
-
* Same logic as the client's resolveWikiTarget.
|
|
600
|
-
*/
|
|
601
|
-
_resolveTarget(target) {
|
|
602
|
-
return resolveWikiTargetWithIndex(target, this._wikiTargetIndex);
|
|
603
|
-
}
|
|
604
|
-
|
|
605
565
|
_refreshWikiTargetIndex() {
|
|
606
566
|
this._wikiTargetIndex = createWikiTargetIndex(this._fileList);
|
|
607
567
|
}
|
|
@@ -629,7 +589,7 @@ export class BacklinkIndex {
|
|
|
629
589
|
_collectImpactedSourcesForMembershipChanges(pathValues = []) {
|
|
630
590
|
const affectedTargetKeys = new Set();
|
|
631
591
|
pathValues.forEach((pathValue) => {
|
|
632
|
-
|
|
592
|
+
collectReferenceTargetKeysForFilePath(pathValue).forEach((targetKey) => {
|
|
633
593
|
affectedTargetKeys.add(targetKey);
|
|
634
594
|
});
|
|
635
595
|
});
|
|
@@ -648,6 +608,7 @@ export class BacklinkIndex {
|
|
|
648
608
|
renameMap = new Map(),
|
|
649
609
|
} = {}) {
|
|
650
610
|
const refreshedSources = new Set();
|
|
611
|
+
const targetPathAliases = createReferenceTargetAliasMap(Array.from(renameMap.entries()));
|
|
651
612
|
|
|
652
613
|
for (const sourcePath of impactedSources) {
|
|
653
614
|
const livePath = renameMap.get(sourcePath) ?? sourcePath;
|
|
@@ -666,7 +627,7 @@ export class BacklinkIndex {
|
|
|
666
627
|
}
|
|
667
628
|
|
|
668
629
|
refreshedSources.add(livePath);
|
|
669
|
-
this.updateFile(livePath, content, { refreshIndex: false });
|
|
630
|
+
this.updateFile(livePath, content, { refreshIndex: false, targetPathAliases });
|
|
670
631
|
}
|
|
671
632
|
}
|
|
672
633
|
}
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { basename, dirname, extname } from 'node:path';
|
|
2
2
|
|
|
3
|
-
import { createWikiTargetIndex
|
|
3
|
+
import { createWikiTargetIndex } from '../../../domain/wiki-link-resolver.js';
|
|
4
4
|
import {
|
|
5
|
-
getVaultFileExtension,
|
|
6
5
|
isMarkdownFilePath,
|
|
7
6
|
stripVaultFileExtension,
|
|
8
7
|
} from '../../../domain/file-kind.js';
|
|
9
8
|
import { extractYamlFrontmatter } from '../../../domain/yaml-frontmatter.js';
|
|
9
|
+
import {
|
|
10
|
+
collectMarkdownReferences,
|
|
11
|
+
collectReferenceTargetKeysForFilePath,
|
|
12
|
+
createReferenceTargetAliasMap,
|
|
13
|
+
} from '../markdown-reference-extractor.js';
|
|
10
14
|
import { mapWithConcurrency } from '../../shared/async-utils.js';
|
|
11
15
|
import { createLinkValue, dedupeLinkValues } from './base-expression-runtime.js';
|
|
12
16
|
|
|
13
|
-
const INTERNAL_LINK_RE = /(!)?\[\[([^\]|#]+)(?:#[^\]|]+)?(?:\|[^\]]+)?\]\]/g;
|
|
14
17
|
const INLINE_TAG_RE = /(^|[\s(])#([A-Za-z0-9/_-]+)/g;
|
|
15
18
|
const INDEX_READ_CONCURRENCY = 8;
|
|
16
19
|
|
|
@@ -42,28 +45,35 @@ function compareVaultPaths(left = '', right = '') {
|
|
|
42
45
|
return String(left).localeCompare(String(right), undefined, { sensitivity: 'base' });
|
|
43
46
|
}
|
|
44
47
|
|
|
45
|
-
function extractReferences(markdownText = '',
|
|
48
|
+
function extractReferences(markdownText = '', {
|
|
49
|
+
sourceFilePath = '',
|
|
50
|
+
targetPathAliases = new Map(),
|
|
51
|
+
wikiTargetIndex,
|
|
52
|
+
} = {}) {
|
|
46
53
|
const links = [];
|
|
47
54
|
const embeds = [];
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
+
const rawTargetKeys = new Set();
|
|
56
|
+
const references = collectMarkdownReferences(markdownText, {
|
|
57
|
+
sourceFilePath,
|
|
58
|
+
targetPathAliases,
|
|
59
|
+
wikiTargetIndex,
|
|
60
|
+
});
|
|
55
61
|
|
|
56
|
-
|
|
57
|
-
const linkValue = createLinkValue(resolvedPath || rawTarget, {
|
|
58
|
-
exists: Boolean(resolvedPath),
|
|
59
|
-
rawTarget,
|
|
62
|
+
references.forEach((reference) => {
|
|
63
|
+
const linkValue = createLinkValue(reference.resolvedPath || reference.targetPath || reference.rawTarget, {
|
|
64
|
+
exists: Boolean(reference.resolvedPath),
|
|
65
|
+
rawTarget: reference.rawTarget,
|
|
60
66
|
});
|
|
61
67
|
links.push(linkValue);
|
|
62
|
-
if (isEmbed) {
|
|
68
|
+
if (reference.isEmbed) {
|
|
63
69
|
embeds.push(linkValue);
|
|
64
70
|
}
|
|
65
|
-
|
|
66
|
-
|
|
71
|
+
if (reference.rawTargetKey) {
|
|
72
|
+
rawTargetKeys.add(reference.rawTargetKey);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
return { embeds, links, rawTargetKeys };
|
|
67
77
|
}
|
|
68
78
|
|
|
69
79
|
function isWorkspaceFileEntry(entry = null) {
|
|
@@ -81,39 +91,6 @@ function listWorkspaceFilePaths(workspaceState = {}) {
|
|
|
81
91
|
.sort(compareVaultPaths);
|
|
82
92
|
}
|
|
83
93
|
|
|
84
|
-
function normalizeWikiTargetKey(target = '') {
|
|
85
|
-
const normalizedTarget = String(target ?? '').trim();
|
|
86
|
-
if (!normalizedTarget) {
|
|
87
|
-
return '';
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return getVaultFileExtension(normalizedTarget)
|
|
91
|
-
? normalizedTarget
|
|
92
|
-
: `${normalizedTarget}.md`;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function collectWikiTargetKeysForFilePath(filePath = '') {
|
|
96
|
-
const normalizedPath = String(filePath ?? '').trim();
|
|
97
|
-
if (!normalizedPath) {
|
|
98
|
-
return [];
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const segments = normalizedPath.split('/').filter(Boolean);
|
|
102
|
-
const keys = [];
|
|
103
|
-
for (let index = 0; index < segments.length; index += 1) {
|
|
104
|
-
keys.push(segments.slice(index).join('/'));
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
if (isMarkdownFilePath(normalizedPath)) {
|
|
108
|
-
const rawSegments = normalizedPath.replace(/\.md$/i, '').split('/').filter(Boolean);
|
|
109
|
-
for (let index = 0; index < rawSegments.length; index += 1) {
|
|
110
|
-
keys.push(rawSegments.slice(index).join('/'));
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
return [...new Set(keys)];
|
|
115
|
-
}
|
|
116
|
-
|
|
117
94
|
function createBacklinkEntry(sourcePath = '') {
|
|
118
95
|
return createLinkValue(sourcePath, {
|
|
119
96
|
display: basename(sourcePath),
|
|
@@ -160,12 +137,18 @@ export class BaseIndexSnapshotStore {
|
|
|
160
137
|
return scannedWorkspaceState;
|
|
161
138
|
}
|
|
162
139
|
|
|
163
|
-
createSnapshotRow(filePath, workspaceState, wikiTargetIndex, markdownContent = null
|
|
140
|
+
createSnapshotRow(filePath, workspaceState, wikiTargetIndex, markdownContent = null, {
|
|
141
|
+
targetPathAliases = new Map(),
|
|
142
|
+
} = {}) {
|
|
164
143
|
const metadata = workspaceState.metadata.get(filePath) ?? null;
|
|
165
144
|
const frontmatter = markdownContent ? extractYamlFrontmatter(markdownContent) : null;
|
|
166
145
|
const noteProperties = isPlainObject(frontmatter?.data) ? frontmatter.data : {};
|
|
167
146
|
const bodyMarkdown = frontmatter?.bodyMarkdown ?? markdownContent ?? '';
|
|
168
|
-
const references = extractReferences(bodyMarkdown,
|
|
147
|
+
const references = extractReferences(bodyMarkdown, {
|
|
148
|
+
sourceFilePath: filePath,
|
|
149
|
+
targetPathAliases,
|
|
150
|
+
wikiTargetIndex,
|
|
151
|
+
});
|
|
169
152
|
const tags = [...new Set([
|
|
170
153
|
...normalizeTags(noteProperties.tags),
|
|
171
154
|
...extractInlineTags(bodyMarkdown),
|
|
@@ -193,11 +176,7 @@ export class BaseIndexSnapshotStore {
|
|
|
193
176
|
.map((link) => link?.path)
|
|
194
177
|
.filter((targetPath) => targetPath && targetPath !== filePath),
|
|
195
178
|
),
|
|
196
|
-
rawTargetKeys:
|
|
197
|
-
references.links
|
|
198
|
-
.map((link) => normalizeWikiTargetKey(link?.rawTarget))
|
|
199
|
-
.filter(Boolean),
|
|
200
|
-
),
|
|
179
|
+
rawTargetKeys: references.rawTargetKeys,
|
|
201
180
|
row: {
|
|
202
181
|
file: fileValue,
|
|
203
182
|
noteProperties,
|
|
@@ -373,7 +352,7 @@ export class BaseIndexSnapshotStore {
|
|
|
373
352
|
collectImpactedSourcesForMembershipChanges(snapshot, pathValues = []) {
|
|
374
353
|
const affectedTargetKeys = new Set();
|
|
375
354
|
pathValues.forEach((pathValue) => {
|
|
376
|
-
|
|
355
|
+
collectReferenceTargetKeysForFilePath(pathValue).forEach((targetKey) => {
|
|
377
356
|
affectedTargetKeys.add(targetKey);
|
|
378
357
|
});
|
|
379
358
|
});
|
|
@@ -392,7 +371,9 @@ export class BaseIndexSnapshotStore {
|
|
|
392
371
|
return impactedPaths;
|
|
393
372
|
}
|
|
394
373
|
|
|
395
|
-
async refreshSnapshotRows(snapshot, workspaceState, pathValues = []
|
|
374
|
+
async refreshSnapshotRows(snapshot, workspaceState, pathValues = [], {
|
|
375
|
+
targetPathAliases = new Map(),
|
|
376
|
+
} = {}) {
|
|
396
377
|
const filePathsToRefresh = Array.from(new Set(pathValues))
|
|
397
378
|
.filter((pathValue) => {
|
|
398
379
|
const entry = workspaceState?.entries?.get(pathValue);
|
|
@@ -403,7 +384,9 @@ export class BaseIndexSnapshotStore {
|
|
|
403
384
|
const markdownContent = isMarkdownFilePath(filePath)
|
|
404
385
|
? await this.vaultFileStore.readMarkdownFile(filePath)
|
|
405
386
|
: null;
|
|
406
|
-
const rowRecord = this.createSnapshotRow(filePath, workspaceState, snapshot.wikiTargetIndex, markdownContent
|
|
387
|
+
const rowRecord = this.createSnapshotRow(filePath, workspaceState, snapshot.wikiTargetIndex, markdownContent, {
|
|
388
|
+
targetPathAliases,
|
|
389
|
+
});
|
|
407
390
|
this.removeRawTargetSourceContributions(snapshot, filePath);
|
|
408
391
|
snapshot.rowsByPath.set(filePath, rowRecord.row);
|
|
409
392
|
snapshot.forwardLinksByPath.set(filePath, rowRecord.forwardLinks);
|
|
@@ -489,6 +472,7 @@ export class BaseIndexSnapshotStore {
|
|
|
489
472
|
const snapshot = this.indexSnapshot;
|
|
490
473
|
const affectedTargetPaths = new Set();
|
|
491
474
|
const affectedSourcePaths = new Set(markdownPathsToRefresh);
|
|
475
|
+
const targetPathAliases = createReferenceTargetAliasMap(renamedFileEntries);
|
|
492
476
|
if (membershipChanged) {
|
|
493
477
|
const membershipAffectedPaths = [
|
|
494
478
|
...deletedFilePaths,
|
|
@@ -543,7 +527,7 @@ export class BaseIndexSnapshotStore {
|
|
|
543
527
|
...createdFilePaths,
|
|
544
528
|
...renamedFileEntries.map((entry) => entry.newPath),
|
|
545
529
|
...affectedSourcePaths,
|
|
546
|
-
]);
|
|
530
|
+
], { targetPathAliases });
|
|
547
531
|
} else {
|
|
548
532
|
affectedSourcePaths.forEach((pathValue) => {
|
|
549
533
|
this.removeSourceBacklinkContributions(snapshot, pathValue, affectedTargetPaths);
|
|
@@ -53,6 +53,32 @@ function sortRows(rows, sortChain = []) {
|
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
function compareRowsBySortChain(left, right, sortChain = []) {
|
|
57
|
+
for (const sortConfig of sortChain) {
|
|
58
|
+
const delta = compareValues(left.rawCells[sortConfig.property], right.rawCells[sortConfig.property]);
|
|
59
|
+
if (delta !== 0) {
|
|
60
|
+
return sortConfig.direction === 'desc' ? -delta : delta;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return String(left.file.path ?? '').localeCompare(String(right.file.path ?? ''));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function insertSortedBounded(rows, row, {
|
|
68
|
+
limit,
|
|
69
|
+
sortChain = [],
|
|
70
|
+
}) {
|
|
71
|
+
let insertIndex = rows.findIndex((existingRow) => compareRowsBySortChain(row, existingRow, sortChain) < 0);
|
|
72
|
+
if (insertIndex === -1) {
|
|
73
|
+
insertIndex = rows.length;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
rows.splice(insertIndex, 0, row);
|
|
77
|
+
if (rows.length > limit) {
|
|
78
|
+
rows.pop();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
56
82
|
function escapeRegExp(value = '') {
|
|
57
83
|
return String(value ?? '').replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
|
|
58
84
|
}
|
|
@@ -102,16 +128,19 @@ function pruneFilterNodeForProperty(filterNode, propertyId = '') {
|
|
|
102
128
|
|
|
103
129
|
export class BaseQueryService {
|
|
104
130
|
constructor({
|
|
131
|
+
maxResultRows = 5_000,
|
|
105
132
|
vaultFileStore,
|
|
106
133
|
workspaceStateProvider = null,
|
|
107
134
|
workspaceStateSynchronizer = null,
|
|
108
135
|
}) {
|
|
136
|
+
this.maxResultRows = maxResultRows;
|
|
109
137
|
this.vaultFileStore = vaultFileStore;
|
|
110
138
|
this.snapshotStore = new BaseIndexSnapshotStore({
|
|
111
139
|
vaultFileStore,
|
|
112
140
|
workspaceStateProvider,
|
|
113
141
|
workspaceStateSynchronizer,
|
|
114
142
|
});
|
|
143
|
+
this.definitionCache = new Map();
|
|
115
144
|
this.propertyCatalogCache = new Map();
|
|
116
145
|
}
|
|
117
146
|
|
|
@@ -202,6 +231,25 @@ export class BaseQueryService {
|
|
|
202
231
|
return result;
|
|
203
232
|
}
|
|
204
233
|
|
|
234
|
+
getCachedDefinition(cacheKey, baseSource) {
|
|
235
|
+
const sourceText = String(baseSource ?? '');
|
|
236
|
+
const existing = this.definitionCache.get(cacheKey);
|
|
237
|
+
if (existing?.source === sourceText) {
|
|
238
|
+
return existing.definition;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
const definition = normalizeBaseDefinition(sourceText);
|
|
242
|
+
this.definitionCache.set(cacheKey, {
|
|
243
|
+
definition,
|
|
244
|
+
source: sourceText,
|
|
245
|
+
});
|
|
246
|
+
if (this.definitionCache.size > 50) {
|
|
247
|
+
const firstKey = this.definitionCache.keys().next().value;
|
|
248
|
+
this.definitionCache.delete(firstKey);
|
|
249
|
+
}
|
|
250
|
+
return definition;
|
|
251
|
+
}
|
|
252
|
+
|
|
205
253
|
invalidatePropertyCatalogsExcept(scannedAt = '') {
|
|
206
254
|
Array.from(this.propertyCatalogCache.keys()).forEach((cacheKey) => {
|
|
207
255
|
if (cacheKey !== scannedAt) {
|
|
@@ -222,7 +270,7 @@ export class BaseQueryService {
|
|
|
222
270
|
throw new Error('Base source not found');
|
|
223
271
|
}
|
|
224
272
|
|
|
225
|
-
const definition =
|
|
273
|
+
const definition = this.getCachedDefinition(source === null ? `file:${basePath}` : `source:${sourcePath}:${basePath}`, baseSource);
|
|
226
274
|
const snapshot = await this.ensureIndexSnapshot({
|
|
227
275
|
basePath,
|
|
228
276
|
sourcePath,
|
|
@@ -251,12 +299,24 @@ export class BaseQueryService {
|
|
|
251
299
|
collectCandidateRows({
|
|
252
300
|
activeView,
|
|
253
301
|
astCache = new Map(),
|
|
302
|
+
columns = [],
|
|
254
303
|
definition,
|
|
255
304
|
evaluatedPropertyIds,
|
|
305
|
+
limit = null,
|
|
306
|
+
maxRows = this.maxResultRows,
|
|
256
307
|
snapshot,
|
|
308
|
+
sortChain = [],
|
|
309
|
+
search = '',
|
|
257
310
|
thisFile,
|
|
258
311
|
}) {
|
|
259
312
|
const rows = [];
|
|
313
|
+
const effectiveMaxRows = Number.isInteger(maxRows) && maxRows > 0 ? maxRows : Infinity;
|
|
314
|
+
const effectiveLimit = Number.isInteger(limit) && limit > 0 ? limit : Infinity;
|
|
315
|
+
const canBoundDuringCollection = Number.isFinite(Math.min(effectiveLimit, effectiveMaxRows))
|
|
316
|
+
&& sortChain.length > 0
|
|
317
|
+
&& !activeView.groupBy?.property
|
|
318
|
+
&& (activeView.summaries?.length ?? 0) === 0;
|
|
319
|
+
const hardLimit = Math.min(effectiveLimit, effectiveMaxRows);
|
|
260
320
|
|
|
261
321
|
snapshot.filePaths.forEach((filePath) => {
|
|
262
322
|
const row = snapshot.rowsByPath.get(filePath);
|
|
@@ -280,10 +340,23 @@ export class BaseQueryService {
|
|
|
280
340
|
rawCells[propertyId] = getPropertyValue(propertyId, row, definition, snapshot, thisFile, rowContext);
|
|
281
341
|
});
|
|
282
342
|
|
|
283
|
-
|
|
343
|
+
const candidateRow = {
|
|
284
344
|
file: row.file,
|
|
285
345
|
rawCells,
|
|
286
|
-
}
|
|
346
|
+
};
|
|
347
|
+
if (!rowMatchesSearch(candidateRow, columns, search)) {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
if (canBoundDuringCollection) {
|
|
352
|
+
insertSortedBounded(rows, candidateRow, {
|
|
353
|
+
limit: hardLimit,
|
|
354
|
+
sortChain,
|
|
355
|
+
});
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
rows.push(candidateRow);
|
|
287
360
|
});
|
|
288
361
|
|
|
289
362
|
return rows;
|
|
@@ -378,15 +451,24 @@ export class BaseQueryService {
|
|
|
378
451
|
});
|
|
379
452
|
|
|
380
453
|
const astCache = new Map();
|
|
454
|
+
const sortChain = buildSortChain(context.activeView);
|
|
455
|
+
const requestedLimit = Number.isInteger(context.activeView.limit) && context.activeView.limit > 0
|
|
456
|
+
? context.activeView.limit
|
|
457
|
+
: null;
|
|
381
458
|
let rows = this.collectCandidateRows({
|
|
382
459
|
...context,
|
|
383
460
|
astCache,
|
|
461
|
+
limit: requestedLimit,
|
|
462
|
+
maxRows: this.maxResultRows,
|
|
463
|
+
search,
|
|
464
|
+
sortChain,
|
|
384
465
|
});
|
|
385
|
-
rows = rows
|
|
386
|
-
rows = sortRows(rows, buildSortChain(context.activeView));
|
|
466
|
+
rows = sortRows(rows, sortChain);
|
|
387
467
|
|
|
388
|
-
if (
|
|
389
|
-
rows = rows.slice(0,
|
|
468
|
+
if (requestedLimit != null) {
|
|
469
|
+
rows = rows.slice(0, Math.min(requestedLimit, this.maxResultRows));
|
|
470
|
+
} else if (Number.isInteger(this.maxResultRows) && this.maxResultRows > 0) {
|
|
471
|
+
rows = rows.slice(0, this.maxResultRows);
|
|
390
472
|
}
|
|
391
473
|
|
|
392
474
|
const payload = buildQueryResultPayload({
|
|
@@ -165,6 +165,7 @@ export class CollaborationRoom {
|
|
|
165
165
|
getHydrateDelayMs = null,
|
|
166
166
|
name,
|
|
167
167
|
idleGraceMs = 0,
|
|
168
|
+
maxInitialSyncBytes = 16_777_216,
|
|
168
169
|
maxBufferedAmountBytes,
|
|
169
170
|
perfLoggingEnabled = false,
|
|
170
171
|
vaultFileStore,
|
|
@@ -173,6 +174,7 @@ export class CollaborationRoom {
|
|
|
173
174
|
}) {
|
|
174
175
|
this.name = name;
|
|
175
176
|
this.idleGraceMs = idleGraceMs;
|
|
177
|
+
this.maxInitialSyncBytes = maxInitialSyncBytes;
|
|
176
178
|
this.maxBufferedAmountBytes = maxBufferedAmountBytes;
|
|
177
179
|
this.perfLoggingEnabled = perfLoggingEnabled;
|
|
178
180
|
this.documentStore = documentStore ?? new CollaborationDocumentStore({
|
|
@@ -576,10 +578,17 @@ export class CollaborationRoom {
|
|
|
576
578
|
this.debugMetrics.initialSyncCount += 1;
|
|
577
579
|
this.debugMetrics.lastInitialSyncAt = Date.now();
|
|
578
580
|
const initialSyncMessage = this.getInitialSyncMessage();
|
|
581
|
+
const initialSyncBytes = initialSyncMessage.byteLength;
|
|
582
|
+
if (initialSyncBytes > this.maxInitialSyncBytes) {
|
|
583
|
+
console.warn(
|
|
584
|
+
`[room:${this.name}] Initial sync payload is ${initialSyncBytes} bytes, exceeding ${this.maxInitialSyncBytes} bytes`,
|
|
585
|
+
);
|
|
586
|
+
}
|
|
579
587
|
logPerfEvent(this.perfLoggingEnabled, `room:${this.name}`, {
|
|
580
|
-
bytes:
|
|
588
|
+
bytes: initialSyncBytes,
|
|
581
589
|
count: this.debugMetrics.initialSyncCount,
|
|
582
590
|
event: 'initial-sync',
|
|
591
|
+
exceedsLimit: initialSyncBytes > this.maxInitialSyncBytes,
|
|
583
592
|
});
|
|
584
593
|
return sendMessage.call(this, ws, initialSyncMessage, this);
|
|
585
594
|
}
|