ryugi-artifacts 1.66.0 → 1.68.0
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/cli.cjs +114 -70
- package/dist/output-bootstrap.cjs +1 -1
- package/dist/server.cjs +968 -569
- package/dist/viewer/{AgentStatusPill-B6X8KYhc.js → AgentStatusPill-BnKps9Zr.js} +1 -1
- package/dist/viewer/ArtboardLayout-Cz1MWCu8.js +12 -0
- package/dist/viewer/ArtifactList-CCxCNWid.js +2 -0
- package/dist/viewer/{AutoPublishPrompt-BSofyZTo.js → AutoPublishPrompt-BrUfQWmW.js} +1 -1
- package/dist/viewer/Avatar-CBcHKq6_.js +1 -0
- package/dist/viewer/{Avatar-Cp_i6ALh.js → Avatar-ChKkUO4F.js} +1 -1
- package/dist/viewer/{BottomSheet-BD-1fVgU.js → BottomSheet-ZdnjIGxe.js} +1 -1
- package/dist/viewer/{Canvas-DYRPeGj4.js → Canvas-CqxEk0B7.js} +1 -1
- package/dist/viewer/CompositeItem-Dc1pE-Dd.js +1 -0
- package/dist/viewer/DocumentLayout-B1bQT74s.js +2 -0
- package/dist/viewer/DocumentPage-DFTrEydU.js +4 -0
- package/dist/viewer/{DropdownMenu-DZ0qcmvX.js → DropdownMenu-MN8aSs-T.js} +1 -1
- package/dist/viewer/{HtmlLayout-DOCRj2nS.js → HtmlLayout-DhjuMVfU.js} +1 -1
- package/dist/viewer/MenuSubmenuTrigger-6b5C_OEY.js +1 -0
- package/dist/viewer/MenuTrigger-C80SSxV1.js +1 -0
- package/dist/viewer/{PhoneArtboardBar-ZHSm-rmy.js → PhoneArtboardBar-Bzeyu7RL.js} +1 -1
- package/dist/viewer/{PhoneSheet-DxyGiHhE.js → PhoneSheet-BqNn1A8k.js} +1 -1
- package/dist/viewer/Popover-Mq50eaGz.js +1 -0
- package/dist/viewer/{PreviewLayout-8f_FSu9n.js → PreviewLayout-CBXgXFHd.js} +2 -2
- package/dist/viewer/Segmented-Dn3tMkJ1.js +1 -0
- package/dist/viewer/Select-B3iVUwhL.js +1 -0
- package/dist/viewer/SelectScrollUpArrow-PZIGiE5i.js +1 -0
- package/dist/viewer/SettingsDialog-Di1DIjuU.js +1 -0
- package/dist/viewer/{SnapshotDocument-BfYSAQoy.js → SnapshotDocument-CZ9_zlbN.js} +1 -1
- package/dist/viewer/SplitShell-1kQWIUbB.js +1 -0
- package/dist/viewer/{ThreadView-BUtexgWc.js → ThreadView-DhKDuMXE.js} +1 -1
- package/dist/viewer/TooltipPopup-DIfQd51a.js +1 -0
- package/dist/viewer/{VirtualizedEditor-D9Ivycdp-BNgnIRWE.js → VirtualizedEditor-D9Ivycdp-BS6qVQKi.js} +1 -1
- package/dist/viewer/{VirtualizedRenderer-C_d95FXi-CLurmXlj.js → VirtualizedRenderer-C_d95FXi-Cgx30lJW.js} +1 -1
- package/dist/viewer/{WarningsBadge-X-rqGa7y.js → WarningsBadge-BhvEtIPf.js} +1 -1
- package/dist/viewer/WhiteboardLayout-BLUnPC_j.js +3 -0
- package/dist/viewer/{WritingCursor-trMEG3IR.js → WritingCursor-D8-ImQmN.js} +1 -1
- package/dist/viewer/{abnfDiagram-VCTEODGH-ODz2u-Tc.js → abnfDiagram-VCTEODGH-CAaQSsKr.js} +1 -1
- package/dist/viewer/{agentLook-BWWdg3j_.js → agentLook-GSv6M_4b.js} +1 -1
- package/dist/viewer/{anchor-DfNlik1u.js → anchor-cpflnjH6.js} +1 -1
- package/dist/viewer/{ar-SA-G6X2FPQ2-_MwLvkMh.js → ar-SA-G6X2FPQ2-CRJustU_.js} +1 -1
- package/dist/viewer/{architecture-7GRP2DOG-iSQ3-M8E.js → architecture-7GRP2DOG-Df-BWMMn.js} +1 -1
- package/dist/viewer/{architectureDiagram-5GKGNRK7-BL5B1Cwd.js → architectureDiagram-5GKGNRK7-slFJ5pNz.js} +1 -1
- package/dist/viewer/{az-AZ-76LH7QW2-DoVas4wb.js → az-AZ-76LH7QW2-BZXNMAjr.js} +1 -1
- package/dist/viewer/{bg-BG-XCXSNQG7-CYg_Nqhh.js → bg-BG-XCXSNQG7-D942OHJ1.js} +1 -1
- package/dist/viewer/{blockDiagram-I7D4REHJ-1893qd6O.js → blockDiagram-I7D4REHJ-D7tnOUmG.js} +1 -1
- package/dist/viewer/{bn-BD-2XOGV67Q-B3yYegfy.js → bn-BD-2XOGV67Q-CnUziB-N.js} +1 -1
- package/dist/viewer/{c4Diagram-7LVT6UL2-DLFhWMfM.js → c4Diagram-7LVT6UL2-A90PS1Zn.js} +1 -1
- package/dist/viewer/{ca-ES-6MX7JW3Y-C3CynyTA.js → ca-ES-6MX7JW3Y-fV3kI3by.js} +1 -1
- package/dist/viewer/channel-DpF2FNj7.js +1 -0
- package/dist/viewer/{channel-gGfhtVCU.js → channel-Y8cPWVH2.js} +158 -158
- package/dist/viewer/{chunk-4HAMMTFA-BOUTaKFB.js → chunk-4HAMMTFA-Dtev5uNX.js} +1 -1
- package/dist/viewer/{chunk-75Z2AOVW-AtKWqbsp.js → chunk-75Z2AOVW-Br59Z0N6.js} +1 -1
- package/dist/viewer/{chunk-DU6HZSFF-dg0wiFNr.js → chunk-DU6HZSFF-DTVWCdhx.js} +1 -1
- package/dist/viewer/{chunk-EIO257PC-CiuVQ5tC.js → chunk-EIO257PC-BJo1mhGf.js} +1 -1
- package/dist/viewer/{chunk-F27PBJKO-C3v6jBrH.js → chunk-F27PBJKO-CqXtkDh_.js} +1 -1
- package/dist/viewer/{chunk-GMAD6QVW-7o8gxuzy.js → chunk-GMAD6QVW-C_mtYAsp.js} +1 -1
- package/dist/viewer/{chunk-GVQU2GXP-DYfPE_kP.js → chunk-GVQU2GXP-Dnn5H2Ee.js} +1 -1
- package/dist/viewer/{chunk-IMKFNOWR-aN-toW4j.js → chunk-IMKFNOWR-CBTdwY_-.js} +1 -1
- package/dist/viewer/{chunk-L3NEJ4N5-CnyBfeWQ.js → chunk-L3NEJ4N5-RIzLHntK.js} +1 -1
- package/dist/viewer/{chunk-OSK3NFVY-Dx0uAOLK.js → chunk-OSK3NFVY-CK41dOkH.js} +1 -1
- package/dist/viewer/{chunk-P2QGCYS3-CAUxyWiK.js → chunk-P2QGCYS3-BL4CYLWw.js} +1 -1
- package/dist/viewer/{chunk-POPQ4Y6H-cr_OqW9b.js → chunk-POPQ4Y6H-CJsQjBoH.js} +1 -1
- package/dist/viewer/{chunk-PWAF6VOD-BMYvIGbv.js → chunk-PWAF6VOD-DeuKxCvN.js} +1 -1
- package/dist/viewer/{chunk-SHT3W25Y-BIhh6C-D.js → chunk-SHT3W25Y-1ctnl-w3.js} +1 -1
- package/dist/viewer/{chunk-SVP7TREG-CA39sTgF.js → chunk-SVP7TREG-0tebC1pj.js} +1 -1
- package/dist/viewer/{chunk-TICWLB2K-ByYHKmi7.js → chunk-TICWLB2K-BxhvtMAu.js} +1 -1
- package/dist/viewer/classDiagram-ZZMXUADV-BCUwkMkD.js +1 -0
- package/dist/viewer/classDiagram-v2-VYDZK3BY-BCUwkMkD.js +1 -0
- package/dist/viewer/{cs-CZ-2BRQDIVT-XNDLvq55.js → cs-CZ-2BRQDIVT-DKXyGqNH.js} +1 -1
- package/dist/viewer/{cynefin-OW5HDTMX-DpVSlbHP.js → cynefin-OW5HDTMX-BUe484ye.js} +1 -1
- package/dist/viewer/{cynefinDiagram-5FMLGOSQ-dHtfu-cX.js → cynefinDiagram-5FMLGOSQ-CWdVGsBk.js} +1 -1
- package/dist/viewer/{da-DK-5WZEPLOC-gGE6wcsX.js → da-DK-5WZEPLOC-b4IEozFV.js} +1 -1
- package/dist/viewer/{dagre-GXQ25YYZ-_49K5ME-.js → dagre-GXQ25YYZ-DCuEklTp.js} +1 -1
- package/dist/viewer/{de-DE-XR44H4JA-xIn9zjsb.js → de-DE-XR44H4JA-C7sc34_X.js} +1 -1
- package/dist/viewer/{diagram-S7CK7UJ4-DnOVKbi8.js → diagram-S7CK7UJ4-CsxaHH4I.js} +1 -1
- package/dist/viewer/{diagram-UQ7AKVKN-fXoq3ttg.js → diagram-UQ7AKVKN-Ct8242ZE.js} +1 -1
- package/dist/viewer/{diagram-VSXAHHWV-6LRIw8JH.js → diagram-VSXAHHWV-C1nroriz.js} +1 -1
- package/dist/viewer/{diagram-VX7I27RA-Co4MGh3a.js → diagram-VX7I27RA-DEWRSmDx.js} +1 -1
- package/dist/viewer/{diagram-Z3DM3KII-CLydqyhw.js → diagram-Z3DM3KII-B1SxmMm9.js} +1 -1
- package/dist/viewer/{dist-aG5n-ukt.js → dist-1xzhgjrK.js} +1 -1
- package/dist/viewer/{dist-BD0n8L2H.js → dist-B0ahrRmN.js} +1 -1
- package/dist/viewer/{dist-b6Q8lY9Z.js → dist-B3kJb0_U.js} +1 -1
- package/dist/viewer/{dist-8rAEP2kA.js → dist-B4M9sgR9.js} +1 -1
- package/dist/viewer/{dist-tlg8Gs4P.js → dist-B6-aAGQA.js} +1 -1
- package/dist/viewer/{dist-C8dsmt7M.js → dist-B9Rn0Zrs.js} +1 -1
- package/dist/viewer/{dist-Mwa2JYhN.js → dist-C4zEBXjK.js} +1 -1
- package/dist/viewer/{dist-Bh7I-jIz.js → dist-C8JtF2VW.js} +1 -1
- package/dist/viewer/{dist-DzGJipXU.js → dist-CA2_d8WP.js} +1 -1
- package/dist/viewer/{dist-mvJ-AbtV.js → dist-CBB6_G5_.js} +1 -1
- package/dist/viewer/{dist-6KUMXJHX.js → dist-CUWoav31.js} +1 -1
- package/dist/viewer/{dist-BUCcrdqC.js → dist-CXasQug3.js} +1 -1
- package/dist/viewer/{dist-CLkvS-96.js → dist-Cse2aOfa.js} +1 -1
- package/dist/viewer/{dist-D8aaHNbP.js → dist-Cy8NldSx.js} +4 -4
- package/dist/viewer/{dist-CEQ8CIP-.js → dist-D2yfyCbT.js} +1 -1
- package/dist/viewer/{dist-BMJTKaNs.js → dist-DKLouXV5.js} +1 -1
- package/dist/viewer/{dist-Bz_w4503.js → dist-DKkW9dU5.js} +1 -1
- package/dist/viewer/{dist-PX2c5w5B.js → dist-Ds6VFWTz.js} +1 -1
- package/dist/viewer/{dist-CbgyqbcE.js → dist-VAycv_3i.js} +1 -1
- package/dist/viewer/{dist-CXkT6bXz.js → dist-fyPnRLSz.js} +1 -1
- package/dist/viewer/{dist-Be1Fe9dm.js → dist-kyCI0GjD.js} +1 -1
- package/dist/viewer/{dist-DVH2k1zy.js → dist-lH8EGddX.js} +1 -1
- package/dist/viewer/{dist-DQ3KAbgk.js → dist-rHgXqZ3U.js} +1 -1
- package/dist/viewer/{dist-uRinEKZF.js → dist-xKtvXW_M.js} +1 -1
- package/dist/viewer/{ebnfDiagram-PWID7BFC-eRw9PImL.js → ebnfDiagram-PWID7BFC-BwAXcSMu.js} +1 -1
- package/dist/viewer/{el-GR-BZB4AONW-ydMLjdVd.js → el-GR-BZB4AONW-DO8FKq0o.js} +1 -1
- package/dist/viewer/{en-B4ZKOASM-u6OniCbC.js → en-B4ZKOASM-BGb9Jd7F.js} +1 -1
- package/dist/viewer/{erDiagram-RLTQ6QDP-DUfKaOXm.js → erDiagram-RLTQ6QDP-BU0oilOu.js} +1 -1
- package/dist/viewer/{es-ES-U4NZUMDT-CCvOElHW.js → es-ES-U4NZUMDT-C8my4jC1.js} +1 -1
- package/dist/viewer/{eu-ES-A7QVB2H4-C_WD5IZg.js → eu-ES-A7QVB2H4-7y6iA3PQ.js} +1 -1
- package/dist/viewer/{eventmodeling-NTZA5JFV-C0rYyF74.js → eventmodeling-NTZA5JFV-soHgkZ82.js} +1 -1
- package/dist/viewer/{fa-IR-HGAKTJCU-BIkl-rJS.js → fa-IR-HGAKTJCU-oCdmxr1e.js} +1 -1
- package/dist/viewer/{fi-FI-Z5N7JZ37-6HM4TKYa.js → fi-FI-Z5N7JZ37-X3VK0x3c.js} +1 -1
- package/dist/viewer/flowDiagram-HODETNUW-A3kbYb0D.js +1 -0
- package/dist/viewer/{fr-FR-RHASNOE6-Br__REnh.js → fr-FR-RHASNOE6-zrXrM79-.js} +1 -1
- package/dist/viewer/{ganttDiagram-EL5Y4UJY-DHQPmBwq.js → ganttDiagram-EL5Y4UJY-bHjB1qlT.js} +1 -1
- package/dist/viewer/{gitGraph-4MIJSDKK-Duos0FcC.js → gitGraph-4MIJSDKK-CjGC-mW6.js} +1 -1
- package/dist/viewer/{gitGraphDiagram-WWUBYQGX-BlhH29yu.js → gitGraphDiagram-WWUBYQGX-DUqXPpCq.js} +1 -1
- package/dist/viewer/{gl-ES-HMX3MZ6V-CSlRksGt.js → gl-ES-HMX3MZ6V-BUnj3HlN.js} +1 -1
- package/dist/viewer/{he-IL-6SHJWFNN-7fwBpcZp.js → he-IL-6SHJWFNN-281kRBUf.js} +1 -1
- package/dist/viewer/{hi-IN-IWLTKZ5I-liiwbLNI.js → hi-IN-IWLTKZ5I-DIuMdRpK.js} +1 -1
- package/dist/viewer/{hu-HU-A5ZG7DT2-DdiFF2-_.js → hu-HU-A5ZG7DT2-nmQyfjlR.js} +1 -1
- package/dist/viewer/{id-ID-SAP4L64H-BbyroKKj.js → id-ID-SAP4L64H-BiViI6m_.js} +1 -1
- package/dist/viewer/{image-GAAHSSAO-Bl6iT5Xi.js → image-GAAHSSAO-yI0Lg6gi.js} +1 -1
- package/dist/viewer/index.html +5 -5
- package/dist/viewer/index.js +2 -2
- package/dist/viewer/index3.css +32 -0
- package/dist/viewer/{info-A6RAGUB7-BayhR2hO.js → info-A6RAGUB7-B0l9mAY4.js} +1 -1
- package/dist/viewer/{infoDiagram-27XIBGKW-B7gYXKyi.js → infoDiagram-27XIBGKW-BTxMqmhS.js} +1 -1
- package/dist/viewer/{ishikawaDiagram-5VMMS53U-BCeyxXmy.js → ishikawaDiagram-5VMMS53U-BunWcUgG.js} +1 -1
- package/dist/viewer/{it-IT-JPQ66NNP-Dl5XaFPJ.js → it-IT-JPQ66NNP-DpwQuK5q.js} +1 -1
- package/dist/viewer/{ja-JP-DBVTYXUO-Ds16kWgN.js → ja-JP-DBVTYXUO-Dg0jZ4Fr.js} +1 -1
- package/dist/viewer/{journeyDiagram-3NMN7TZE-BRHyu3on.js → journeyDiagram-3NMN7TZE-CH0mNNME.js} +1 -1
- package/dist/viewer/{kaa-6HZHGXH3-BZtk4Q-J.js → kaa-6HZHGXH3-Byd9GDLK.js} +1 -1
- package/dist/viewer/{kab-KAB-ZGHBKWFO-sX86-rIi.js → kab-KAB-ZGHBKWFO-a6r59Esz.js} +1 -1
- package/dist/viewer/{kanban-definition-UXKFOSKX-D8dXYlkf.js → kanban-definition-UXKFOSKX-Dlxx1p8m.js} +1 -1
- package/dist/viewer/{kk-KZ-P5N5QNE5-Kj6xbUfb.js → kk-KZ-P5N5QNE5-zq8glNLW.js} +1 -1
- package/dist/viewer/{km-KH-HSX4SM5Z-Du9UYSIR.js → km-KH-HSX4SM5Z-BTq35Fiu.js} +1 -1
- package/dist/viewer/{ko-KR-MTYHY66A-D13455tH.js → ko-KR-MTYHY66A-DlgDzRH_.js} +1 -1
- package/dist/viewer/{ku-TR-6OUDTVRD-CRU2T1Xq.js → ku-TR-6OUDTVRD-BVLk13SV.js} +1 -1
- package/dist/viewer/local-split-host-xSgjCeui.js +1 -0
- package/dist/viewer/{lt-LT-XHIRWOB4-CaPQXWaa.js → lt-LT-XHIRWOB4-6q0TFRDx.js} +1 -1
- package/dist/viewer/{lv-LV-5QDEKY6T-CWmJ_HNo.js → lv-LV-5QDEKY6T-DxyqknhI.js} +1 -1
- package/dist/viewer/{mermaid-parser.core-Dq72O3lo.js → mermaid-parser.core-Gvb8dIz1.js} +3 -3
- package/dist/viewer/{mindmap-definition-YA3MSWOX-B5ND0SS0.js → mindmap-definition-YA3MSWOX-DCPYU-48.js} +1 -1
- package/dist/viewer/{mr-IN-CRQNXWMA-ClPq9z9c.js → mr-IN-CRQNXWMA-D2tHgrn-.js} +1 -1
- package/dist/viewer/{my-MM-5M5IBNSE-BgvPEMQG.js → my-MM-5M5IBNSE-BYWw8v9n.js} +1 -1
- package/dist/viewer/{nb-NO-T6EIAALU-f4YcrpZO.js → nb-NO-T6EIAALU-K3IdDtSM.js} +1 -1
- package/dist/viewer/{nl-NL-IS3SIHDZ-51w_0F9O.js → nl-NL-IS3SIHDZ-O5S6GhQJ.js} +1 -1
- package/dist/viewer/{nn-NO-6E72VCQL-C-asnGQd.js → nn-NO-6E72VCQL-CG7rDNE2.js} +1 -1
- package/dist/viewer/{oc-FR-POXYY2M6-CNXcOCrh.js → oc-FR-POXYY2M6-DVAwA1YG.js} +1 -1
- package/dist/viewer/{pa-IN-N4M65BXN-D2sTi4tB.js → pa-IN-N4M65BXN-BfskjU3c.js} +1 -1
- package/dist/viewer/{packet-AYTQ26CC-C5eStsUT.js → packet-AYTQ26CC-V9JOIpxu.js} +1 -1
- package/dist/viewer/{parseTrigger-Dpx4xwme.js → parseTrigger-Bl4n5XXS.js} +1 -1
- package/dist/viewer/{pegDiagram-XKGWAZYB-AfpuhbMK.js → pegDiagram-XKGWAZYB-CRwdoRdU.js} +1 -1
- package/dist/viewer/percentages-BXMCSKIN-BDV0ZRBe.js +1 -0
- package/dist/viewer/{pie-WAS4IAKB-BuIit_wP.js → pie-WAS4IAKB-DD4VdSya.js} +1 -1
- package/dist/viewer/{pieDiagram-E7YTZNPT-CRSbhyv1.js → pieDiagram-E7YTZNPT-DtxXj_uG.js} +1 -1
- package/dist/viewer/{pl-PL-T2D74RX3-CaatC1Ad.js → pl-PL-T2D74RX3-aSM3OymY.js} +1 -1
- package/dist/viewer/preview.html +4 -4
- package/dist/viewer/preview.js +1 -1
- package/dist/viewer/{prod-DdmJv0MO.js → prod-DT6gDrhK.js} +9 -9
- package/dist/viewer/{pt-BR-5N22H2LF-Cl2reV9F.js → pt-BR-5N22H2LF-CoE1Brmo.js} +1 -1
- package/dist/viewer/{pt-PT-UZXXM6DQ-Dl1E3lVz.js → pt-PT-UZXXM6DQ-N4cE4HWd.js} +1 -1
- package/dist/viewer/{quadrantDiagram-AXDQQJYC-x1Uf4NVM.js → quadrantDiagram-AXDQQJYC-Bp9CaPDI.js} +1 -1
- package/dist/viewer/{radar-RG4KPBEZ-DQGD6mHG.js → radar-RG4KPBEZ-DjIgW5TK.js} +1 -1
- package/dist/viewer/{railroad-74A4TZTK-_jyPADpx.js → railroad-74A4TZTK-DJXF4Ntz.js} +1 -1
- package/dist/viewer/{railroad-abnf-HS5TGJTU-BbeCaDR8.js → railroad-abnf-HS5TGJTU-D2uor4gn.js} +1 -1
- package/dist/viewer/{railroad-ebnf-LZEXJU2U-0u5eXsT9.js → railroad-ebnf-LZEXJU2U-d-1EQm0I.js} +1 -1
- package/dist/viewer/{railroad-peg-WCYAUIDC-DfdmN9rz.js → railroad-peg-WCYAUIDC-VVFlD8Wt.js} +1 -1
- package/dist/viewer/{railroadDiagram-O6MQD6OU-Bss7JqQV.js → railroadDiagram-O6MQD6OU-DIYzZs3X.js} +1 -1
- package/dist/viewer/ref-DeJSmII1.js +1 -0
- package/dist/viewer/{requirementDiagram-BXWQKSXE-T8cs3e3U.js → requirementDiagram-BXWQKSXE-BFAS1s1U.js} +1 -1
- package/dist/viewer/{ro-RO-JPDTUUEW-LJoACXW2.js → ro-RO-JPDTUUEW-CXL_OLY6.js} +1 -1
- package/dist/viewer/{route-DDEGqDvB.js → route-B-3a8kXR.js} +2 -2
- package/dist/viewer/route-messages-D6nsn-yO.js +1 -0
- package/dist/viewer/{ru-RU-B4JR7IUQ-Dr1RnL66.js → ru-RU-B4JR7IUQ-DK0raNaa.js} +1 -1
- package/dist/viewer/{sankeyDiagram-P5KCCOFB-uvLee9BZ.js → sankeyDiagram-P5KCCOFB-XkkNzFLA.js} +1 -1
- package/dist/viewer/{selection-A2YAIJTR.js → selection-A2L_U7cp.js} +1 -1
- package/dist/viewer/{sequenceDiagram-WJ2MYXX4-DcTFNs19.js → sequenceDiagram-WJ2MYXX4-u1vCwsJu.js} +1 -1
- package/dist/viewer/settings-dialog-DcUSfYHj.js +1 -0
- package/dist/viewer/{si-LK-N5RQ5JYF-BLq3al5N.js → si-LK-N5RQ5JYF-C2C_capt.js} +1 -1
- package/dist/viewer/{sk-SK-C5VTKIMK-a-IIZ4GT.js → sk-SK-C5VTKIMK-CAZ_jqda.js} +1 -1
- package/dist/viewer/{sl-SI-NN7IZMDC-o1isoOWW.js → sl-SI-NN7IZMDC-w4mPw9Qr.js} +1 -1
- package/dist/viewer/{split-url-BDMlmdjs.js → split-url-Ds_SbiRI.js} +2 -2
- package/dist/viewer/{stateDiagram-D77RDMKH-BZM8bgzK.js → stateDiagram-D77RDMKH-CNdAB9GQ.js} +1 -1
- package/dist/viewer/stateDiagram-v2-MP3YSRHH-LXrhvJQE.js +1 -0
- package/dist/viewer/subset-shared.chunk-DR4HOb1q.js +1 -0
- package/dist/viewer/{subset-worker.chunk-26hNkxyu.js → subset-worker.chunk-DWr778aR.js} +1 -1
- package/dist/viewer/{sv-SE-XGPEYMSR-B_D5ChEk.js → sv-SE-XGPEYMSR-Cvj4W126.js} +1 -1
- package/dist/viewer/{swimlanes-42K2YHIH-Dg0qxOws.js → swimlanes-42K2YHIH-CRWoFAkx.js} +1 -1
- package/dist/viewer/swimlanesDiagram-VR7AAH4N-F15yPPv-.js +8 -0
- package/dist/viewer/{ta-IN-2NMHFXQM-ClGBXdV4.js → ta-IN-2NMHFXQM-pCSxo0O4.js} +1 -1
- package/dist/viewer/{th-TH-HPSO5L25-DAJ8sOl3.js → th-TH-HPSO5L25-DA2yXkLO.js} +1 -1
- package/dist/viewer/{timeline-definition-24CTP7MA-DXaemj2u.js → timeline-definition-24CTP7MA-C7cLrh2M.js} +1 -1
- package/dist/viewer/{tr-TR-DEFEU3FU-BzHu5pEn.js → tr-TR-DEFEU3FU-DSUJUHLi.js} +1 -1
- package/dist/viewer/{treeView-Q6P3EWNA-C_VbpbNe.js → treeView-Q6P3EWNA-CYMsee9z.js} +1 -1
- package/dist/viewer/{treemap-WGGIJYW6-BGL5LSgs.js → treemap-WGGIJYW6-BeYAJy3I.js} +1 -1
- package/dist/viewer/{uk-UA-QMV73CPH-BPDqw53G.js → uk-UA-QMV73CPH-CpavbdpO.js} +1 -1
- package/dist/viewer/useAriaLabelledBy-Ai3baFaJ.js +1 -0
- package/dist/viewer/useOpenInteractionType-CFrlkl-M.js +1 -0
- package/dist/viewer/{useTranslation-BcipDuhp.js → useTranslation-BCUMbI5g.js} +1 -1
- package/dist/viewer/useTypeFavicon-B4j5zCC6.js +1 -0
- package/dist/viewer/{vennDiagram-4TSXK5OY-DZKcEaHf.js → vennDiagram-4TSXK5OY-D-TvgzEs.js} +1 -1
- package/dist/viewer/verdicts-B9EpSu2Q.js +1 -0
- package/dist/viewer/{vi-VN-M7AON7JQ-CJEuQOxR.js → vi-VN-M7AON7JQ-149ovaXw.js} +1 -1
- package/dist/viewer/{view-CJUgyKGY.js → view-tN_gu_ot.js} +1 -1
- package/dist/viewer/{viewport-CFJHn_Y6-BGH6hsZG.js → viewport-CFJHn_Y6-gOi1FTqq.js} +1 -1
- package/dist/viewer/{wardley-WFR3VGLG-Dkp_-AaL.js → wardley-WFR3VGLG-Bxei-rkR.js} +1 -1
- package/dist/viewer/{wardleyDiagram-VM6X3IG4-86pEJitp.js → wardleyDiagram-VM6X3IG4-Behq92Qv.js} +1 -1
- package/dist/viewer/{xychartDiagram-S5SC5T6Z-CAsfEZ7P.js → xychartDiagram-S5SC5T6Z-WvqgiYkm.js} +1 -1
- package/dist/viewer/{zh-CN-LNUGB5OW-m354m4Nb.js → zh-CN-LNUGB5OW-Bh3vP78p.js} +1 -1
- package/dist/viewer/{zh-HK-E62DVLB3-HnR0Htak.js → zh-HK-E62DVLB3-DyLx4WST.js} +1 -1
- package/dist/viewer/{zh-TW-RAJ6MFWO-BUClvKp2.js → zh-TW-RAJ6MFWO-CzGpQq8F.js} +1 -1
- package/dist/viewer-lib/{Canvas-XtRYXIEb.js → Canvas-D1GKtdWi.js} +3 -3
- package/dist/viewer-lib/{PhoneArtboardBar-DfzvB3QO.js → PhoneArtboardBar-Wif7mAXi.js} +2 -2
- package/dist/viewer-lib/{PreviewView-lLevZBla.js → PreviewView-96hXi1zy.js} +2 -2
- package/dist/viewer-lib/{ReadOnlyWhiteboard-D0CZ0LdG.js → ReadOnlyWhiteboard-ByJSgs6y.js} +3 -3
- package/dist/viewer-lib/{SnapshotDocument-T_gyY6JJ.js → SnapshotDocument-boYf3Unu.js} +13631 -13624
- package/dist/viewer-lib/{VirtualizedEditor-D9Ivycdp-Blh2vJwo.js → VirtualizedEditor-D9Ivycdp-C1r2x0pX.js} +2 -2
- package/dist/viewer-lib/{VirtualizedRenderer-C_d95FXi-BOJs6MXx.js → VirtualizedRenderer-C_d95FXi-lZgY7VI5.js} +3 -3
- package/dist/viewer-lib/{WarningsBadge-BtnTIfpB.js → WarningsBadge-B8dxGKka.js} +1 -1
- package/dist/viewer-lib/{agentLook-DWANryek.js → agentLook-0GsgKSL-.js} +1 -1
- package/dist/viewer-lib/{ar-SA-G6X2FPQ2-DSCh8zTd.js → ar-SA-G6X2FPQ2-D01gdPpr.js} +1 -1
- package/dist/viewer-lib/{az-AZ-76LH7QW2-CNdNs8nj.js → az-AZ-76LH7QW2-C7w5r7bD.js} +1 -1
- package/dist/viewer-lib/{bg-BG-XCXSNQG7-PU2ZxsGw.js → bg-BG-XCXSNQG7-p2Qatdni.js} +1 -1
- package/dist/viewer-lib/{bn-BD-2XOGV67Q-XLdOhNaI.js → bn-BD-2XOGV67Q-DtnIWXwT.js} +1 -1
- package/dist/viewer-lib/{ca-ES-6MX7JW3Y-UY8MZC4L.js → ca-ES-6MX7JW3Y-BY9zZN7o.js} +1 -1
- package/dist/viewer-lib/{chunk-EIO257PC-C1U1qIlr.js → chunk-EIO257PC-Dn7JUPD8.js} +1 -1
- package/dist/viewer-lib/core.js +3 -3
- package/dist/viewer-lib/{cs-CZ-2BRQDIVT-BFfwha5e.js → cs-CZ-2BRQDIVT-BzjoZdth.js} +1 -1
- package/dist/viewer-lib/{da-DK-5WZEPLOC-DDviq7_M.js → da-DK-5WZEPLOC-TDV970j5.js} +1 -1
- package/dist/viewer-lib/{de-DE-XR44H4JA-C9myJh7C.js → de-DE-XR44H4JA-BjyTyKoM.js} +1 -1
- package/dist/viewer-lib/{dist-D85VCWJe.js → dist-BEz688xk.js} +3 -3
- package/dist/viewer-lib/{dist-DaJwO7Xc.js → dist-BSFDUw8i.js} +2 -2
- package/dist/viewer-lib/{dist-C-R9SWz_.js → dist-BTCqhvAf.js} +4 -4
- package/dist/viewer-lib/{dist-D3y43SEU.js → dist-C38vNQIH.js} +1 -1
- package/dist/viewer-lib/{dist-Bal1GKlv.js → dist-C60FpC9e.js} +1 -1
- package/dist/viewer-lib/{dist-D6SeV1Ef.js → dist-CBjyw6zC.js} +2 -2
- package/dist/viewer-lib/{dist-DTqMZxNq.js → dist-CMWQEa97.js} +3 -3
- package/dist/viewer-lib/{dist-Mng5zZmU.js → dist-CPnB9yKQ.js} +3 -3
- package/dist/viewer-lib/{dist-BsTwyJB3.js → dist-Cfk5Y4QC.js} +2 -2
- package/dist/viewer-lib/{dist-D9t2NKPt.js → dist-CgQmu9ki.js} +3 -3
- package/dist/viewer-lib/{dist-Bb9R9QlE.js → dist-Cr_rgBD9.js} +3 -3
- package/dist/viewer-lib/{dist-D0AhZFIx.js → dist-D36o7D7T.js} +2 -2
- package/dist/viewer-lib/{dist-CEezXcL4.js → dist-D778PgeW.js} +2 -2
- package/dist/viewer-lib/{dist-Dli815JZ.js → dist-D9IzrveE.js} +2 -2
- package/dist/viewer-lib/{dist-CAoIkY40.js → dist-DHEOl2TN.js} +2 -2
- package/dist/viewer-lib/{dist-CKL7I9Qx.js → dist-DK1Yi8I4.js} +4 -4
- package/dist/viewer-lib/{dist-DQlRNM1V.js → dist-DULdzKdC.js} +3 -3
- package/dist/viewer-lib/{dist-C0iQb-kP.js → dist-DYd0_e2w.js} +2 -2
- package/dist/viewer-lib/{dist-CvyyocBe.js → dist-FVtL0y1F.js} +3 -3
- package/dist/viewer-lib/{dist-CTxT1PXe.js → dist-bPGj_tUd.js} +4 -4
- package/dist/viewer-lib/{dist-BAZg8tW9.js → dist-qS7iA2eX.js} +3 -3
- package/dist/viewer-lib/{dist-wAvEq47e.js → dist-vd2-brQn.js} +3 -3
- package/dist/viewer-lib/{dist-5qRQAgi-.js → dist-xJDwc_X3.js} +3 -3
- package/dist/viewer-lib/document.js +787 -785
- package/dist/viewer-lib/{el-GR-BZB4AONW-GpnZgGUN.js → el-GR-BZB4AONW-Be_WFnxM.js} +1 -1
- package/dist/viewer-lib/{en-B4ZKOASM-CFqMifHo.js → en-B4ZKOASM-CqCyVRMQ.js} +1 -1
- package/dist/viewer-lib/{es-ES-U4NZUMDT-DRdVwGjw.js → es-ES-U4NZUMDT-BbunaFz5.js} +1 -1
- package/dist/viewer-lib/{eu-ES-A7QVB2H4-BkyvJflk.js → eu-ES-A7QVB2H4-CiDfJl0F.js} +1 -1
- package/dist/viewer-lib/{fa-IR-HGAKTJCU-BwsYAcy8.js → fa-IR-HGAKTJCU-CLdHVNrd.js} +1 -1
- package/dist/viewer-lib/{fi-FI-Z5N7JZ37-CBeMgc4e.js → fi-FI-Z5N7JZ37-AInwUM2B.js} +1 -1
- package/dist/viewer-lib/{fr-FR-RHASNOE6-CSCzRtsr.js → fr-FR-RHASNOE6-5qcE-nn9.js} +1 -1
- package/dist/viewer-lib/{gl-ES-HMX3MZ6V-Dsd9rhFU.js → gl-ES-HMX3MZ6V-C_hmLe5L.js} +1 -1
- package/dist/viewer-lib/{he-IL-6SHJWFNN-BzbqaoiX.js → he-IL-6SHJWFNN-Bs4SMN5Y.js} +1 -1
- package/dist/viewer-lib/{hi-IN-IWLTKZ5I-DW-xTmxl.js → hi-IN-IWLTKZ5I-CHsG_prh.js} +1 -1
- package/dist/viewer-lib/{hu-HU-A5ZG7DT2-DFcambMZ.js → hu-HU-A5ZG7DT2-BpNCnfmz.js} +1 -1
- package/dist/viewer-lib/{i18n-AbkxQTcI.js → i18n-Bl255uFG.js} +140 -10
- package/dist/viewer-lib/{id-ID-SAP4L64H-tTBC6jhJ.js → id-ID-SAP4L64H-B18MP3TV.js} +1 -1
- package/dist/viewer-lib/{image-GAAHSSAO-DYWFpM2G.js → image-GAAHSSAO-DVKnh1wc.js} +1 -1
- package/dist/viewer-lib/index.js +3669 -2698
- package/dist/viewer-lib/{it-IT-JPQ66NNP-D_dRrUXm.js → it-IT-JPQ66NNP-BH98nLgr.js} +1 -1
- package/dist/viewer-lib/{ja-JP-DBVTYXUO-Bg7zRyCt.js → ja-JP-DBVTYXUO-DA2fExJg.js} +1 -1
- package/dist/viewer-lib/{kaa-6HZHGXH3-C3jbC37K.js → kaa-6HZHGXH3-C-82oNQ2.js} +1 -1
- package/dist/viewer-lib/{kab-KAB-ZGHBKWFO-3wPaJGNV.js → kab-KAB-ZGHBKWFO-CsOeYyyg.js} +1 -1
- package/dist/viewer-lib/{kk-KZ-P5N5QNE5-CxV-rOti.js → kk-KZ-P5N5QNE5-C5vZz2mB.js} +1 -1
- package/dist/viewer-lib/{km-KH-HSX4SM5Z-CjWW8EnV.js → km-KH-HSX4SM5Z-Ds8sNL7U.js} +1 -1
- package/dist/viewer-lib/{ko-KR-MTYHY66A-DYgqutRt.js → ko-KR-MTYHY66A-BgSaRncC.js} +1 -1
- package/dist/viewer-lib/{ku-TR-6OUDTVRD-BKEfJRQu.js → ku-TR-6OUDTVRD-DahxJWf5.js} +1 -1
- package/dist/viewer-lib/{lib-BWIKhY0u.js → lib-HJ5naU7F.js} +125 -125
- package/dist/viewer-lib/{lt-LT-XHIRWOB4-C40q3QcD.js → lt-LT-XHIRWOB4-BvJ2fjcP.js} +1 -1
- package/dist/viewer-lib/{lv-LV-5QDEKY6T-C8cvmasQ.js → lv-LV-5QDEKY6T-CfcDbPw2.js} +1 -1
- package/dist/viewer-lib/{mr-IN-CRQNXWMA-B5iL27vN.js → mr-IN-CRQNXWMA-C8OfBL2I.js} +1 -1
- package/dist/viewer-lib/{my-MM-5M5IBNSE-BIaP8rPS.js → my-MM-5M5IBNSE-BUCYgqBD.js} +1 -1
- package/dist/viewer-lib/{nb-NO-T6EIAALU-D2L2JYb0.js → nb-NO-T6EIAALU-BhVURg4a.js} +1 -1
- package/dist/viewer-lib/{nl-NL-IS3SIHDZ-BF9POnBF.js → nl-NL-IS3SIHDZ-C5NGTrjU.js} +1 -1
- package/dist/viewer-lib/{nn-NO-6E72VCQL-DtL4ep0j.js → nn-NO-6E72VCQL-CIOwp8RU.js} +1 -1
- package/dist/viewer-lib/{oc-FR-POXYY2M6-CM0au5Lk.js → oc-FR-POXYY2M6-Da6SyINm.js} +1 -1
- package/dist/viewer-lib/{pa-IN-N4M65BXN-D-jLm3EK.js → pa-IN-N4M65BXN-tDTX0nfg.js} +1 -1
- package/dist/viewer-lib/percentages-BXMCSKIN-Cvdo4-KV.js +1 -0
- package/dist/viewer-lib/{pl-PL-T2D74RX3-rTHmzHqx.js → pl-PL-T2D74RX3-dj1Dwz0C.js} +1 -1
- package/dist/viewer-lib/{plugin-_bGVeqI0-BPW31nnw.js → plugin-_bGVeqI0-D3iBrFnz.js} +1 -1
- package/dist/viewer-lib/{prod-D2rw6WFD.js → prod-B7QWq4m3.js} +59 -59
- package/dist/viewer-lib/{pt-BR-5N22H2LF-DBo3zEkE.js → pt-BR-5N22H2LF-BL2Y-MuR.js} +1 -1
- package/dist/viewer-lib/{pt-PT-UZXXM6DQ-CinObC39.js → pt-PT-UZXXM6DQ-BjYJ2Wd6.js} +1 -1
- package/dist/viewer-lib/{ro-RO-JPDTUUEW-BJvdgr_5.js → ro-RO-JPDTUUEW-D-wh7Qsh.js} +1 -1
- package/dist/viewer-lib/{route-messages-DTiEU_zp.js → route-messages-Cd_S7ERg.js} +279 -241
- package/dist/viewer-lib/{ru-RU-B4JR7IUQ-C8RoEcU9.js → ru-RU-B4JR7IUQ-Vqbdm2HB.js} +1 -1
- package/dist/viewer-lib/{si-LK-N5RQ5JYF-CmH33jvB.js → si-LK-N5RQ5JYF-FWjQj7wM.js} +1 -1
- package/dist/viewer-lib/{sk-SK-C5VTKIMK-DbX5YK4x.js → sk-SK-C5VTKIMK-CPdKjgc0.js} +1 -1
- package/dist/viewer-lib/{sl-SI-NN7IZMDC-GaQJzO11.js → sl-SI-NN7IZMDC-Cfsizmp1.js} +1 -1
- package/dist/viewer-lib/{stylex-CnT-Ts3D.css → stylex-H52XSOyN.css} +36 -0
- package/dist/viewer-lib/subset-shared.chunk-C7qUh7WH.js +2 -0
- package/dist/viewer-lib/{subset-worker.chunk-DaNQ8W3O.js → subset-worker.chunk-ockc4DfZ.js} +2 -2
- package/dist/viewer-lib/{sv-SE-XGPEYMSR-C4cib1qC.js → sv-SE-XGPEYMSR-CkNdCBoc.js} +1 -1
- package/dist/viewer-lib/{ta-IN-2NMHFXQM-COXiexro.js → ta-IN-2NMHFXQM-Cqhx65Sb.js} +1 -1
- package/dist/viewer-lib/{th-TH-HPSO5L25-DZu-t4j-.js → th-TH-HPSO5L25-Cz6Qzk1K.js} +1 -1
- package/dist/viewer-lib/{tr-TR-DEFEU3FU-CJMaRH7e.js → tr-TR-DEFEU3FU-CCCN9YIS.js} +1 -1
- package/dist/viewer-lib/types/src/shared/artifact-kinds.d.ts +34 -0
- package/dist/viewer-lib/types/src/shared/backlinks.d.ts +2 -1
- package/dist/viewer-lib/types/src/shared/cascade.d.ts +40 -0
- package/dist/viewer-lib/types/src/shared/ref-status.d.ts +9 -1
- package/dist/viewer-lib/types/src/shared/ref.d.ts +5 -9
- package/dist/viewer-lib/types/src/shared/referrers.d.ts +36 -0
- package/dist/viewer-lib/types/src/viewer/components/BesideCard.d.ts +17 -0
- package/dist/viewer-lib/types/src/viewer/components/CascadeList.d.ts +13 -0
- package/dist/viewer-lib/types/src/viewer/components/ReferrerList.d.ts +14 -0
- package/dist/viewer-lib/types/src/viewer/components/SharePanel.d.ts +19 -0
- package/dist/viewer-lib/types/src/viewer/components/beside-state.d.ts +3 -0
- package/dist/viewer-lib/types/src/viewer/components/cascade-styles.d.ts +128 -0
- package/dist/viewer-lib/types/src/viewer/document/useCloudRefBoard.d.ts +5 -0
- package/dist/viewer-lib/types/src/viewer/library/index.d.ts +9 -1
- package/dist/viewer-lib/types/src/viewer/split/SplitShell.d.ts +3 -1
- package/dist/viewer-lib/types/src/viewer/split/messages.d.ts +11 -1
- package/dist/viewer-lib/types/src/viewer/split/route-messages.d.ts +3 -1
- package/dist/viewer-lib/types/src/viewer/split/split-url.d.ts +9 -2
- package/dist/viewer-lib/types/src/viewer/split/usePaneStage.d.ts +16 -0
- package/dist/viewer-lib/types/src/viewer/split/useSplitRoles.d.ts +6 -0
- package/dist/viewer-lib/types/src/viewer/split/useSplitRouting.d.ts +8 -5
- package/dist/viewer-lib/{uk-UA-QMV73CPH-BNjGwvPi.js → uk-UA-QMV73CPH-CP4wZTK4.js} +1 -1
- package/dist/viewer-lib/{vi-VN-M7AON7JQ-CFAjVdhW.js → vi-VN-M7AON7JQ-DQsgQGd7.js} +1 -1
- package/dist/viewer-lib/{viewport-CFJHn_Y6-C-nOAUOA.js → viewport-CFJHn_Y6-LGEa8Vm0.js} +1 -1
- package/dist/viewer-lib/{zh-CN-LNUGB5OW-CJGcookC.js → zh-CN-LNUGB5OW-Cp6CD9iP.js} +1 -1
- package/dist/viewer-lib/{zh-HK-E62DVLB3-DbKlJaOJ.js → zh-HK-E62DVLB3-B_z5KWS4.js} +1 -1
- package/dist/viewer-lib/{zh-TW-RAJ6MFWO-6xqeRDl-.js → zh-TW-RAJ6MFWO-BgUsVK92.js} +1 -1
- package/package.json +1 -1
- package/dist/viewer/ArtboardLayout-CL7CeJtR.js +0 -12
- package/dist/viewer/ArtifactList-C9WYHhVD.js +0 -2
- package/dist/viewer/Avatar-TFwLueDr.js +0 -1
- package/dist/viewer/CompositeItem-DYLRmrE_.js +0 -1
- package/dist/viewer/DocumentLayout-BbmdEZ-E.js +0 -2
- package/dist/viewer/DocumentPage-Cv3CsvrN.js +0 -4
- package/dist/viewer/MenuSubmenuTrigger-CbXQxNH6.js +0 -1
- package/dist/viewer/MenuTrigger-DUDnBy5x.js +0 -1
- package/dist/viewer/Popover-Df89KUPH.js +0 -1
- package/dist/viewer/Select-C5fhFls_.js +0 -1
- package/dist/viewer/SelectScrollUpArrow-ekubXj7Y.js +0 -1
- package/dist/viewer/SettingsDialog-DyvJKJ-o.js +0 -1
- package/dist/viewer/SplitShell-Dm7Po2-x.js +0 -1
- package/dist/viewer/TooltipPopup-Bkov4dq9.js +0 -1
- package/dist/viewer/WhiteboardLayout-Bobg7qpA.js +0 -3
- package/dist/viewer/channel-Bs9FsVFX.js +0 -1
- package/dist/viewer/classDiagram-ZZMXUADV-BWwOjUTg.js +0 -1
- package/dist/viewer/classDiagram-v2-VYDZK3BY-BWwOjUTg.js +0 -1
- package/dist/viewer/flowDiagram-HODETNUW-DyOrsOBQ.js +0 -1
- package/dist/viewer/local-split-host-BGIN8Z8E.js +0 -1
- package/dist/viewer/messages-D-DLzi0K.js +0 -1
- package/dist/viewer/percentages-BXMCSKIN-DR7Xa-V1.js +0 -1
- package/dist/viewer/route-messages-Cw5rlOIe.js +0 -1
- package/dist/viewer/settings-dialog-CI1cXQbx.js +0 -1
- package/dist/viewer/stateDiagram-v2-MP3YSRHH-2e0z4X46.js +0 -1
- package/dist/viewer/subset-shared.chunk-DYPlDRg8.js +0 -1
- package/dist/viewer/swimlanesDiagram-VR7AAH4N-CikAcpC5.js +0 -8
- package/dist/viewer/useControlledState-D_GlZYtL.js +0 -1
- package/dist/viewer/useOpenInteractionType-7AMeX8Ol.js +0 -1
- package/dist/viewer/useTypeFavicon-Dw5tQpxT.js +0 -1
- package/dist/viewer/verdicts-DXrETzvP.js +0 -1
- package/dist/viewer-lib/percentages-BXMCSKIN-BX16aURg.js +0 -1
- package/dist/viewer-lib/subset-shared.chunk-MS3AeOFb.js +0 -2
package/dist/server.cjs
CHANGED
|
@@ -48378,12 +48378,12 @@ var require_websocket_server = __commonJS({
|
|
|
48378
48378
|
// src/server/main.ts
|
|
48379
48379
|
var import_node_child_process5 = require("node:child_process");
|
|
48380
48380
|
var import_node_crypto13 = __toESM(require("node:crypto"), 1);
|
|
48381
|
-
var
|
|
48381
|
+
var import_node_fs46 = __toESM(require("node:fs"), 1);
|
|
48382
48382
|
var import_node_os2 = __toESM(require("node:os"), 1);
|
|
48383
|
-
var
|
|
48383
|
+
var import_node_path42 = __toESM(require("node:path"), 1);
|
|
48384
48384
|
|
|
48385
48385
|
// package.json
|
|
48386
|
-
var version = "1.
|
|
48386
|
+
var version = "1.68.0";
|
|
48387
48387
|
|
|
48388
48388
|
// src/server/browser-focus.ts
|
|
48389
48389
|
var import_node_child_process = require("node:child_process");
|
|
@@ -49189,9 +49189,9 @@ function clearCredentials(file) {
|
|
|
49189
49189
|
}
|
|
49190
49190
|
|
|
49191
49191
|
// src/server/hub.ts
|
|
49192
|
-
var
|
|
49192
|
+
var import_node_fs43 = __toESM(require("node:fs"), 1);
|
|
49193
49193
|
var import_node_http2 = __toESM(require("node:http"), 1);
|
|
49194
|
-
var
|
|
49194
|
+
var import_node_path40 = __toESM(require("node:path"), 1);
|
|
49195
49195
|
|
|
49196
49196
|
// src/server/access.ts
|
|
49197
49197
|
var LOOPBACK = /* @__PURE__ */ new Set(["localhost", "::1", "[::1]"]);
|
|
@@ -49218,9 +49218,9 @@ var originAllowed = (policy, origin, { cloud = false } = {}) => origin === void
|
|
|
49218
49218
|
var navigationAllowed = (secFetchSite) => secFetchSite === void 0 || secFetchSite === "none" || secFetchSite === "same-origin";
|
|
49219
49219
|
|
|
49220
49220
|
// src/server/app.ts
|
|
49221
|
-
var
|
|
49221
|
+
var import_node_fs40 = __toESM(require("node:fs"), 1);
|
|
49222
49222
|
var import_node_http = __toESM(require("node:http"), 1);
|
|
49223
|
-
var
|
|
49223
|
+
var import_node_path37 = __toESM(require("node:path"), 1);
|
|
49224
49224
|
|
|
49225
49225
|
// src/shared/cloud.ts
|
|
49226
49226
|
var MAX_ARTIFACT_BYTES = 20 * 1024 * 1024;
|
|
@@ -49626,9 +49626,9 @@ function watchArtifacts(ctx) {
|
|
|
49626
49626
|
var PAGE_CSP = "sandbox allow-scripts allow-modals allow-forms allow-popups allow-downloads";
|
|
49627
49627
|
var DOCUMENT_ASSET_CSP = "sandbox; default-src 'none'";
|
|
49628
49628
|
var ISOLATED_BOARD_CSP = "worker-src 'none'";
|
|
49629
|
-
function contentCsp(type,
|
|
49629
|
+
function contentCsp(type, path45, ownOrigin) {
|
|
49630
49630
|
if (type === "html") return PAGE_CSP;
|
|
49631
|
-
if (type === "document") return
|
|
49631
|
+
if (type === "document") return path45.endsWith(".html") ? PAGE_CSP : DOCUMENT_ASSET_CSP;
|
|
49632
49632
|
return ownOrigin ? ISOLATED_BOARD_CSP : "sandbox allow-scripts";
|
|
49633
49633
|
}
|
|
49634
49634
|
|
|
@@ -49656,8 +49656,8 @@ function routeBoardRequest(req, pathname) {
|
|
|
49656
49656
|
}
|
|
49657
49657
|
|
|
49658
49658
|
// src/server/context.ts
|
|
49659
|
-
var
|
|
49660
|
-
var
|
|
49659
|
+
var import_node_fs36 = __toESM(require("node:fs"), 1);
|
|
49660
|
+
var import_node_path33 = __toESM(require("node:path"), 1);
|
|
49661
49661
|
|
|
49662
49662
|
// src/server/agent-review.ts
|
|
49663
49663
|
var import_node_crypto5 = __toESM(require("node:crypto"), 1);
|
|
@@ -50270,10 +50270,10 @@ function blocksOf(diff) {
|
|
|
50270
50270
|
}
|
|
50271
50271
|
function countStates(items) {
|
|
50272
50272
|
const summary = /* @__PURE__ */ new Map();
|
|
50273
|
-
for (const
|
|
50274
|
-
const status =
|
|
50273
|
+
for (const item3 of items) {
|
|
50274
|
+
const status = item3.kind === "choose" ? item3.choice ? "chosen" : "empty" : String(item3.state ?? item3.verdict ?? item3.status ?? "unknown");
|
|
50275
50275
|
summary.set(status, (summary.get(status) ?? 0) + 1);
|
|
50276
|
-
if (
|
|
50276
|
+
if (item3.waitingOn === "agent")
|
|
50277
50277
|
summary.set("waitingOnAgent", (summary.get("waitingOnAgent") ?? 0) + 1);
|
|
50278
50278
|
}
|
|
50279
50279
|
return Object.fromEntries(summary);
|
|
@@ -50391,7 +50391,7 @@ function createAgentReview(stateDir, options2 = {}) {
|
|
|
50391
50391
|
throw new ReviewError("E_ARGUMENT_INVALID", "limit must be between 1 and 100.");
|
|
50392
50392
|
let values = snap.value.items ?? [];
|
|
50393
50393
|
if (input.thread) {
|
|
50394
|
-
values = values.filter((
|
|
50394
|
+
values = values.filter((item3) => item3.id === input.thread);
|
|
50395
50395
|
if (!values.length)
|
|
50396
50396
|
throw new ReviewError("E_THREAD_NOT_FOUND", "Thread not found in this snapshot.", 404);
|
|
50397
50397
|
}
|
|
@@ -50404,12 +50404,12 @@ function createAgentReview(stateDir, options2 = {}) {
|
|
|
50404
50404
|
}) : null;
|
|
50405
50405
|
let receipt;
|
|
50406
50406
|
if (detail && !input.all && !snap.value.all && !input.fields && snap.value.kind === "threads" && selected.length) {
|
|
50407
|
-
const tokens = selected.flatMap((
|
|
50407
|
+
const tokens = selected.flatMap((item3) => snap.value.tokens?.[String(item3.id)] ?? []);
|
|
50408
50408
|
if (tokens.length) receipt = lease("receipt", input, { kind: "threads", tokens });
|
|
50409
50409
|
}
|
|
50410
|
-
const materialized = selected.map((
|
|
50411
|
-
if (detail || snap.value.kind !== "threads") return
|
|
50412
|
-
const thread =
|
|
50410
|
+
const materialized = selected.map((item3) => {
|
|
50411
|
+
if (detail || snap.value.kind !== "threads") return item3;
|
|
50412
|
+
const thread = item3;
|
|
50413
50413
|
const messages = thread.messages.filter((message2) => !message2.deleted);
|
|
50414
50414
|
const last = messages.filter((message2) => message2.author === "human").at(-1) ?? messages.at(-1);
|
|
50415
50415
|
return {
|
|
@@ -50417,10 +50417,10 @@ function createAgentReview(stateDir, options2 = {}) {
|
|
|
50417
50417
|
status: thread.status,
|
|
50418
50418
|
waitingOn: waitingOn(thread),
|
|
50419
50419
|
anchor: thread.anchor,
|
|
50420
|
-
stale:
|
|
50421
|
-
...
|
|
50422
|
-
...
|
|
50423
|
-
...typeof
|
|
50420
|
+
stale: item3.stale ?? false,
|
|
50421
|
+
...item3.orphan === true ? { orphan: true } : {},
|
|
50422
|
+
...item3.draft === true ? { draft: true } : {},
|
|
50423
|
+
...typeof item3.page === "string" ? { page: item3.page } : {},
|
|
50424
50424
|
preview: preview(
|
|
50425
50425
|
last?.text ?? (thread.messages.some((message2) => message2.deleted) ? "[deleted]" : "")
|
|
50426
50426
|
),
|
|
@@ -50430,8 +50430,8 @@ function createAgentReview(stateDir, options2 = {}) {
|
|
|
50430
50430
|
});
|
|
50431
50431
|
const required = snap.value.kind === "changes" ? ["id"] : requiredReviewFields[snap.value.kind];
|
|
50432
50432
|
const items = input.fields ? materialized.map(
|
|
50433
|
-
(
|
|
50434
|
-
Object.entries(
|
|
50433
|
+
(item3) => Object.fromEntries(
|
|
50434
|
+
Object.entries(item3).filter(
|
|
50435
50435
|
([key2]) => input.fields.includes(key2) || required.includes(key2)
|
|
50436
50436
|
)
|
|
50437
50437
|
)
|
|
@@ -50480,7 +50480,7 @@ function createAgentReview(stateDir, options2 = {}) {
|
|
|
50480
50480
|
const snap = snapshot2(input, input.section, () => ({
|
|
50481
50481
|
counts: countStates(input.items),
|
|
50482
50482
|
items: input.items.filter(
|
|
50483
|
-
(
|
|
50483
|
+
(item3) => keep(item3) && (!input.filters?.status || item3.state === input.filters.status || item3.verdict === input.filters.status) && (!input.filters?.kind || item3.kind === input.filters.kind) && (!input.filters?.choiceState || (input.filters.choiceState === "chosen" ? !!item3.choice : !item3.choice))
|
|
50484
50484
|
)
|
|
50485
50485
|
}));
|
|
50486
50486
|
return page(input, snap, !!input.detail);
|
|
@@ -50522,7 +50522,7 @@ function createAgentReview(stateDir, options2 = {}) {
|
|
|
50522
50522
|
{ ...snap, value: { ...snap.value, items: blocks.map((block) => ({ ...block })) } },
|
|
50523
50523
|
false
|
|
50524
50524
|
);
|
|
50525
|
-
const selected = summary ? new Set(summary.items.map((
|
|
50525
|
+
const selected = summary ? new Set(summary.items.map((item3) => item3.id)) : void 0;
|
|
50526
50526
|
let receipt;
|
|
50527
50527
|
if (input.detail && !input.all && !snap.value.all && !input.fields && !snap.value.empty)
|
|
50528
50528
|
receipt = lease("receipt", input, { kind: "changes", to: snap.value.to });
|
|
@@ -50855,20 +50855,41 @@ function createAvatars(fetchImpl = fetch) {
|
|
|
50855
50855
|
};
|
|
50856
50856
|
}
|
|
50857
50857
|
|
|
50858
|
+
// src/shared/artifact-kinds.ts
|
|
50859
|
+
var ARTIFACT_KINDS = [
|
|
50860
|
+
{ type: "document", refAttribute: "document", subTargets: [], splitPane: true },
|
|
50861
|
+
{ type: "artboard", refAttribute: "artboard", subTargets: ["group", "board"], splitPane: true },
|
|
50862
|
+
{
|
|
50863
|
+
type: "whiteboard",
|
|
50864
|
+
refAttribute: "whiteboard",
|
|
50865
|
+
subTargets: ["page", "frame"],
|
|
50866
|
+
splitPane: true
|
|
50867
|
+
},
|
|
50868
|
+
{ type: "html", refAttribute: "html", subTargets: [], splitPane: true }
|
|
50869
|
+
];
|
|
50870
|
+
var REF_KIND_NAMES = ARTIFACT_KINDS.map(
|
|
50871
|
+
(kind) => kind.refAttribute
|
|
50872
|
+
);
|
|
50873
|
+
var REF_SUB_TARGETS = [
|
|
50874
|
+
...new Set(ARTIFACT_KINDS.flatMap((kind) => kind.subTargets))
|
|
50875
|
+
];
|
|
50876
|
+
function artifactKind(type) {
|
|
50877
|
+
return ARTIFACT_KINDS.find((kind) => kind.type === type) ?? null;
|
|
50878
|
+
}
|
|
50879
|
+
|
|
50858
50880
|
// src/shared/ref.ts
|
|
50859
50881
|
var isRefNode = (node) => node.type === "ref";
|
|
50860
|
-
var
|
|
50861
|
-
|
|
50862
|
-
|
|
50863
|
-
|
|
50864
|
-
|
|
50865
|
-
|
|
50866
|
-
|
|
50867
|
-
|
|
50868
|
-
|
|
50869
|
-
|
|
50870
|
-
var
|
|
50871
|
-
var refSlug = (ref) => ref.whiteboard ?? ref.artboard ?? "";
|
|
50882
|
+
var refKinds = (ref) => REF_KIND_NAMES.filter((kind) => ref[kind] !== void 0);
|
|
50883
|
+
var refTarget = (node) => {
|
|
50884
|
+
const target = {};
|
|
50885
|
+
for (const kind of REF_KIND_NAMES) if (node[kind] !== void 0) target[kind] = node[kind];
|
|
50886
|
+
if (node.to) target.to = node.to;
|
|
50887
|
+
for (const sub2 of REF_SUB_TARGETS) if (node[sub2]) target[sub2] = node[sub2];
|
|
50888
|
+
if (node.label) target.label = node.label;
|
|
50889
|
+
return target;
|
|
50890
|
+
};
|
|
50891
|
+
var refKind = (ref) => refKinds(ref)[0] ?? "artboard";
|
|
50892
|
+
var refSlug = (ref) => ref[refKind(ref)] ?? "";
|
|
50872
50893
|
var refKey = (ref) => ref.frame ?? (ref.page ? `page:${ref.page}` : void 0) ?? ref.group ?? ref.board ?? "";
|
|
50873
50894
|
function refsIn(state2) {
|
|
50874
50895
|
const found = [];
|
|
@@ -50888,7 +50909,7 @@ function backlinksFor(slug, artboardId, docs, kind = "artboard") {
|
|
|
50888
50909
|
if (refKind(ref) !== kind || refSlug(ref) !== slug) continue;
|
|
50889
50910
|
if (ref.to && ref.to !== artboardId) continue;
|
|
50890
50911
|
const key2 = refKey(ref);
|
|
50891
|
-
(backlinks[key2] ??= []).push({
|
|
50912
|
+
(backlinks[key2] ??= []).push({ from: document2, fromType: "document", blockId: ref.blockId });
|
|
50892
50913
|
}
|
|
50893
50914
|
}
|
|
50894
50915
|
return backlinks;
|
|
@@ -50897,7 +50918,7 @@ function backlinkWarnings(backlinks, canvas) {
|
|
|
50897
50918
|
if (!canvas) return [];
|
|
50898
50919
|
return Object.entries(backlinks).flatMap(
|
|
50899
50920
|
([key2, entries2]) => key2 && !canvas.groups.includes(key2) && !canvas.boards.includes(key2) ? entries2.map(
|
|
50900
|
-
({
|
|
50921
|
+
({ from, fromType, blockId: blockId2 }) => `${fromType} ${from} block ${blockId2} references ${key2}, which this artboard no longer has`
|
|
50901
50922
|
) : []
|
|
50902
50923
|
);
|
|
50903
50924
|
}
|
|
@@ -51811,6 +51832,47 @@ function createBoardCommentRegistry(options2) {
|
|
|
51811
51832
|
};
|
|
51812
51833
|
}
|
|
51813
51834
|
|
|
51835
|
+
// src/server/cascade-deps.ts
|
|
51836
|
+
var import_node_fs16 = __toESM(require("node:fs"), 1);
|
|
51837
|
+
var import_node_path13 = __toESM(require("node:path"), 1);
|
|
51838
|
+
var REF_TARGET = new RegExp(
|
|
51839
|
+
`<ref\\b[^>]*?\\b(${ARTIFACT_KINDS.map((kind) => kind.refAttribute).join("|")})="([^"]+)"`,
|
|
51840
|
+
"g"
|
|
51841
|
+
);
|
|
51842
|
+
var typeOfAttribute = new Map(
|
|
51843
|
+
ARTIFACT_KINDS.map((kind) => [kind.refAttribute, kind.type])
|
|
51844
|
+
);
|
|
51845
|
+
var REFERENCES_OF = {
|
|
51846
|
+
document: (dir) => {
|
|
51847
|
+
const file = import_node_path13.default.join(dir, "doc.xml");
|
|
51848
|
+
const xml = import_node_fs16.default.existsSync(file) ? import_node_fs16.default.readFileSync(file, "utf8") : "";
|
|
51849
|
+
return [...xml.matchAll(REF_TARGET)].map(
|
|
51850
|
+
(match) => `${typeOfAttribute.get(match[1])}/${match[2]}`
|
|
51851
|
+
);
|
|
51852
|
+
}
|
|
51853
|
+
};
|
|
51854
|
+
function referencesOf(root, key2) {
|
|
51855
|
+
const ref = artifactKeyOf(key2);
|
|
51856
|
+
const dir = ref && resolveArtifactDir(root, ref.type, ref.id);
|
|
51857
|
+
const extract = ref && REFERENCES_OF[ref.type];
|
|
51858
|
+
if (!dir || !extract) return [];
|
|
51859
|
+
return [...new Set(extract(dir))].filter((target) => {
|
|
51860
|
+
const each = artifactKeyOf(target);
|
|
51861
|
+
return !!each && resolveArtifactDir(root, each.type, each.id) !== null;
|
|
51862
|
+
});
|
|
51863
|
+
}
|
|
51864
|
+
function referrersOf(root, key2) {
|
|
51865
|
+
const found = [];
|
|
51866
|
+
for (const each of listArtifacts(root).artifacts) {
|
|
51867
|
+
const extract = REFERENCES_OF[each.type];
|
|
51868
|
+
const from = `${each.type}/${each.id}`;
|
|
51869
|
+
if (!extract || from === key2) continue;
|
|
51870
|
+
const uses = extract(each.dir).filter((target) => target === key2).length;
|
|
51871
|
+
if (uses > 0) found.push({ key: from, uses });
|
|
51872
|
+
}
|
|
51873
|
+
return found.sort((a5, b6) => a5.key.localeCompare(b6.key));
|
|
51874
|
+
}
|
|
51875
|
+
|
|
51814
51876
|
// src/server/cloud.ts
|
|
51815
51877
|
var import_node_crypto10 = __toESM(require("node:crypto"), 1);
|
|
51816
51878
|
|
|
@@ -51826,6 +51888,84 @@ function formatBytes(bytes) {
|
|
|
51826
51888
|
return `${unit === 0 ? value : Number(value.toFixed(1))} ${UNITS[unit]}`;
|
|
51827
51889
|
}
|
|
51828
51890
|
|
|
51891
|
+
// src/shared/cascade.ts
|
|
51892
|
+
var ACTIONABLE = ["unpublished", "stale", "private", "withdrawn"];
|
|
51893
|
+
var CHECKED_BY_DEFAULT = ["unpublished", "stale"];
|
|
51894
|
+
function stateOf(status, visibility) {
|
|
51895
|
+
const needed = !status.published ? status.withdrawn ? "withdrawn" : "unpublished" : visibility === "public" && status.visibility === "private" ? "private" : status.stale ? "stale" : "ready";
|
|
51896
|
+
return status.blocked && needed !== "private" && needed !== "ready" ? "blocked" : needed;
|
|
51897
|
+
}
|
|
51898
|
+
var visibleNow = (status, visibility) => status.published && (visibility === "private" || status.visibility === "public");
|
|
51899
|
+
async function buildCascade(root, visibility, deps) {
|
|
51900
|
+
const items = /* @__PURE__ */ new Map();
|
|
51901
|
+
const queue = [root];
|
|
51902
|
+
for (let at7 = 0; at7 < queue.length; at7++) {
|
|
51903
|
+
const from = queue[at7];
|
|
51904
|
+
for (const key2 of new Set(await deps.referencesOf(from))) {
|
|
51905
|
+
if (key2 === root) continue;
|
|
51906
|
+
const known = items.get(key2);
|
|
51907
|
+
if (known) {
|
|
51908
|
+
if (!known.parents.includes(from)) known.parents.push(from);
|
|
51909
|
+
continue;
|
|
51910
|
+
}
|
|
51911
|
+
const status = await deps.statusOf(key2);
|
|
51912
|
+
if (!status) continue;
|
|
51913
|
+
const state2 = stateOf(status, visibility);
|
|
51914
|
+
items.set(key2, {
|
|
51915
|
+
artifact: key2,
|
|
51916
|
+
title: status.title,
|
|
51917
|
+
via: from === root ? null : from,
|
|
51918
|
+
parents: [from],
|
|
51919
|
+
state: state2,
|
|
51920
|
+
open: visibleNow(status, visibility),
|
|
51921
|
+
checked: CHECKED_BY_DEFAULT.includes(state2),
|
|
51922
|
+
selectable: ACTIONABLE.includes(state2),
|
|
51923
|
+
...state2 === "blocked" && status.blocked ? { blocked: status.blocked } : {},
|
|
51924
|
+
...status.stale && !status.blocked ? { changed: true } : {}
|
|
51925
|
+
});
|
|
51926
|
+
queue.push(key2);
|
|
51927
|
+
}
|
|
51928
|
+
}
|
|
51929
|
+
return resolveSelection([...items.values()], {}, root);
|
|
51930
|
+
}
|
|
51931
|
+
function resolveSelection(items, overrides, root) {
|
|
51932
|
+
const byKey = new Map(items.map((item3) => [item3.artifact, item3]));
|
|
51933
|
+
const wanted = (item3) => ACTIONABLE.includes(item3.state) && (overrides[item3.artifact] ?? CHECKED_BY_DEFAULT.includes(item3.state));
|
|
51934
|
+
const isRoot = (key2) => root ? key2 === root : !byKey.has(key2);
|
|
51935
|
+
const reachable = /* @__PURE__ */ new Set();
|
|
51936
|
+
const opens = (key2) => {
|
|
51937
|
+
if (isRoot(key2)) return true;
|
|
51938
|
+
const item3 = byKey.get(key2);
|
|
51939
|
+
return !!item3 && reachable.has(key2) && (item3.open || wanted(item3));
|
|
51940
|
+
};
|
|
51941
|
+
for (let changed = true; changed; ) {
|
|
51942
|
+
changed = false;
|
|
51943
|
+
for (const item3 of items) {
|
|
51944
|
+
if (reachable.has(item3.artifact) || !item3.parents.some(opens)) continue;
|
|
51945
|
+
reachable.add(item3.artifact);
|
|
51946
|
+
changed = true;
|
|
51947
|
+
}
|
|
51948
|
+
}
|
|
51949
|
+
return items.map((item3) => {
|
|
51950
|
+
const { reason: _reason, upstream: _upstream, ...rest } = item3;
|
|
51951
|
+
const reason = item3.state === "blocked" ? item3.blocked : void 0;
|
|
51952
|
+
if (!reachable.has(item3.artifact))
|
|
51953
|
+
return {
|
|
51954
|
+
...rest,
|
|
51955
|
+
checked: false,
|
|
51956
|
+
selectable: false,
|
|
51957
|
+
reason: "upstream",
|
|
51958
|
+
upstream: item3.via ?? item3.parents[0]
|
|
51959
|
+
};
|
|
51960
|
+
return {
|
|
51961
|
+
...rest,
|
|
51962
|
+
checked: wanted(item3),
|
|
51963
|
+
selectable: ACTIONABLE.includes(item3.state),
|
|
51964
|
+
...reason ? { reason } : {}
|
|
51965
|
+
};
|
|
51966
|
+
});
|
|
51967
|
+
}
|
|
51968
|
+
|
|
51829
51969
|
// src/shared/cloud-error.ts
|
|
51830
51970
|
function cloudErrorDetails(value) {
|
|
51831
51971
|
if (!value || typeof value !== "object") return {};
|
|
@@ -51846,6 +51986,53 @@ function cloudErrorDetails(value) {
|
|
|
51846
51986
|
return details;
|
|
51847
51987
|
}
|
|
51848
51988
|
|
|
51989
|
+
// src/shared/referrers.ts
|
|
51990
|
+
var SELECTABLE = ["private", "unpublished", "unlinked"];
|
|
51991
|
+
var item = (base) => ({
|
|
51992
|
+
...base,
|
|
51993
|
+
selectable: SELECTABLE.includes(base.state),
|
|
51994
|
+
checked: false
|
|
51995
|
+
});
|
|
51996
|
+
function localState(status, cloudKnown) {
|
|
51997
|
+
if (!status.published) {
|
|
51998
|
+
if (status.withdrawn) return { state: "withdrawn" };
|
|
51999
|
+
if (status.blocked) return { state: "blocked", reason: status.blocked };
|
|
52000
|
+
return { state: "unpublished" };
|
|
52001
|
+
}
|
|
52002
|
+
const isPrivate = status.visibility === "private";
|
|
52003
|
+
if (!cloudKnown) return { state: isPrivate ? "private" : "ready" };
|
|
52004
|
+
return isPrivate ? { state: "private", needsUpdate: true } : { state: "unlinked" };
|
|
52005
|
+
}
|
|
52006
|
+
function mergeReferrers({
|
|
52007
|
+
cloud,
|
|
52008
|
+
local
|
|
52009
|
+
}) {
|
|
52010
|
+
const byCloudId = new Map(
|
|
52011
|
+
local.filter((each) => each.cloudId).map((each) => [each.cloudId, each])
|
|
52012
|
+
);
|
|
52013
|
+
const fromCloud = (cloud ?? []).map((each) => {
|
|
52014
|
+
const match = byCloudId.get(each.cloudId);
|
|
52015
|
+
return item({
|
|
52016
|
+
artifact: match?.key ?? `cloud:${each.cloudId}`,
|
|
52017
|
+
cloudId: each.cloudId,
|
|
52018
|
+
title: match?.status.title ?? each.title,
|
|
52019
|
+
uses: each.uses,
|
|
52020
|
+
state: each.visibility === "private" ? "private" : "ready"
|
|
52021
|
+
});
|
|
52022
|
+
});
|
|
52023
|
+
const known = new Set((cloud ?? []).map((each) => each.cloudId));
|
|
52024
|
+
const fromLocal = local.filter((each) => !each.cloudId || !known.has(each.cloudId)).map(
|
|
52025
|
+
(each) => item({
|
|
52026
|
+
artifact: each.key,
|
|
52027
|
+
cloudId: each.cloudId,
|
|
52028
|
+
title: each.status.title,
|
|
52029
|
+
uses: each.uses,
|
|
52030
|
+
...localState(each.status, cloud !== null)
|
|
52031
|
+
})
|
|
52032
|
+
);
|
|
52033
|
+
return [...fromCloud, ...fromLocal];
|
|
52034
|
+
}
|
|
52035
|
+
|
|
51849
52036
|
// src/shared/brand.ts
|
|
51850
52037
|
var RYUGI_MARK_VIEWBOX = "0 0 512 512";
|
|
51851
52038
|
var RYUGI_MARK_BODY = '<g transform="translate(82 136.317460) scale(0.613756614)"><g transform="translate(0.000000,390.000000) scale(0.100000,-0.100000)" stroke="none"><path d="M4945 3889 c-339 -44 -682 -239 -905 -517 -139 -172 -232 -355 -365 -717 -136 -368 -285 -735 -360 -890 -219 -449 -524 -768 -849 -887 -121 -44 -215 -60 -356 -60 -162 0 -244 18 -450 97 -291 111 -420 144 -650 166 -257 24 -637 -19 -772 -87 -148 -75 -249 -247 -235 -399 19 -197 186 -344 392 -346 40 -1 127 11 205 27 115 23 160 28 300 28 242 1 372 -29 671 -155 226 -95 467 -149 662 -149 252 0 548 74 789 197 394 201 708 521 988 1008 83 144 271 529 405 830 220 493 300 632 436 759 121 112 226 162 424 201 44 9 108 29 143 45 165 77 274 285 244 467 -31 188 -168 334 -354 378 -70 16 -249 18 -363 4z M765 3139 c-202 -11 -415 -48 -497 -86 -91 -44 -151 -101 -193 -186 -123 -248 31 -525 307 -554 38 -4 99 3 204 23 137 27 167 29 384 29 205 0 249 -3 347 -23 225 -45 387 -106 658 -247 182 -94 308 -144 463 -182 138 -35 350 -39 447 -9 174 53 275 152 305 299 26 130 -40 267 -158 323 -52 25 -72 28 -227 35 -248 11 -328 37 -576 187 -232 140 -384 213 -585 281 -283 95 -541 127 -879 110z M620 2104 c-273 -32 -384 -65 -471 -143 -235 -208 -136 -589 172 -660 68 -16 129 -13 272 14 400 73 702 31 1167 -163 239 -99 350 -125 535 -125 193 0 338 51 448 157 117 113 139 261 56 375 -50 69 -99 85 -294 92 -245 10 -332 35 -563 163 -224 123 -456 211 -693 262 -111 23 -149 26 -359 29 -129 2 -251 1 -270 -1z"/></g></g>';
|
|
@@ -52093,7 +52280,7 @@ footer { display: flex; align-items: center; gap: 8px; margin-top: 28px; font-si
|
|
|
52093
52280
|
h1 { margin-top: 16px; font-size: 26px; line-height: 1.22; }
|
|
52094
52281
|
}
|
|
52095
52282
|
`;
|
|
52096
|
-
var
|
|
52283
|
+
var item2 = (lead, title, detail) => `<li>${lead}<div><b>${title}</b><span>${detail}</span></div></li>`;
|
|
52097
52284
|
var autoPublishCard = (t7, on6, ticket) => `<section class="card auto"><form method="post" action="/api/cloud/callback/auto-publish">
|
|
52098
52285
|
<input type="hidden" name="ticket" value="${escapeHtml(ticket)}">
|
|
52099
52286
|
<span class="text"><b>${on6 ? t7("callback.autoPublishOn") : t7("callback.autoPublishOff")}</b><span>${t7("callback.autoPublishDetail")}</span></span>
|
|
@@ -52104,13 +52291,13 @@ var signedInBody = (t7, result) => `<p class="pill">${CIRCLE_CHECK}${t7("callbac
|
|
|
52104
52291
|
<p class="lead">${t7("callback.lead")}</p>
|
|
52105
52292
|
${autoPublishCard(t7, result.autoPublish, result.ticket)}
|
|
52106
52293
|
<p class="label">${t7("callback.whatNext")}</p>
|
|
52107
|
-
<ul class="card">${
|
|
52294
|
+
<ul class="card">${item2(`<span class="icon">${PANEL}</span>`, t7("callback.fromPage"), t7("callback.fromPageDetail"))}${item2(`<span class="icon">${TERMINAL}</span>`, t7("callback.fromAgent"), t7("callback.fromAgentDetail"))}</ul>
|
|
52108
52295
|
<footer>${CHECK}<span>${t7("callback.closeOk")}</span></footer>`;
|
|
52109
52296
|
var failedBody = (t7, result) => `<p class="pill">${CIRCLE_ALERT}${t7("callback.notConnected")}</p>
|
|
52110
52297
|
<h1>${t7("callback.titleFailed")}</h1>
|
|
52111
52298
|
<p class="lead">${escapeHtml(result.detail)}</p>
|
|
52112
52299
|
<p class="label">${t7("callback.toTryAgain")}</p>
|
|
52113
|
-
<ol class="card">${
|
|
52300
|
+
<ol class="card">${item2('<span class="step">1</span>', t7("callback.stepBack"), t7("callback.stepBackDetail"))}${item2('<span class="step">2</span>', t7("callback.stepSignIn"), t7("callback.stepSignInDetail"))}</ol>
|
|
52114
52301
|
<details><summary>${t7("callback.otherReasons")}</summary><ul><li>${t7("callback.reasonUnreachable")}</li><li>${t7("callback.reasonRefused")}</li></ul></details>
|
|
52115
52302
|
<footer><span>${t7("callback.closeFailed")}</span></footer>`;
|
|
52116
52303
|
function callbackPage(result, locale = "en") {
|
|
@@ -52141,8 +52328,8 @@ function callbackPage(result, locale = "en") {
|
|
|
52141
52328
|
}
|
|
52142
52329
|
|
|
52143
52330
|
// src/server/config.ts
|
|
52144
|
-
var
|
|
52145
|
-
var
|
|
52331
|
+
var import_node_fs17 = __toESM(require("node:fs"), 1);
|
|
52332
|
+
var import_node_path14 = __toESM(require("node:path"), 1);
|
|
52146
52333
|
var defaults = () => ({ version: 1, artifacts: {} });
|
|
52147
52334
|
function isCloudRecord(value) {
|
|
52148
52335
|
if (typeof value !== "object" || value === null) return false;
|
|
@@ -52183,7 +52370,7 @@ function normalize(raw) {
|
|
|
52183
52370
|
function readConfig(file) {
|
|
52184
52371
|
let text5;
|
|
52185
52372
|
try {
|
|
52186
|
-
text5 =
|
|
52373
|
+
text5 = import_node_fs17.default.readFileSync(file, "utf8");
|
|
52187
52374
|
} catch {
|
|
52188
52375
|
return { config: defaults() };
|
|
52189
52376
|
}
|
|
@@ -52198,22 +52385,22 @@ function readConfig(file) {
|
|
|
52198
52385
|
}
|
|
52199
52386
|
var IGNORED = ["config.json", "artifacts/*", "!artifacts/document/", "artifacts/document/*/.artifact-id"];
|
|
52200
52387
|
function ensureGitignore(dir) {
|
|
52201
|
-
const file =
|
|
52388
|
+
const file = import_node_path14.default.join(dir, ".gitignore");
|
|
52202
52389
|
let current = "";
|
|
52203
52390
|
try {
|
|
52204
|
-
current =
|
|
52391
|
+
current = import_node_fs17.default.readFileSync(file, "utf8");
|
|
52205
52392
|
} catch {
|
|
52206
52393
|
}
|
|
52207
52394
|
const present = new Set(current.split(/\r?\n/).map((line2) => line2.trim()));
|
|
52208
52395
|
const missing = IGNORED.filter((line2) => !present.has(line2));
|
|
52209
52396
|
if (missing.length === 0) return;
|
|
52210
|
-
|
|
52397
|
+
import_node_fs17.default.writeFileSync(file, `${current}${current === "" || current.endsWith("\n") ? "" : "\n"}${missing.join("\n")}
|
|
52211
52398
|
`);
|
|
52212
52399
|
}
|
|
52213
52400
|
function ensureConfig(file) {
|
|
52214
|
-
|
|
52215
|
-
ensureGitignore(
|
|
52216
|
-
if (!
|
|
52401
|
+
import_node_fs17.default.mkdirSync(import_node_path14.default.dirname(file), { recursive: true });
|
|
52402
|
+
ensureGitignore(import_node_path14.default.dirname(file));
|
|
52403
|
+
if (!import_node_fs17.default.existsSync(file)) writeJsonAtomic(file, defaults());
|
|
52217
52404
|
}
|
|
52218
52405
|
function updateArtifactConfig(file, key2, patch) {
|
|
52219
52406
|
const { config, warning } = readConfig(file);
|
|
@@ -52233,27 +52420,27 @@ function setProjectAutoPublish(file, value) {
|
|
|
52233
52420
|
if (warning) throw new Error(warning);
|
|
52234
52421
|
if (value === null) delete config.autoPublish;
|
|
52235
52422
|
else config.autoPublish = value;
|
|
52236
|
-
|
|
52423
|
+
import_node_fs17.default.mkdirSync(import_node_path14.default.dirname(file), { recursive: true });
|
|
52237
52424
|
writeJsonAtomic(file, config);
|
|
52238
52425
|
}
|
|
52239
52426
|
|
|
52240
52427
|
// src/server/host-id.ts
|
|
52241
|
-
var
|
|
52242
|
-
var
|
|
52428
|
+
var import_node_fs18 = __toESM(require("node:fs"), 1);
|
|
52429
|
+
var import_node_path15 = __toESM(require("node:path"), 1);
|
|
52243
52430
|
function hostIdFor(credentialsFile2) {
|
|
52244
|
-
const file =
|
|
52431
|
+
const file = import_node_path15.default.join(import_node_path15.default.dirname(credentialsFile2), "host-id");
|
|
52245
52432
|
const saved = readPersisted(file);
|
|
52246
52433
|
if (/^[\w-]{16,64}$/.test(saved)) return saved;
|
|
52247
52434
|
const id3 = randomToken();
|
|
52248
|
-
|
|
52249
|
-
|
|
52435
|
+
import_node_fs18.default.mkdirSync(import_node_path15.default.dirname(file), { recursive: true, mode: 448 });
|
|
52436
|
+
import_node_fs18.default.writeFileSync(file, `${id3}
|
|
52250
52437
|
`, { mode: 384 });
|
|
52251
52438
|
return id3;
|
|
52252
52439
|
}
|
|
52253
52440
|
|
|
52254
52441
|
// src/server/pack.ts
|
|
52255
|
-
var
|
|
52256
|
-
var
|
|
52442
|
+
var import_node_fs19 = __toESM(require("node:fs"), 1);
|
|
52443
|
+
var import_node_path16 = __toESM(require("node:path"), 1);
|
|
52257
52444
|
var ArtifactTooLarge = class extends Error {
|
|
52258
52445
|
};
|
|
52259
52446
|
var excluded = (type, relative) => (type === "document" || type === "artboard" || type === "whiteboard") && relative === "comments.json";
|
|
@@ -52262,7 +52449,7 @@ var pageListOf = (dir, type, overrides) => {
|
|
|
52262
52449
|
if (overrides?.has(PAGES_FILE))
|
|
52263
52450
|
return parsePages(overrides.get(PAGES_FILE)?.toString("utf8") ?? null).pages;
|
|
52264
52451
|
try {
|
|
52265
|
-
return parsePages(
|
|
52452
|
+
return parsePages(import_node_fs19.default.readFileSync(import_node_path16.default.join(dir, PAGES_FILE), "utf8")).pages;
|
|
52266
52453
|
} catch {
|
|
52267
52454
|
return [];
|
|
52268
52455
|
}
|
|
@@ -52272,7 +52459,7 @@ function packArtifact(dir, type, {
|
|
|
52272
52459
|
maxBytes = MAX_ARTIFACT_BYTES,
|
|
52273
52460
|
overrides: given
|
|
52274
52461
|
} = {}) {
|
|
52275
|
-
const rootReal =
|
|
52462
|
+
const rootReal = import_node_fs19.default.realpathSync(dir);
|
|
52276
52463
|
const pages = pageListOf(dir, type, given);
|
|
52277
52464
|
const deletedPages = new Set(
|
|
52278
52465
|
pages.filter((page) => isDeletedPage(page) && isPageId(page.id)).map((page) => pageFileOf(page.id))
|
|
@@ -52285,17 +52472,17 @@ function packArtifact(dir, type, {
|
|
|
52285
52472
|
const visited = /* @__PURE__ */ new Set([rootReal]);
|
|
52286
52473
|
let total = 0;
|
|
52287
52474
|
const walk = (current) => {
|
|
52288
|
-
for (const entry of
|
|
52475
|
+
for (const entry of import_node_fs19.default.readdirSync(current, { withFileTypes: true })) {
|
|
52289
52476
|
if (entry.name.startsWith(".")) continue;
|
|
52290
|
-
const full =
|
|
52477
|
+
const full = import_node_path16.default.join(current, entry.name);
|
|
52291
52478
|
let real;
|
|
52292
52479
|
try {
|
|
52293
|
-
real =
|
|
52480
|
+
real = import_node_fs19.default.realpathSync(full);
|
|
52294
52481
|
} catch {
|
|
52295
52482
|
continue;
|
|
52296
52483
|
}
|
|
52297
|
-
if (!real.startsWith(rootReal +
|
|
52298
|
-
const stat =
|
|
52484
|
+
if (!real.startsWith(rootReal + import_node_path16.default.sep)) continue;
|
|
52485
|
+
const stat = import_node_fs19.default.statSync(real);
|
|
52299
52486
|
if (stat.isDirectory()) {
|
|
52300
52487
|
if (visited.has(real)) continue;
|
|
52301
52488
|
visited.add(real);
|
|
@@ -52303,7 +52490,7 @@ function packArtifact(dir, type, {
|
|
|
52303
52490
|
continue;
|
|
52304
52491
|
}
|
|
52305
52492
|
if (!stat.isFile()) continue;
|
|
52306
|
-
const relative =
|
|
52493
|
+
const relative = import_node_path16.default.relative(dir, full).split(import_node_path16.default.sep).join("/");
|
|
52307
52494
|
if (excluded(type, relative) || deletedPages.has(relative)) continue;
|
|
52308
52495
|
if (!overrides?.has(relative)) total += stat.size;
|
|
52309
52496
|
found.push({ path: relative, real });
|
|
@@ -52317,14 +52504,14 @@ function packArtifact(dir, type, {
|
|
|
52317
52504
|
);
|
|
52318
52505
|
}
|
|
52319
52506
|
return [
|
|
52320
|
-
...found.filter((file) => !overrides?.has(file.path)).map((file) => ({ path: file.path, data:
|
|
52507
|
+
...found.filter((file) => !overrides?.has(file.path)).map((file) => ({ path: file.path, data: import_node_fs19.default.readFileSync(file.real) })),
|
|
52321
52508
|
...[...overrides ?? []].flatMap(([file, data]) => data ? [{ path: file, data }] : [])
|
|
52322
52509
|
];
|
|
52323
52510
|
}
|
|
52324
52511
|
|
|
52325
52512
|
// src/server/publish-payload.ts
|
|
52326
|
-
var
|
|
52327
|
-
var
|
|
52513
|
+
var import_node_fs21 = __toESM(require("node:fs"), 1);
|
|
52514
|
+
var import_node_path18 = __toESM(require("node:path"), 1);
|
|
52328
52515
|
|
|
52329
52516
|
// src/shared/whiteboard/scene.ts
|
|
52330
52517
|
var BOOKKEEPING = /* @__PURE__ */ new Set(["version", "versionNonce", "updated", "seed", "customData"]);
|
|
@@ -52373,8 +52560,8 @@ function parseScene(text5, file = "scene.excalidraw") {
|
|
|
52373
52560
|
const elements = body.elements ?? [];
|
|
52374
52561
|
if (!Array.isArray(elements)) return { error: `${file}: elements must be an array` };
|
|
52375
52562
|
for (const [index, element] of elements.entries()) {
|
|
52376
|
-
const
|
|
52377
|
-
if (typeof
|
|
52563
|
+
const item3 = record(element);
|
|
52564
|
+
if (typeof item3.id !== "string" || typeof item3.type !== "string")
|
|
52378
52565
|
return { error: `${file}: element ${index} needs a string id and type` };
|
|
52379
52566
|
}
|
|
52380
52567
|
return {
|
|
@@ -53737,17 +53924,17 @@ function escapeXml(text5) {
|
|
|
53737
53924
|
function buildAttrs(attrs) {
|
|
53738
53925
|
return Object.entries(attrs).filter(([, v6]) => v6 !== void 0 && v6 !== "").map(([k4, v6]) => ` ${k4}="${escapeXml(v6)}"`).join("");
|
|
53739
53926
|
}
|
|
53740
|
-
function isCdata(
|
|
53741
|
-
return typeof
|
|
53927
|
+
function isCdata(item3) {
|
|
53928
|
+
return typeof item3 === "object" && "cdata" in item3;
|
|
53742
53929
|
}
|
|
53743
|
-
function renderCdata(
|
|
53744
|
-
return `<![CDATA[${
|
|
53930
|
+
function renderCdata(item3) {
|
|
53931
|
+
return `<![CDATA[${item3.cdata}]]>`;
|
|
53745
53932
|
}
|
|
53746
53933
|
function renderXml(content, indent = 0, options2 = {}) {
|
|
53747
53934
|
const lines = [];
|
|
53748
|
-
for (const
|
|
53749
|
-
else if (isCdata(
|
|
53750
|
-
else lines.push(renderElement(
|
|
53935
|
+
for (const item3 of content) if (typeof item3 === "string") lines.push(escapeXml(item3));
|
|
53936
|
+
else if (isCdata(item3)) lines.push(renderCdata(item3));
|
|
53937
|
+
else lines.push(renderElement(item3, indent, options2));
|
|
53751
53938
|
return lines.join("");
|
|
53752
53939
|
}
|
|
53753
53940
|
function renderElement(el3, indent, options2) {
|
|
@@ -54016,12 +54203,12 @@ function serializeToXml(state2, registry2, options2 = {}) {
|
|
|
54016
54203
|
if (!selectedBlockIds?.size) return items;
|
|
54017
54204
|
const blockId2 = child.$?.blockId;
|
|
54018
54205
|
if (!blockId2 || !selectedBlockIds.has(blockId2)) return items;
|
|
54019
|
-
return items.map((
|
|
54020
|
-
if (typeof
|
|
54206
|
+
return items.map((item3) => {
|
|
54207
|
+
if (typeof item3 === "string" || "cdata" in item3) return item3;
|
|
54021
54208
|
return {
|
|
54022
|
-
...
|
|
54209
|
+
...item3,
|
|
54023
54210
|
attrs: {
|
|
54024
|
-
...
|
|
54211
|
+
...item3.attrs,
|
|
54025
54212
|
selected: "true"
|
|
54026
54213
|
}
|
|
54027
54214
|
};
|
|
@@ -57428,9 +57615,9 @@ function getAtomFeed(feedRoot) {
|
|
|
57428
57615
|
const childs = feedRoot.children;
|
|
57429
57616
|
const feed = {
|
|
57430
57617
|
type: "atom",
|
|
57431
|
-
items: getElementsByTagName("entry", childs).map((
|
|
57618
|
+
items: getElementsByTagName("entry", childs).map((item3) => {
|
|
57432
57619
|
var _a6;
|
|
57433
|
-
const { children: children2 } =
|
|
57620
|
+
const { children: children2 } = item3;
|
|
57434
57621
|
const entry = { media: getMediaElements(children2) };
|
|
57435
57622
|
addConditionally(entry, "id", "id", children2);
|
|
57436
57623
|
addConditionally(entry, "title", "title", children2);
|
|
@@ -57469,8 +57656,8 @@ function getRssFeed(feedRoot) {
|
|
|
57469
57656
|
const feed = {
|
|
57470
57657
|
type: feedRoot.name.substr(0, 3),
|
|
57471
57658
|
id: "",
|
|
57472
|
-
items: getElementsByTagName("item", feedRoot.children).map((
|
|
57473
|
-
const { children: children2 } =
|
|
57659
|
+
items: getElementsByTagName("item", feedRoot.children).map((item3) => {
|
|
57660
|
+
const { children: children2 } = item3;
|
|
57474
57661
|
const entry = { media: getMediaElements(children2) };
|
|
57475
57662
|
addConditionally(entry, "id", "guid", children2);
|
|
57476
57663
|
addConditionally(entry, "title", "title", children2);
|
|
@@ -59677,8 +59864,8 @@ function getAtomFeed2(feedRoot) {
|
|
|
59677
59864
|
const childs = feedRoot.children;
|
|
59678
59865
|
const feed = {
|
|
59679
59866
|
type: "atom",
|
|
59680
|
-
items: getElementsByTagName2("entry", childs).map((
|
|
59681
|
-
const { children: children2 } =
|
|
59867
|
+
items: getElementsByTagName2("entry", childs).map((item3) => {
|
|
59868
|
+
const { children: children2 } = item3;
|
|
59682
59869
|
const entry = { media: getMediaElements2(children2) };
|
|
59683
59870
|
addConditionally2(entry, "id", "id", children2);
|
|
59684
59871
|
addConditionally2(entry, "title", "title", children2);
|
|
@@ -59716,8 +59903,8 @@ function getRssFeed2(feedRoot) {
|
|
|
59716
59903
|
const feed = {
|
|
59717
59904
|
type: feedRoot.name.substr(0, 3),
|
|
59718
59905
|
id: "",
|
|
59719
|
-
items: getElementsByTagName2("item", feedRoot.children).map((
|
|
59720
|
-
const { children: children2 } =
|
|
59906
|
+
items: getElementsByTagName2("item", feedRoot.children).map((item3) => {
|
|
59907
|
+
const { children: children2 } = item3;
|
|
59721
59908
|
const entry = { media: getMediaElements2(children2) };
|
|
59722
59909
|
addConditionally2(entry, "id", "guid", children2);
|
|
59723
59910
|
addConditionally2(entry, "title", "title", children2);
|
|
@@ -61810,9 +61997,9 @@ var NamedNodeMap = class extends Array {
|
|
|
61810
61997
|
this.unshift(attr);
|
|
61811
61998
|
}
|
|
61812
61999
|
removeNamedItem(name) {
|
|
61813
|
-
const
|
|
62000
|
+
const item3 = this.getNamedItem(name);
|
|
61814
62001
|
this.ownerElement.removeAttribute(name);
|
|
61815
|
-
this.splice(this.indexOf(
|
|
62002
|
+
this.splice(this.indexOf(item3), 1);
|
|
61816
62003
|
}
|
|
61817
62004
|
item(index) {
|
|
61818
62005
|
return index < this.length ? this[index] : null;
|
|
@@ -64872,63 +65059,57 @@ function registerRef(registry2) {
|
|
|
64872
65059
|
const previous = registry2.getReader(CARRIER);
|
|
64873
65060
|
registry2.registerReader(CARRIER, (el3, ctx) => {
|
|
64874
65061
|
if (!el3.hasAttribute(MARK3)) return previous ? previous(el3, ctx) : false;
|
|
64875
|
-
const
|
|
64876
|
-
|
|
64877
|
-
|
|
64878
|
-
|
|
64879
|
-
|
|
64880
|
-
|
|
64881
|
-
|
|
64882
|
-
to: attr("to"),
|
|
64883
|
-
group: attr("group"),
|
|
64884
|
-
board: attr("board"),
|
|
64885
|
-
frame: attr("frame"),
|
|
64886
|
-
page: attr("page"),
|
|
64887
|
-
label: el3.textContent ?? void 0
|
|
64888
|
-
})
|
|
64889
|
-
};
|
|
65062
|
+
const target = {};
|
|
65063
|
+
for (const name of [...REF_KIND_NAMES, "to", ...REF_SUB_TARGETS]) {
|
|
65064
|
+
const value = el3.getAttribute(name);
|
|
65065
|
+
if (value !== null) target[name] = value;
|
|
65066
|
+
}
|
|
65067
|
+
target.label = el3.textContent ?? void 0;
|
|
65068
|
+
return { type: "ref", version: 1, ...refTarget(target) };
|
|
64890
65069
|
});
|
|
64891
65070
|
registry2.registerWriter("ref", (node) => {
|
|
64892
|
-
const ref = node;
|
|
64893
|
-
const attrs = {
|
|
64894
|
-
|
|
64895
|
-
|
|
64896
|
-
|
|
64897
|
-
|
|
64898
|
-
...ref.group ? { group: ref.group } : {},
|
|
64899
|
-
...ref.board ? { board: ref.board } : {},
|
|
64900
|
-
...ref.frame ? { frame: ref.frame } : {},
|
|
64901
|
-
...ref.page ? { page: ref.page } : {}
|
|
64902
|
-
};
|
|
65071
|
+
const ref = refTarget(node);
|
|
65072
|
+
const attrs = { [MARK3]: "1" };
|
|
65073
|
+
for (const name of [...REF_KIND_NAMES, "to", ...REF_SUB_TARGETS]) {
|
|
65074
|
+
const value = ref[name];
|
|
65075
|
+
if (value !== void 0) attrs[name] = value;
|
|
65076
|
+
}
|
|
64903
65077
|
if (!ref.label) return { tag: CARRIER, attrs, selfClosing: true };
|
|
64904
65078
|
return { tag: CARRIER, attrs, children: [ref.label] };
|
|
64905
65079
|
});
|
|
64906
65080
|
}
|
|
65081
|
+
var NOUN = {
|
|
65082
|
+
document: "a document",
|
|
65083
|
+
artboard: "an artboard",
|
|
65084
|
+
whiteboard: "a whiteboard",
|
|
65085
|
+
html: "an html page"
|
|
65086
|
+
};
|
|
65087
|
+
var NEEDS = ["artboard", "whiteboard", "document", "html"];
|
|
65088
|
+
var either = (items) => items.length === 1 ? items[0] : `${items.slice(0, -1).join(", ")} or ${items.at(-1)}`;
|
|
64907
65089
|
function refProblem(ref) {
|
|
64908
|
-
|
|
64909
|
-
|
|
64910
|
-
|
|
64911
|
-
|
|
64912
|
-
|
|
64913
|
-
|
|
64914
|
-
|
|
64915
|
-
|
|
64916
|
-
|
|
64917
|
-
|
|
64918
|
-
|
|
64919
|
-
|
|
64920
|
-
|
|
64921
|
-
|
|
64922
|
-
|
|
64923
|
-
|
|
64924
|
-
|
|
64925
|
-
|
|
64926
|
-
return
|
|
64927
|
-
|
|
64928
|
-
if (
|
|
64929
|
-
|
|
64930
|
-
|
|
64931
|
-
return `<ref artboard="${ref.artboard}"> names either a group or a board, not both`;
|
|
65090
|
+
const kinds2 = refKinds(ref);
|
|
65091
|
+
if (kinds2.length > 1)
|
|
65092
|
+
return `<ref> names one target: either ${either(kinds2.map((kind2) => NOUN[kind2]))}, not both`;
|
|
65093
|
+
const kind = kinds2[0];
|
|
65094
|
+
if (!kind)
|
|
65095
|
+
return `<ref> needs ${either(NEEDS.map((name) => NOUN[name]))}: the slug of one in this project`;
|
|
65096
|
+
const slug = ref[kind] ?? "";
|
|
65097
|
+
const at7 = `<ref ${kind}="${slug}">`;
|
|
65098
|
+
if (!isArtifactId(slug))
|
|
65099
|
+
return `${at7} is not ${NOUN[kind].replace(/ page$/, "")} slug: lowercase letters, digits and hyphens`;
|
|
65100
|
+
const allowed = artifactKind(kind)?.subTargets ?? [];
|
|
65101
|
+
const named3 = REF_SUB_TARGETS.filter((sub2) => ref[sub2] !== void 0);
|
|
65102
|
+
for (const sub2 of named3) {
|
|
65103
|
+
if (allowed.includes(sub2)) continue;
|
|
65104
|
+
const owners = ARTIFACT_KINDS.filter(
|
|
65105
|
+
(each) => each.subTargets.includes(sub2)
|
|
65106
|
+
).map((each) => each.type);
|
|
65107
|
+
const takes = allowed.length ? `${NOUN[kind]} reference takes ${either(allowed)}` : `${NOUN[kind]} reference takes no sub-target`;
|
|
65108
|
+
return `${at7} has no ${sub2}: ${sub2} belongs to ${either(owners)} references; ${takes}`;
|
|
65109
|
+
}
|
|
65110
|
+
if (named3.length > 1) return `${at7} names either a ${named3[0]} or a ${named3[1]}, not both`;
|
|
65111
|
+
if (ref.page !== void 0 && !isPageId(ref.page))
|
|
65112
|
+
return `<ref ${kind}="${slug}" page="${ref.page}"> is not a page id: lowercase letters, digits and hyphens`;
|
|
64932
65113
|
return null;
|
|
64933
65114
|
}
|
|
64934
65115
|
function badRefs(state2) {
|
|
@@ -66225,31 +66406,31 @@ function injectRuntime(html, options2 = {}) {
|
|
|
66225
66406
|
}
|
|
66226
66407
|
|
|
66227
66408
|
// src/server/whiteboard-index.ts
|
|
66228
|
-
var
|
|
66229
|
-
var
|
|
66409
|
+
var import_node_fs20 = __toESM(require("node:fs"), 1);
|
|
66410
|
+
var import_node_path17 = __toESM(require("node:path"), 1);
|
|
66230
66411
|
var readText = (file) => {
|
|
66231
66412
|
try {
|
|
66232
|
-
return
|
|
66413
|
+
return import_node_fs20.default.readFileSync(file, "utf8");
|
|
66233
66414
|
} catch {
|
|
66234
66415
|
return null;
|
|
66235
66416
|
}
|
|
66236
66417
|
};
|
|
66237
66418
|
function pageFilesIn(dir) {
|
|
66238
66419
|
try {
|
|
66239
|
-
return
|
|
66420
|
+
return import_node_fs20.default.readdirSync(import_node_path17.default.join(dir, PAGES_DIR)).filter((name) => name.endsWith(".excalidraw")).map((name) => name.slice(0, -".excalidraw".length)).sort();
|
|
66240
66421
|
} catch {
|
|
66241
66422
|
return [];
|
|
66242
66423
|
}
|
|
66243
66424
|
}
|
|
66244
66425
|
function readBoardIndex(dir) {
|
|
66245
66426
|
const { pages } = normalizePages(
|
|
66246
|
-
parsePages(readText(
|
|
66427
|
+
parsePages(readText(import_node_path17.default.join(dir, PAGES_FILE))).pages,
|
|
66247
66428
|
pageFilesIn(dir)
|
|
66248
66429
|
);
|
|
66249
66430
|
const frames = {};
|
|
66250
66431
|
const scenes = {};
|
|
66251
66432
|
for (const page of pages) {
|
|
66252
|
-
const text5 = readText(
|
|
66433
|
+
const text5 = readText(import_node_path17.default.join(dir, pageFileOf(page.id)));
|
|
66253
66434
|
const parsed = text5 === null ? null : parseScene(text5);
|
|
66254
66435
|
if (!parsed || "error" in parsed) continue;
|
|
66255
66436
|
scenes[page.id] = parsed.scene;
|
|
@@ -66279,11 +66460,11 @@ function publishPayload(ref, dir, title, payload, comments = emptyComments()) {
|
|
|
66279
66460
|
if (ref.type === "document")
|
|
66280
66461
|
return {
|
|
66281
66462
|
title,
|
|
66282
|
-
state: parseDocument2(
|
|
66463
|
+
state: parseDocument2(import_node_fs21.default.readFileSync(import_node_path18.default.join(dir, "doc.xml"), "utf8")),
|
|
66283
66464
|
comments: sharedComments(comments)
|
|
66284
66465
|
};
|
|
66285
66466
|
if (ref.type === "whiteboard") {
|
|
66286
|
-
const parsed = parseScene(
|
|
66467
|
+
const parsed = parseScene(import_node_fs21.default.readFileSync(import_node_path18.default.join(dir, "scene.excalidraw"), "utf8"));
|
|
66287
66468
|
if ("error" in parsed) throw new Error(parsed.error);
|
|
66288
66469
|
const pages = livePages(readBoardIndex(dir).pages);
|
|
66289
66470
|
return {
|
|
@@ -66317,12 +66498,12 @@ function withCloudRuntime(type, files) {
|
|
|
66317
66498
|
}
|
|
66318
66499
|
|
|
66319
66500
|
// src/server/settings.ts
|
|
66320
|
-
var
|
|
66321
|
-
var
|
|
66322
|
-
var settingsFileFor = (credentialsFile2) =>
|
|
66501
|
+
var import_node_fs22 = __toESM(require("node:fs"), 1);
|
|
66502
|
+
var import_node_path19 = __toESM(require("node:path"), 1);
|
|
66503
|
+
var settingsFileFor = (credentialsFile2) => import_node_path19.default.join(import_node_path19.default.dirname(credentialsFile2), "config.json");
|
|
66323
66504
|
function readSettings(file) {
|
|
66324
66505
|
try {
|
|
66325
|
-
const raw = JSON.parse(
|
|
66506
|
+
const raw = JSON.parse(import_node_fs22.default.readFileSync(file, "utf8"));
|
|
66326
66507
|
return typeof raw === "object" && raw !== null && !Array.isArray(raw) ? raw : {};
|
|
66327
66508
|
} catch {
|
|
66328
66509
|
return {};
|
|
@@ -66333,7 +66514,7 @@ function readGlobalAutoPublish(file) {
|
|
|
66333
66514
|
return typeof value === "boolean" ? value : void 0;
|
|
66334
66515
|
}
|
|
66335
66516
|
function writeGlobalAutoPublish(file, value) {
|
|
66336
|
-
|
|
66517
|
+
import_node_fs22.default.mkdirSync(import_node_path19.default.dirname(file), { recursive: true, mode: 448 });
|
|
66337
66518
|
writeJsonAtomic(file, { ...readSettings(file), autoPublish: value });
|
|
66338
66519
|
}
|
|
66339
66520
|
function postponeGlobalAutoPublish(file) {
|
|
@@ -66342,7 +66523,7 @@ function postponeGlobalAutoPublish(file) {
|
|
|
66342
66523
|
writeGlobalAutoPublish(file, false);
|
|
66343
66524
|
return "off";
|
|
66344
66525
|
}
|
|
66345
|
-
|
|
66526
|
+
import_node_fs22.default.mkdirSync(import_node_path19.default.dirname(file), { recursive: true, mode: 448 });
|
|
66346
66527
|
writeJsonAtomic(file, { ...settings, autoPublishPostponed: true });
|
|
66347
66528
|
return "postponed";
|
|
66348
66529
|
}
|
|
@@ -66362,7 +66543,7 @@ var CALLBACK_TICKET_TTL_MS = 30 * 60 * 1e3;
|
|
|
66362
66543
|
var UPLOAD_CONCURRENCY = 6;
|
|
66363
66544
|
var MAX_JSON_BODY = 4096;
|
|
66364
66545
|
var CLOUD_ID = /^[\w-]{1,64}$/;
|
|
66365
|
-
var ROUTE = /^\/api\/cloud\/(status|login|logout|artifacts|publish|publication|reserve|visibility|auto-publish|sync)(?:\/([^/]+)(?:\/([^/]+))?)?$/;
|
|
66546
|
+
var ROUTE = /^\/api\/cloud\/(status|login|logout|artifacts|publish|publish-refs|publish-referrers|publication|refs|reserve|visibility|auto-publish|sync)(?:\/([^/]+)(?:\/([^/]+))?)?$/;
|
|
66366
66547
|
var SignedOut = class extends Error {
|
|
66367
66548
|
};
|
|
66368
66549
|
var CloudRefused = class extends Error {
|
|
@@ -66479,7 +66660,7 @@ function createCloudRoutes(options2) {
|
|
|
66479
66660
|
const challenge = import_node_crypto10.default.createHash("sha256").update(verifier).digest("base64url");
|
|
66480
66661
|
return `${origin}/auth/cli?port=${options2.port()}&state=${state2}&challenge=${challenge}`;
|
|
66481
66662
|
};
|
|
66482
|
-
const cloudFetch = async (method,
|
|
66663
|
+
const cloudFetch = async (method, path45, body) => {
|
|
66483
66664
|
const credentials = readCredentials(credentialsFile2, origin);
|
|
66484
66665
|
if (!credentials) throw new SignedOut();
|
|
66485
66666
|
const headers = { Authorization: `Bearer ${credentials.token}` };
|
|
@@ -66493,7 +66674,7 @@ function createCloudRoutes(options2) {
|
|
|
66493
66674
|
}
|
|
66494
66675
|
let res;
|
|
66495
66676
|
try {
|
|
66496
|
-
res = await fetch(`${origin}${
|
|
66677
|
+
res = await fetch(`${origin}${path45}`, { method, headers, body: payload });
|
|
66497
66678
|
} catch (err) {
|
|
66498
66679
|
throw new CloudRefused(502, `could not reach ${origin}: ${err.message}`);
|
|
66499
66680
|
}
|
|
@@ -66522,21 +66703,6 @@ function createCloudRoutes(options2) {
|
|
|
66522
66703
|
return res;
|
|
66523
66704
|
};
|
|
66524
66705
|
const artifactEntry = (key2) => readConfig(configFile).config.artifacts[key2] ?? {};
|
|
66525
|
-
const referencedBoards = (ref, visibility) => {
|
|
66526
|
-
const boards = {
|
|
66527
|
-
unpublished: [],
|
|
66528
|
-
private: [],
|
|
66529
|
-
published: []
|
|
66530
|
-
};
|
|
66531
|
-
for (const slug of new Set(options2.references?.(ref) ?? [])) {
|
|
66532
|
-
const entry = artifactEntry(`artboard/${slug}`);
|
|
66533
|
-
const state2 = publishState(entry);
|
|
66534
|
-
if (!state2.published) boards.unpublished.push(slug);
|
|
66535
|
-
else if (visibility === "public" && (entry.cloud?.visibility ?? state2.visibility) === "private")
|
|
66536
|
-
boards.private.push(slug);
|
|
66537
|
-
}
|
|
66538
|
-
return boards;
|
|
66539
|
-
};
|
|
66540
66706
|
const publications = /* @__PURE__ */ new Map();
|
|
66541
66707
|
const changedDuringPublish = /* @__PURE__ */ new Set();
|
|
66542
66708
|
const snapshot2 = (key2) => ({
|
|
@@ -66629,7 +66795,7 @@ function createCloudRoutes(options2) {
|
|
|
66629
66795
|
const content = {
|
|
66630
66796
|
title: inspected.title,
|
|
66631
66797
|
payload: inspected.payload,
|
|
66632
|
-
files: hashed.map(({ path:
|
|
66798
|
+
files: hashed.map(({ path: path45, hash: hash2 }) => ({ path: path45, hash: hash2 }))
|
|
66633
66799
|
};
|
|
66634
66800
|
const fingerprint = sha(
|
|
66635
66801
|
JSON.stringify({
|
|
@@ -66840,6 +67006,182 @@ function createCloudRoutes(options2) {
|
|
|
66840
67006
|
return { kind: "failed", message: err.message };
|
|
66841
67007
|
}
|
|
66842
67008
|
};
|
|
67009
|
+
const cascadeStatus = async (key2) => {
|
|
67010
|
+
const ref = artifactKeyOf(key2);
|
|
67011
|
+
const inspected = ref && await options2.inspect(ref);
|
|
67012
|
+
if (!ref || !inspected) return null;
|
|
67013
|
+
const entry = artifactEntry(key2);
|
|
67014
|
+
const published = !!entry.cloud?.publishedAt;
|
|
67015
|
+
let blocked = null;
|
|
67016
|
+
let fingerprint = null;
|
|
67017
|
+
try {
|
|
67018
|
+
const prepared = await prepare(ref);
|
|
67019
|
+
if (prepared.ready) fingerprint = prepared.fingerprint;
|
|
67020
|
+
else blocked = prepared.reasons.join("; ");
|
|
67021
|
+
} catch (err) {
|
|
67022
|
+
if (err instanceof SignedOut) throw err;
|
|
67023
|
+
blocked = err.message.replace(/^cloud refused \(\d+\): /, "");
|
|
67024
|
+
}
|
|
67025
|
+
return {
|
|
67026
|
+
title: inspected.title,
|
|
67027
|
+
published,
|
|
67028
|
+
withdrawn: !entry.cloud && entry.autoPublish === false,
|
|
67029
|
+
stale: published && fingerprint !== null && fingerprint !== entry.cloud?.fingerprint,
|
|
67030
|
+
visibility: published ? entry.cloud?.visibility ?? publishState(entry).visibility : null,
|
|
67031
|
+
blocked
|
|
67032
|
+
};
|
|
67033
|
+
};
|
|
67034
|
+
const cascadeOf = (ref, visibility) => buildCascade(`${ref.type}/${ref.id}`, visibility, {
|
|
67035
|
+
referencesOf: (key2) => {
|
|
67036
|
+
const each = artifactKeyOf(key2);
|
|
67037
|
+
return each ? options2.references?.(each) ?? [] : [];
|
|
67038
|
+
},
|
|
67039
|
+
statusOf: cascadeStatus
|
|
67040
|
+
});
|
|
67041
|
+
const cloudReferrers = async (cloudId) => {
|
|
67042
|
+
try {
|
|
67043
|
+
const res = await cloudFetch("GET", `/api/a/${cloudId}/refs`);
|
|
67044
|
+
if (!res.ok) return null;
|
|
67045
|
+
const body = await res.json();
|
|
67046
|
+
return Array.isArray(body.referrers) ? body.referrers : null;
|
|
67047
|
+
} catch {
|
|
67048
|
+
return null;
|
|
67049
|
+
}
|
|
67050
|
+
};
|
|
67051
|
+
const referrersOf2 = async (ref) => {
|
|
67052
|
+
const local = [];
|
|
67053
|
+
for (const { key: key2, uses } of options2.referrers?.(ref) ?? []) {
|
|
67054
|
+
const status = await cascadeStatus(key2);
|
|
67055
|
+
if (status) local.push({ key: key2, uses, status, cloudId: artifactEntry(key2).cloud?.id ?? null });
|
|
67056
|
+
}
|
|
67057
|
+
const root = artifactEntry(`${ref.type}/${ref.id}`).cloud;
|
|
67058
|
+
const cloud = root?.publishedAt ? await cloudReferrers(root.id) : null;
|
|
67059
|
+
const cloudUnavailable = !!root?.publishedAt && cloud === null;
|
|
67060
|
+
return {
|
|
67061
|
+
referrers: mergeReferrers({ cloud, local }),
|
|
67062
|
+
...cloudUnavailable ? { cloudUnavailable: true } : {}
|
|
67063
|
+
};
|
|
67064
|
+
};
|
|
67065
|
+
const publishReferrers = async (ref, publishKeys, makePublic) => {
|
|
67066
|
+
const rootKey = `${ref.type}/${ref.id}`;
|
|
67067
|
+
const root = artifactEntry(rootKey);
|
|
67068
|
+
if (!root.cloud?.publishedAt || publishState(root).visibility !== "public")
|
|
67069
|
+
throw new CloudRefused(400, `${rootKey} is not public`);
|
|
67070
|
+
const { referrers } = await referrersOf2(ref);
|
|
67071
|
+
const known = new Map(referrers.map((item3) => [item3.artifact, item3]));
|
|
67072
|
+
for (const key2 of makePublic)
|
|
67073
|
+
if (known.get(key2)?.state !== "private")
|
|
67074
|
+
throw new CloudRefused(400, `${key2} is not a private document that references ${rootKey}`);
|
|
67075
|
+
for (const key2 of publishKeys) {
|
|
67076
|
+
const state2 = known.get(key2)?.state;
|
|
67077
|
+
if (state2 !== "unpublished" && state2 !== "unlinked")
|
|
67078
|
+
throw new CloudRefused(400, `${key2} is not a document ${rootKey} can publish`);
|
|
67079
|
+
}
|
|
67080
|
+
const results = [];
|
|
67081
|
+
for (const key2 of [...makePublic, ...publishKeys]) {
|
|
67082
|
+
const item3 = known.get(key2);
|
|
67083
|
+
const action = makePublic.includes(key2) ? "make-public" : item3.state === "unlinked" ? "update" : "publish";
|
|
67084
|
+
try {
|
|
67085
|
+
if (!artifactKeyOf(key2)) {
|
|
67086
|
+
await expectOk(
|
|
67087
|
+
await cloudFetch("PATCH", `/api/artifacts/${item3.cloudId}`, { visibility: "public" })
|
|
67088
|
+
);
|
|
67089
|
+
} else
|
|
67090
|
+
await serialized(key2, async () => {
|
|
67091
|
+
const target = artifactKeyOf(key2);
|
|
67092
|
+
if (action === "make-public") {
|
|
67093
|
+
await setVisibility(target, "public");
|
|
67094
|
+
if (!item3.needsUpdate) return;
|
|
67095
|
+
}
|
|
67096
|
+
const result = await publish(target, "public");
|
|
67097
|
+
if (result.status !== 200)
|
|
67098
|
+
throw new CloudRefused(
|
|
67099
|
+
409,
|
|
67100
|
+
(result.body.reasons ?? []).join("; ") || "not ready to publish"
|
|
67101
|
+
);
|
|
67102
|
+
updateArtifactConfig(configFile, key2, { autoPublish: null });
|
|
67103
|
+
});
|
|
67104
|
+
results.push({ artifact: key2, action, status: "published" });
|
|
67105
|
+
} catch (err) {
|
|
67106
|
+
if (err instanceof SignedOut) throw err;
|
|
67107
|
+
const httpStatus = err instanceof CloudRefused ? err.status : void 0;
|
|
67108
|
+
results.push({
|
|
67109
|
+
artifact: key2,
|
|
67110
|
+
action,
|
|
67111
|
+
status: httpStatus !== void 0 && httpStatus < 500 ? "failed" : "unknown",
|
|
67112
|
+
error: {
|
|
67113
|
+
error: err.message.replace(/^cloud refused \(\d+\): /, ""),
|
|
67114
|
+
...httpStatus === void 0 ? {} : { httpStatus }
|
|
67115
|
+
}
|
|
67116
|
+
});
|
|
67117
|
+
}
|
|
67118
|
+
}
|
|
67119
|
+
return { results };
|
|
67120
|
+
};
|
|
67121
|
+
const publishRefs = async (ref, refs3, makePublic, requested) => {
|
|
67122
|
+
const rootKey = `${ref.type}/${ref.id}`;
|
|
67123
|
+
const visibility = requested ?? publishState(artifactEntry(rootKey)).visibility;
|
|
67124
|
+
const listed = await cascadeOf(ref, visibility);
|
|
67125
|
+
const overrides = Object.fromEntries(
|
|
67126
|
+
listed.map((item3) => [item3.artifact, false])
|
|
67127
|
+
);
|
|
67128
|
+
for (const key2 of [...refs3, ...makePublic]) overrides[key2] = true;
|
|
67129
|
+
const items = resolveSelection(listed, overrides);
|
|
67130
|
+
const known = new Map(items.map((item3) => [item3.artifact, item3]));
|
|
67131
|
+
for (const key2 of [...refs3, ...makePublic]) {
|
|
67132
|
+
const item3 = known.get(key2);
|
|
67133
|
+
if (!item3?.selectable)
|
|
67134
|
+
throw new CloudRefused(400, `${key2} is not a reference ${rootKey} can publish`);
|
|
67135
|
+
if (makePublic.includes(key2) !== (item3.state === "private"))
|
|
67136
|
+
throw new CloudRefused(
|
|
67137
|
+
400,
|
|
67138
|
+
item3.state === "private" ? `${key2} is private: list it in makePublic` : `${key2} is not private: list it in refs`
|
|
67139
|
+
);
|
|
67140
|
+
}
|
|
67141
|
+
const results = [];
|
|
67142
|
+
let stopped = false;
|
|
67143
|
+
for (const item3 of items.filter((each) => each.checked)) {
|
|
67144
|
+
const action = item3.state === "private" ? "make-public" : item3.state === "stale" ? "update" : "publish";
|
|
67145
|
+
if (stopped) {
|
|
67146
|
+
results.push({ artifact: item3.artifact, action, status: "not_attempted" });
|
|
67147
|
+
continue;
|
|
67148
|
+
}
|
|
67149
|
+
const target = artifactKeyOf(item3.artifact);
|
|
67150
|
+
try {
|
|
67151
|
+
await serialized(item3.artifact, async () => {
|
|
67152
|
+
if (action === "make-public") {
|
|
67153
|
+
await setVisibility(target, "public");
|
|
67154
|
+
if (!item3.changed) return;
|
|
67155
|
+
}
|
|
67156
|
+
const result = await publish(target, action === "publish" ? visibility : void 0, {
|
|
67157
|
+
skipUnchanged: true
|
|
67158
|
+
});
|
|
67159
|
+
if (result.status !== 200)
|
|
67160
|
+
throw new CloudRefused(
|
|
67161
|
+
409,
|
|
67162
|
+
(result.body.reasons ?? []).join("; ") || "not ready to publish"
|
|
67163
|
+
);
|
|
67164
|
+
updateArtifactConfig(configFile, item3.artifact, { autoPublish: null });
|
|
67165
|
+
});
|
|
67166
|
+
results.push({ artifact: item3.artifact, action, status: "published" });
|
|
67167
|
+
} catch (err) {
|
|
67168
|
+
if (err instanceof SignedOut) throw err;
|
|
67169
|
+
const httpStatus = err instanceof CloudRefused ? err.status : void 0;
|
|
67170
|
+
results.push({
|
|
67171
|
+
artifact: item3.artifact,
|
|
67172
|
+
action,
|
|
67173
|
+
status: httpStatus !== void 0 && httpStatus < 500 ? "failed" : "unknown",
|
|
67174
|
+
error: {
|
|
67175
|
+
error: err.message.replace(/^cloud refused \(\d+\): /, ""),
|
|
67176
|
+
...err instanceof CloudRefused ? err.details : {},
|
|
67177
|
+
...httpStatus === void 0 ? {} : { httpStatus }
|
|
67178
|
+
}
|
|
67179
|
+
});
|
|
67180
|
+
stopped = true;
|
|
67181
|
+
}
|
|
67182
|
+
}
|
|
67183
|
+
return { status: stopped ? "partial" : "published", results };
|
|
67184
|
+
};
|
|
66843
67185
|
const route = async (req, res, match) => {
|
|
66844
67186
|
const [, action, first, second2] = match;
|
|
66845
67187
|
const method = req.method ?? "GET";
|
|
@@ -66877,9 +67219,7 @@ function createCloudRoutes(options2) {
|
|
|
66877
67219
|
if (action === "artifacts" && method === "GET" && !first) {
|
|
66878
67220
|
const query2 = new URL(req.url ?? "/", "http://localhost").searchParams;
|
|
66879
67221
|
query2.delete("key");
|
|
66880
|
-
const listed = await (await expectOk(
|
|
66881
|
-
await cloudFetch("GET", `/api/artifacts${query2.size ? `?${query2}` : ""}`)
|
|
66882
|
-
)).json();
|
|
67222
|
+
const listed = await (await expectOk(await cloudFetch("GET", `/api/artifacts${query2.size ? `?${query2}` : ""}`))).json();
|
|
66883
67223
|
adoptCloudVisibility(listed.artifacts);
|
|
66884
67224
|
sendJson(res, 200, listed);
|
|
66885
67225
|
return;
|
|
@@ -66901,12 +67241,38 @@ function createCloudRoutes(options2) {
|
|
|
66901
67241
|
if (published.status === 200) updateArtifactConfig(configFile, key2, { autoPublish: null });
|
|
66902
67242
|
return published;
|
|
66903
67243
|
});
|
|
66904
|
-
|
|
66905
|
-
|
|
66906
|
-
|
|
66907
|
-
|
|
66908
|
-
|
|
66909
|
-
);
|
|
67244
|
+
sendJson(res, result.status, result.body);
|
|
67245
|
+
return;
|
|
67246
|
+
}
|
|
67247
|
+
if (action === "refs" && ref && method === "GET") {
|
|
67248
|
+
const query2 = new URL(req.url ?? "/", "http://hub").searchParams;
|
|
67249
|
+
const requested = query2.get("visibility");
|
|
67250
|
+
if (requested !== null && !isVisibility(requested))
|
|
67251
|
+
throw new CloudRefused(400, 'visibility must be "public" or "private"');
|
|
67252
|
+
const visibility = requested ?? publishState(artifactEntry(`${ref.type}/${ref.id}`)).visibility;
|
|
67253
|
+
sendJson(res, 200, {
|
|
67254
|
+
visibility,
|
|
67255
|
+
items: await cascadeOf(ref, visibility),
|
|
67256
|
+
...query2.get("referrers") === "0" ? {} : await referrersOf2(ref)
|
|
67257
|
+
});
|
|
67258
|
+
return;
|
|
67259
|
+
}
|
|
67260
|
+
if (action === "publish-referrers" && ref && method === "POST") {
|
|
67261
|
+
const body = await readJsonBody(req);
|
|
67262
|
+
const list2 = (value) => Array.isArray(value) ? value.filter((each) => typeof each === "string") : [];
|
|
67263
|
+
sendJson(res, 200, await publishReferrers(ref, list2(body?.publish), list2(body?.makePublic)));
|
|
67264
|
+
return;
|
|
67265
|
+
}
|
|
67266
|
+
if (action === "publish-refs" && ref && method === "POST") {
|
|
67267
|
+
const body = await readJsonBody(req);
|
|
67268
|
+
if (body?.visibility !== void 0 && !isVisibility(body.visibility))
|
|
67269
|
+
throw new CloudRefused(400, 'visibility must be "public" or "private"');
|
|
67270
|
+
const list2 = (value) => Array.isArray(value) && value.every((each) => typeof each === "string") ? value : null;
|
|
67271
|
+
const refs3 = list2(body?.refs ?? []);
|
|
67272
|
+
const makePublic = list2(body?.makePublic ?? []);
|
|
67273
|
+
if (!refs3 || !makePublic)
|
|
67274
|
+
throw new CloudRefused(400, "refs and makePublic must be lists of <type>/<id>");
|
|
67275
|
+
sendJson(res, 200, await publishRefs(ref, refs3, makePublic, body?.visibility));
|
|
66910
67276
|
return;
|
|
66911
67277
|
}
|
|
66912
67278
|
if (action === "sync" && ref && method === "GET") {
|
|
@@ -67040,6 +67406,22 @@ function createCloudRoutes(options2) {
|
|
|
67040
67406
|
}
|
|
67041
67407
|
return snapshot2(key2);
|
|
67042
67408
|
},
|
|
67409
|
+
async cascade(key2, visibility) {
|
|
67410
|
+
const ref = artifactKeyOf(key2);
|
|
67411
|
+
if (!ref) throw new CloudRefused(404, "artifact not found");
|
|
67412
|
+
const shown = visibility ?? publishState(artifactEntry(key2)).visibility;
|
|
67413
|
+
return { visibility: shown, items: await cascadeOf(ref, shown), ...await referrersOf2(ref) };
|
|
67414
|
+
},
|
|
67415
|
+
publishRefsNow(key2, refs3, makePublic, visibility) {
|
|
67416
|
+
const ref = artifactKeyOf(key2);
|
|
67417
|
+
if (!ref) throw new CloudRefused(404, "artifact not found");
|
|
67418
|
+
return publishRefs(ref, refs3, makePublic, visibility);
|
|
67419
|
+
},
|
|
67420
|
+
publishReferrersNow(key2, publishKeys, makePublic) {
|
|
67421
|
+
const ref = artifactKeyOf(key2);
|
|
67422
|
+
if (!ref) throw new CloudRefused(404, "artifact not found");
|
|
67423
|
+
return publishReferrers(ref, publishKeys, makePublic);
|
|
67424
|
+
},
|
|
67043
67425
|
autoPublishEnabled: () => autoPublishState().enabled,
|
|
67044
67426
|
token: () => readCredentials(credentialsFile2, origin)?.token ?? null,
|
|
67045
67427
|
async handle(req, res, match) {
|
|
@@ -67063,7 +67445,7 @@ function createCloudRoutes(options2) {
|
|
|
67063
67445
|
|
|
67064
67446
|
// src/server/comment-names.ts
|
|
67065
67447
|
var import_node_child_process2 = require("node:child_process");
|
|
67066
|
-
var
|
|
67448
|
+
var import_node_fs23 = __toESM(require("node:fs"), 1);
|
|
67067
67449
|
|
|
67068
67450
|
// src/server/agent.ts
|
|
67069
67451
|
var NAMES = {
|
|
@@ -67156,7 +67538,7 @@ function commentNames({ agentFile, projectDir, cloud }) {
|
|
|
67156
67538
|
agent: () => {
|
|
67157
67539
|
try {
|
|
67158
67540
|
return detectAgent(
|
|
67159
|
-
JSON.parse(
|
|
67541
|
+
JSON.parse(import_node_fs23.default.readFileSync(agentFile, "utf8"))
|
|
67160
67542
|
);
|
|
67161
67543
|
} catch {
|
|
67162
67544
|
return void 0;
|
|
@@ -67236,28 +67618,28 @@ function createDirectRelay(options2) {
|
|
|
67236
67618
|
}
|
|
67237
67619
|
|
|
67238
67620
|
// src/server/document.ts
|
|
67239
|
-
var
|
|
67240
|
-
var
|
|
67621
|
+
var import_node_fs25 = __toESM(require("node:fs"), 1);
|
|
67622
|
+
var import_node_path21 = __toESM(require("node:path"), 1);
|
|
67241
67623
|
|
|
67242
67624
|
// src/server/html.ts
|
|
67243
|
-
var
|
|
67244
|
-
var
|
|
67625
|
+
var import_node_fs24 = __toESM(require("node:fs"), 1);
|
|
67626
|
+
var import_node_path20 = __toESM(require("node:path"), 1);
|
|
67245
67627
|
var TITLE = /<title[^>]*>([\s\S]*?)<\/title>/i;
|
|
67246
67628
|
function latestMtime(dir) {
|
|
67247
67629
|
let latest2 = 0;
|
|
67248
67630
|
let entries2;
|
|
67249
67631
|
try {
|
|
67250
|
-
entries2 =
|
|
67632
|
+
entries2 = import_node_fs24.default.readdirSync(dir, { withFileTypes: true });
|
|
67251
67633
|
} catch {
|
|
67252
67634
|
return latest2;
|
|
67253
67635
|
}
|
|
67254
67636
|
for (const entry of entries2) {
|
|
67255
67637
|
if (entry.name.startsWith(".")) continue;
|
|
67256
|
-
const full =
|
|
67638
|
+
const full = import_node_path20.default.join(dir, entry.name);
|
|
67257
67639
|
try {
|
|
67258
67640
|
latest2 = Math.max(
|
|
67259
67641
|
latest2,
|
|
67260
|
-
entry.isDirectory() ? latestMtime(full) :
|
|
67642
|
+
entry.isDirectory() ? latestMtime(full) : import_node_fs24.default.statSync(full).mtimeMs
|
|
67261
67643
|
);
|
|
67262
67644
|
} catch {
|
|
67263
67645
|
continue;
|
|
@@ -67268,7 +67650,7 @@ function latestMtime(dir) {
|
|
|
67268
67650
|
function readHtml(dir, id3) {
|
|
67269
67651
|
let source;
|
|
67270
67652
|
try {
|
|
67271
|
-
source =
|
|
67653
|
+
source = import_node_fs24.default.readFileSync(import_node_path20.default.join(dir, ENTRY_FILE.html), "utf8");
|
|
67272
67654
|
} catch {
|
|
67273
67655
|
return { title: id3, warnings: ["index.html not found"], version: latestMtime(dir) };
|
|
67274
67656
|
}
|
|
@@ -67281,7 +67663,7 @@ var FIRST_HEADING = /<h[1-6]\b[^>]*>([\s\S]*?)<\/h[1-6]>/i;
|
|
|
67281
67663
|
function readDocument(dir, id3) {
|
|
67282
67664
|
let source;
|
|
67283
67665
|
try {
|
|
67284
|
-
source =
|
|
67666
|
+
source = import_node_fs25.default.readFileSync(import_node_path21.default.join(dir, ENTRY_FILE.document), "utf8");
|
|
67285
67667
|
} catch {
|
|
67286
67668
|
return { title: id3, warnings: ["doc.xml not found"], version: latestMtime(dir) };
|
|
67287
67669
|
}
|
|
@@ -67290,17 +67672,17 @@ function readDocument(dir, id3) {
|
|
|
67290
67672
|
}
|
|
67291
67673
|
|
|
67292
67674
|
// src/server/documents.ts
|
|
67293
|
-
var
|
|
67294
|
-
var
|
|
67675
|
+
var import_node_fs28 = __toESM(require("node:fs"), 1);
|
|
67676
|
+
var import_node_path25 = __toESM(require("node:path"), 1);
|
|
67295
67677
|
|
|
67296
67678
|
// src/server/change-cursors.ts
|
|
67297
|
-
var
|
|
67298
|
-
var
|
|
67299
|
-
var cursorsFile2 = (stateDir, id3) =>
|
|
67679
|
+
var import_node_fs26 = __toESM(require("node:fs"), 1);
|
|
67680
|
+
var import_node_path22 = __toESM(require("node:path"), 1);
|
|
67681
|
+
var cursorsFile2 = (stateDir, id3) => import_node_path22.default.join(stateDir, "document", id3, "change-cursors.json");
|
|
67300
67682
|
var isOpId = (value) => typeof value === "object" && value !== null && typeof value.peer === "string" && Number.isInteger(value.counter);
|
|
67301
67683
|
function read2(file) {
|
|
67302
67684
|
try {
|
|
67303
|
-
const value = JSON.parse(
|
|
67685
|
+
const value = JSON.parse(import_node_fs26.default.readFileSync(file, "utf8"));
|
|
67304
67686
|
if (typeof value !== "object" || value === null || Array.isArray(value)) return {};
|
|
67305
67687
|
return Object.fromEntries(
|
|
67306
67688
|
Object.entries(value).filter(
|
|
@@ -67322,8 +67704,8 @@ function createChangeCursors(stateDir) {
|
|
|
67322
67704
|
}
|
|
67323
67705
|
|
|
67324
67706
|
// src/server/document-asks.ts
|
|
67325
|
-
var
|
|
67326
|
-
var
|
|
67707
|
+
var import_node_fs27 = __toESM(require("node:fs"), 1);
|
|
67708
|
+
var import_node_path23 = __toESM(require("node:path"), 1);
|
|
67327
67709
|
var blockOf = (asks, ask) => asks.find((a5) => a5.id === ask)?.blockId ?? "*";
|
|
67328
67710
|
function humanAskOp(asks, threads2, op3) {
|
|
67329
67711
|
if (op3.op !== "create") {
|
|
@@ -67368,8 +67750,8 @@ function askListing(asks, threads2) {
|
|
|
67368
67750
|
};
|
|
67369
67751
|
}
|
|
67370
67752
|
function writeAsksFile(stateDir, id3, asks, threads2) {
|
|
67371
|
-
const file =
|
|
67372
|
-
if (!asks.length && !
|
|
67753
|
+
const file = import_node_path23.default.join(stateDir, "document", id3, "asks.json");
|
|
67754
|
+
if (!asks.length && !import_node_fs27.default.existsSync(file)) return;
|
|
67373
67755
|
const latest2 = latestSubmission(threads2);
|
|
67374
67756
|
writeJsonAtomic(file, {
|
|
67375
67757
|
latest: latest2 ? { id: latest2.id, at: latest2.at, withdrawn: latest2.withdrawn } : null
|
|
@@ -68730,19 +69112,19 @@ var ElementDOMSlot = class _ElementDOMSlot extends DOMSlot {
|
|
|
68730
69112
|
}
|
|
68731
69113
|
};
|
|
68732
69114
|
function indexPath(root, child) {
|
|
68733
|
-
const
|
|
69115
|
+
const path45 = [];
|
|
68734
69116
|
let node = child;
|
|
68735
69117
|
for (; node !== root && node !== null; node = node.parentNode) {
|
|
68736
69118
|
let i7 = 0;
|
|
68737
69119
|
for (let sibling = node.previousSibling; sibling !== null; sibling = sibling.previousSibling) {
|
|
68738
69120
|
i7++;
|
|
68739
69121
|
}
|
|
68740
|
-
|
|
69122
|
+
path45.push(i7);
|
|
68741
69123
|
}
|
|
68742
69124
|
if (!(node === root)) {
|
|
68743
69125
|
formatDevErrorMessage(`indexPath: root is not a parent of child`);
|
|
68744
69126
|
}
|
|
68745
|
-
return
|
|
69127
|
+
return path45.reverse();
|
|
68746
69128
|
}
|
|
68747
69129
|
var TEXT_MUTATION_VARIANCE = 100;
|
|
68748
69130
|
var isProcessingMutations = false;
|
|
@@ -69631,8 +70013,8 @@ function rawValue() {
|
|
|
69631
70013
|
);
|
|
69632
70014
|
}
|
|
69633
70015
|
// @__NO_SIDE_EFFECTS__
|
|
69634
|
-
function arrayValue(
|
|
69635
|
-
undeclared("arrayValue",
|
|
70016
|
+
function arrayValue(item3) {
|
|
70017
|
+
undeclared("arrayValue", item3);
|
|
69636
70018
|
return makeSchema(
|
|
69637
70019
|
(value) => {
|
|
69638
70020
|
if (!Array.isArray(value)) {
|
|
@@ -69640,12 +70022,12 @@ function arrayValue(item2) {
|
|
|
69640
70022
|
}
|
|
69641
70023
|
const result = new Array(value.length);
|
|
69642
70024
|
for (let i7 = 0; i7 < value.length; i7++) {
|
|
69643
|
-
result[i7] =
|
|
70025
|
+
result[i7] = item3(value[i7]);
|
|
69644
70026
|
}
|
|
69645
70027
|
return result;
|
|
69646
70028
|
},
|
|
69647
70029
|
{
|
|
69648
|
-
item:
|
|
70030
|
+
item: item3,
|
|
69649
70031
|
kind: "array"
|
|
69650
70032
|
},
|
|
69651
70033
|
void 0,
|
|
@@ -69661,7 +70043,7 @@ function arrayValue(item2) {
|
|
|
69661
70043
|
return false;
|
|
69662
70044
|
}
|
|
69663
70045
|
for (let i7 = 0; i7 < a5.length; i7++) {
|
|
69664
|
-
if (!isSchemaEqual(
|
|
70046
|
+
if (!isSchemaEqual(item3, a5[i7], b6[i7])) {
|
|
69665
70047
|
return false;
|
|
69666
70048
|
}
|
|
69667
70049
|
}
|
|
@@ -69697,10 +70079,10 @@ function arrayValue(item2) {
|
|
|
69697
70079
|
);
|
|
69698
70080
|
}
|
|
69699
70081
|
// @__NO_SIDE_EFFECTS__
|
|
69700
|
-
function arraySetValue(
|
|
69701
|
-
undeclared("arraySetValue",
|
|
70082
|
+
function arraySetValue(item3) {
|
|
70083
|
+
undeclared("arraySetValue", item3);
|
|
69702
70084
|
{
|
|
69703
|
-
if (!(typeof
|
|
70085
|
+
if (!(typeof item3.defaultValue === "string")) {
|
|
69704
70086
|
formatDevErrorMessage(`arraySetValue: the item schema must produce strings`);
|
|
69705
70087
|
}
|
|
69706
70088
|
}
|
|
@@ -69708,14 +70090,14 @@ function arraySetValue(item2) {
|
|
|
69708
70090
|
if (!Array.isArray(value)) {
|
|
69709
70091
|
return Object.freeze([]);
|
|
69710
70092
|
}
|
|
69711
|
-
if (Object.isFrozen(value) && $isCanonicalSet(
|
|
70093
|
+
if (Object.isFrozen(value) && $isCanonicalSet(item3, value)) {
|
|
69712
70094
|
return value;
|
|
69713
70095
|
}
|
|
69714
70096
|
const members = [];
|
|
69715
70097
|
for (let i7 = 0; i7 < value.length; i7++) {
|
|
69716
70098
|
const member = value[i7];
|
|
69717
|
-
if (member !== void 0 && $acceptsValue(
|
|
69718
|
-
members.push(
|
|
70099
|
+
if (member !== void 0 && $acceptsValue(item3, member)) {
|
|
70100
|
+
members.push(item3(member));
|
|
69719
70101
|
}
|
|
69720
70102
|
}
|
|
69721
70103
|
members.sort();
|
|
@@ -69727,14 +70109,14 @@ function arraySetValue(item2) {
|
|
|
69727
70109
|
}
|
|
69728
70110
|
return Object.freeze(result);
|
|
69729
70111
|
}, {
|
|
69730
|
-
item:
|
|
70112
|
+
item: item3,
|
|
69731
70113
|
kind: "set"
|
|
69732
70114
|
}, void 0, isArraySetEqual, (value) => Array.isArray(value));
|
|
69733
70115
|
}
|
|
69734
|
-
function $isCanonicalSet(
|
|
70116
|
+
function $isCanonicalSet(item3, value) {
|
|
69735
70117
|
for (let i7 = 0; i7 < value.length; i7++) {
|
|
69736
70118
|
const member = value[i7];
|
|
69737
|
-
if (typeof member !== "string" || i7 > 0 && !(value[i7 - 1] < member) || !$acceptsValue(
|
|
70119
|
+
if (typeof member !== "string" || i7 > 0 && !(value[i7 - 1] < member) || !$acceptsValue(item3, member) || item3(member) !== member) {
|
|
69738
70120
|
return false;
|
|
69739
70121
|
}
|
|
69740
70122
|
}
|
|
@@ -72947,8 +73329,8 @@ function mergingChildNotInline(klass, children2) {
|
|
|
72947
73329
|
if (entry === "inline") {
|
|
72948
73330
|
continue;
|
|
72949
73331
|
}
|
|
72950
|
-
const
|
|
72951
|
-
const ok =
|
|
73332
|
+
const item3 = declaredChildren(entry);
|
|
73333
|
+
const ok = item3 === "inline" || Array.isArray(item3) && item3.includes("inline") && item3.every((e5) => e5 === "inline" || e5 === klass || klass.prototype instanceof e5);
|
|
72952
73334
|
if (!ok) {
|
|
72953
73335
|
return entry;
|
|
72954
73336
|
}
|
|
@@ -74016,9 +74398,9 @@ function validateNodeStructure(klass) {
|
|
|
74016
74398
|
formatDevErrorMessage(`${name}: mergeAdjacent.by names the derived NodeState ${invalid.entry}`);
|
|
74017
74399
|
}
|
|
74018
74400
|
}
|
|
74019
|
-
const
|
|
74020
|
-
if (!(
|
|
74021
|
-
formatDevErrorMessage(`${name}: a merging class that lists child classes must list classes that hold inline content (${
|
|
74401
|
+
const item3 = mergingChildNotInline(klass, declared.children);
|
|
74402
|
+
if (!(item3 === null)) {
|
|
74403
|
+
formatDevErrorMessage(`${name}: a merging class that lists child classes must list classes that hold inline content (${item3 === null ? "" : item3.name} does not)`);
|
|
74022
74404
|
}
|
|
74023
74405
|
}
|
|
74024
74406
|
if (declared.inline !== void 0 && declared.declaredBy.inline === klass) {
|
|
@@ -78102,9 +78484,9 @@ function getActiveElementDeep(root) {
|
|
|
78102
78484
|
function getComposedEventTarget(event) {
|
|
78103
78485
|
const target = event.target;
|
|
78104
78486
|
if (target !== null && isHTMLElement(target) && target.shadowRoot !== null && typeof event.composedPath === "function") {
|
|
78105
|
-
const
|
|
78106
|
-
if (
|
|
78107
|
-
return
|
|
78487
|
+
const path45 = event.composedPath();
|
|
78488
|
+
if (path45.length > 0) {
|
|
78489
|
+
return path45[0];
|
|
78108
78490
|
}
|
|
78109
78491
|
}
|
|
78110
78492
|
return target;
|
|
@@ -90398,7 +90780,7 @@ var as = null;
|
|
|
90398
90780
|
function us(t7) {
|
|
90399
90781
|
as = t7;
|
|
90400
90782
|
}
|
|
90401
|
-
var
|
|
90783
|
+
var fs28 = /* @__PURE__ */ Symbol("INTERNAL_SKIP_AFTER_CLONE_FROM");
|
|
90402
90784
|
var ds = 1;
|
|
90403
90785
|
function hs() {
|
|
90404
90786
|
ds = 1;
|
|
@@ -90870,7 +91252,7 @@ function Il(t7) {
|
|
|
90870
91252
|
return ci(t7) || Fl(t7);
|
|
90871
91253
|
}
|
|
90872
91254
|
function Ll(t7, e5 = false) {
|
|
90873
|
-
const n8 = t7.constructor.clone(t7,
|
|
91255
|
+
const n8 = t7.constructor.clone(t7, fs28);
|
|
90874
91256
|
return Ds(n8, null), n8.afterCloneFrom(t7), e5 || n8.resetOnCopyNodeFrom(t7), n8;
|
|
90875
91257
|
}
|
|
90876
91258
|
function Kl(t7) {
|
|
@@ -91115,7 +91497,7 @@ function wc(t7) {
|
|
|
91115
91497
|
})(t7), Tc.set(t7, n8)), n8;
|
|
91116
91498
|
}
|
|
91117
91499
|
function Ec(t7) {
|
|
91118
|
-
const e5 = t7.constructor.clone(t7,
|
|
91500
|
+
const e5 = t7.constructor.clone(t7, fs28);
|
|
91119
91501
|
return e5.afterCloneFrom(t7), e5;
|
|
91120
91502
|
}
|
|
91121
91503
|
function Ac(t7) {
|
|
@@ -91262,7 +91644,7 @@ function Bc(t7) {
|
|
|
91262
91644
|
if (Kc(t9, "clone") || (t9.clone = (e7, n12) => {
|
|
91263
91645
|
us(e7);
|
|
91264
91646
|
const o10 = new t9();
|
|
91265
|
-
return n12 !==
|
|
91647
|
+
return n12 !== fs28 && o10.afterCloneFrom(e7), o10;
|
|
91266
91648
|
}), Kc(t9, "importJSON") || (t9.importJSON = o9 && o9.$importJSON || /* @__PURE__ */ (function(t10) {
|
|
91267
91649
|
return (e7) => {
|
|
91268
91650
|
const n12 = ga(t10);
|
|
@@ -104911,8 +105293,8 @@ function registerRovingTabIndex(container, options2 = {}) {
|
|
|
104911
105293
|
const selector = options2.itemSelector ?? DEFAULT_ROVING_SELECTOR;
|
|
104912
105294
|
const getItems = () => Array.from(container.querySelectorAll(selector));
|
|
104913
105295
|
const applyTabIndex = (items, activeIndex) => {
|
|
104914
|
-
items.forEach((
|
|
104915
|
-
|
|
105296
|
+
items.forEach((item3, i7) => {
|
|
105297
|
+
item3.tabIndex = i7 === activeIndex ? 0 : -1;
|
|
104916
105298
|
});
|
|
104917
105299
|
};
|
|
104918
105300
|
const init = () => {
|
|
@@ -104984,8 +105366,8 @@ function registerRovingTabIndex(container, options2 = {}) {
|
|
|
104984
105366
|
};
|
|
104985
105367
|
return mergeRegister2(registerEventListener2(container, "keydown", handler5), () => {
|
|
104986
105368
|
const items = getItems();
|
|
104987
|
-
items.forEach((
|
|
104988
|
-
|
|
105369
|
+
items.forEach((item3) => {
|
|
105370
|
+
item3.tabIndex = 0;
|
|
104989
105371
|
});
|
|
104990
105372
|
});
|
|
104991
105373
|
}
|
|
@@ -105000,8 +105382,8 @@ function registerFocusManager(editor, toolbar, options2 = {}) {
|
|
|
105000
105382
|
if (isHTMLElement2(target)) {
|
|
105001
105383
|
const items = toolbar.querySelectorAll(selector);
|
|
105002
105384
|
let isRovingItem = false;
|
|
105003
|
-
for (const
|
|
105004
|
-
if (
|
|
105385
|
+
for (const item3 of items) {
|
|
105386
|
+
if (item3 === target || containsComposed(item3, target)) {
|
|
105005
105387
|
isRovingItem = true;
|
|
105006
105388
|
break;
|
|
105007
105389
|
}
|
|
@@ -120238,10 +120620,10 @@ function $placeBlocks(runtime, $isTarget) {
|
|
|
120238
120620
|
}
|
|
120239
120621
|
const documentKey = $documentKey();
|
|
120240
120622
|
for (const [key2, frame] of targets) {
|
|
120241
|
-
const
|
|
120242
|
-
let id3 = derivePositionalId(documentKey,
|
|
120623
|
+
const path45 = placeOf(frame);
|
|
120624
|
+
let id3 = derivePositionalId(documentKey, path45);
|
|
120243
120625
|
for (let attempt = 1; taken.has(id3); attempt++) {
|
|
120244
|
-
id3 = derivePositionalId(documentKey, `${
|
|
120626
|
+
id3 = derivePositionalId(documentKey, `${path45}#${attempt}`);
|
|
120245
120627
|
}
|
|
120246
120628
|
taken.add(id3);
|
|
120247
120629
|
placed.set(key2, id3);
|
|
@@ -126675,8 +127057,8 @@ function $pointsAround(parent, items) {
|
|
|
126675
127057
|
if (offset <= first) {
|
|
126676
127058
|
point2.set(parentKey, offset, "element");
|
|
126677
127059
|
} else if (offset < first + items.length) {
|
|
126678
|
-
const
|
|
126679
|
-
point2.set(
|
|
127060
|
+
const item3 = items[offset - first - 1];
|
|
127061
|
+
point2.set(item3.getKey(), item3.getChildrenSize(), "element");
|
|
126680
127062
|
} else {
|
|
126681
127063
|
point2.set(parentKey, offset - items.length + 1, "element");
|
|
126682
127064
|
}
|
|
@@ -127886,20 +128268,20 @@ function $buildWordListTree(ctx, items) {
|
|
|
127886
128268
|
level: items[0].level,
|
|
127887
128269
|
list: root
|
|
127888
128270
|
}];
|
|
127889
|
-
for (const
|
|
127890
|
-
while (stack2.length > 1 && stack2[stack2.length - 1].level >
|
|
128271
|
+
for (const item3 of items) {
|
|
128272
|
+
while (stack2.length > 1 && stack2[stack2.length - 1].level > item3.level) {
|
|
127891
128273
|
stack2.pop();
|
|
127892
128274
|
}
|
|
127893
|
-
if (
|
|
127894
|
-
const sub2 = $createListNode(classifyWordListType(
|
|
128275
|
+
if (item3.level > stack2[stack2.length - 1].level) {
|
|
128276
|
+
const sub2 = $createListNode(classifyWordListType(item3.marker));
|
|
127895
128277
|
stack2[stack2.length - 1].list.append($createListItemNode().append(sub2));
|
|
127896
128278
|
stack2.push({
|
|
127897
|
-
level:
|
|
128279
|
+
level: item3.level,
|
|
127898
128280
|
list: sub2
|
|
127899
128281
|
});
|
|
127900
128282
|
}
|
|
127901
|
-
stripWordMarker(
|
|
127902
|
-
stack2[stack2.length - 1].list.append($createListItemNode().splice(0, 0, ctx.$importChildren(
|
|
128283
|
+
stripWordMarker(item3.el);
|
|
128284
|
+
stack2[stack2.length - 1].list.append($createListItemNode().splice(0, 0, ctx.$importChildren(item3.el, {
|
|
127903
128285
|
schema: InlineSchema2
|
|
127904
128286
|
})));
|
|
127905
128287
|
}
|
|
@@ -132457,7 +132839,7 @@ function Vx(e5) {
|
|
|
132457
132839
|
}
|
|
132458
132840
|
return t7;
|
|
132459
132841
|
}
|
|
132460
|
-
function
|
|
132842
|
+
function fs29(e5, t7, n8) {
|
|
132461
132843
|
for (; t7 < e5.length; ) {
|
|
132462
132844
|
let r8 = e5[t7];
|
|
132463
132845
|
if (r8 === " " || r8 === `
|
|
@@ -132476,20 +132858,20 @@ function Rp(e5, t7) {
|
|
|
132476
132858
|
}
|
|
132477
132859
|
function Xs2(e5, t7, n8, r8 = 0) {
|
|
132478
132860
|
if (r8 > Tp) throw new Error("YAML: nesting is too deep");
|
|
132479
|
-
t7 =
|
|
132861
|
+
t7 = fs29(e5, t7, false);
|
|
132480
132862
|
let o8 = e5[t7];
|
|
132481
132863
|
if (o8 === "{") {
|
|
132482
132864
|
let a5 = {};
|
|
132483
132865
|
t7++;
|
|
132484
132866
|
let i7 = true;
|
|
132485
132867
|
for (; ; ) {
|
|
132486
|
-
if (t7 =
|
|
132868
|
+
if (t7 = fs29(e5, t7, false), t7 >= e5.length) throw new Or2("YAML: unexpected end of the stream within a flow collection");
|
|
132487
132869
|
if (e5[t7] === "}") return [a5, t7 + 1];
|
|
132488
132870
|
Rp(e5[t7], i7);
|
|
132489
132871
|
let c10;
|
|
132490
|
-
[c10, t7] = Xs2(e5, t7, ":,}", r8 + 1), t7 =
|
|
132872
|
+
[c10, t7] = Xs2(e5, t7, ":,}", r8 + 1), t7 = fs29(e5, t7, false);
|
|
132491
132873
|
let l8 = null;
|
|
132492
|
-
e5[t7] === ":" && ([l8, t7] = Xs2(e5, t7 + 1, ",}", r8 + 1)), Vo3(a5, String(c10), l8), t7 =
|
|
132874
|
+
e5[t7] === ":" && ([l8, t7] = Xs2(e5, t7 + 1, ",}", r8 + 1)), Vo3(a5, String(c10), l8), t7 = fs29(e5, t7, false), i7 = e5[t7] === ",", i7 && t7++;
|
|
132493
132875
|
}
|
|
132494
132876
|
}
|
|
132495
132877
|
if (o8 === "[") {
|
|
@@ -132497,11 +132879,11 @@ function Xs2(e5, t7, n8, r8 = 0) {
|
|
|
132497
132879
|
t7++;
|
|
132498
132880
|
let i7 = true;
|
|
132499
132881
|
for (; ; ) {
|
|
132500
|
-
if (t7 =
|
|
132882
|
+
if (t7 = fs29(e5, t7, false), t7 >= e5.length) throw new Or2("YAML: unexpected end of the stream within a flow collection");
|
|
132501
132883
|
if (e5[t7] === "]") return [a5, t7 + 1];
|
|
132502
132884
|
Rp(e5[t7], i7);
|
|
132503
132885
|
let c10;
|
|
132504
|
-
[c10, t7] = Xs2(e5, t7, ",]", r8 + 1), a5.push(c10), t7 =
|
|
132886
|
+
[c10, t7] = Xs2(e5, t7, ",]", r8 + 1), a5.push(c10), t7 = fs29(e5, t7, false), i7 = e5[t7] === ",", i7 && t7++;
|
|
132505
132887
|
}
|
|
132506
132888
|
}
|
|
132507
132889
|
if (o8 === '"') {
|
|
@@ -132661,7 +133043,7 @@ function Hn3(e5) {
|
|
|
132661
133043
|
let t7 = e5.trim();
|
|
132662
133044
|
if (t7[0] === "{" || t7[0] === "[") try {
|
|
132663
133045
|
let [o8, s7] = Xs2(t7, 0, "");
|
|
132664
|
-
if (
|
|
133046
|
+
if (fs29(t7, s7, false) === t7.length) return o8;
|
|
132665
133047
|
} catch (o8) {
|
|
132666
133048
|
throw o8 instanceof Or2 ? new Error(o8.message) : o8;
|
|
132667
133049
|
}
|
|
@@ -152995,27 +153377,27 @@ var sqrtTall = function sqrtTall2(extraVinculum, hLinePad2, viewBoxHeight) {
|
|
|
152995
153377
|
};
|
|
152996
153378
|
var sqrtPath = function sqrtPath2(size, extraVinculum, viewBoxHeight) {
|
|
152997
153379
|
extraVinculum = 1e3 * extraVinculum;
|
|
152998
|
-
var
|
|
153380
|
+
var path45 = "";
|
|
152999
153381
|
switch (size) {
|
|
153000
153382
|
case "sqrtMain":
|
|
153001
|
-
|
|
153383
|
+
path45 = sqrtMain(extraVinculum, hLinePad);
|
|
153002
153384
|
break;
|
|
153003
153385
|
case "sqrtSize1":
|
|
153004
|
-
|
|
153386
|
+
path45 = sqrtSize1(extraVinculum, hLinePad);
|
|
153005
153387
|
break;
|
|
153006
153388
|
case "sqrtSize2":
|
|
153007
|
-
|
|
153389
|
+
path45 = sqrtSize2(extraVinculum, hLinePad);
|
|
153008
153390
|
break;
|
|
153009
153391
|
case "sqrtSize3":
|
|
153010
|
-
|
|
153392
|
+
path45 = sqrtSize3(extraVinculum, hLinePad);
|
|
153011
153393
|
break;
|
|
153012
153394
|
case "sqrtSize4":
|
|
153013
|
-
|
|
153395
|
+
path45 = sqrtSize4(extraVinculum, hLinePad);
|
|
153014
153396
|
break;
|
|
153015
153397
|
case "sqrtTall":
|
|
153016
|
-
|
|
153398
|
+
path45 = sqrtTall(extraVinculum, hLinePad, viewBoxHeight);
|
|
153017
153399
|
}
|
|
153018
|
-
return
|
|
153400
|
+
return path45;
|
|
153019
153401
|
};
|
|
153020
153402
|
var innerPath = function innerPath2(name, height) {
|
|
153021
153403
|
switch (name) {
|
|
@@ -153041,7 +153423,7 @@ var innerPath = function innerPath2(name, height) {
|
|
|
153041
153423
|
return "";
|
|
153042
153424
|
}
|
|
153043
153425
|
};
|
|
153044
|
-
var
|
|
153426
|
+
var path25 = {
|
|
153045
153427
|
// The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main
|
|
153046
153428
|
doubleleftarrow: "M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",
|
|
153047
153429
|
// doublerightarrow is from glyph U+21D2 in font KaTeX Main
|
|
@@ -153570,7 +153952,7 @@ var PathNode = class {
|
|
|
153570
153952
|
if (this.alternate) {
|
|
153571
153953
|
node.setAttribute("d", this.alternate);
|
|
153572
153954
|
} else {
|
|
153573
|
-
node.setAttribute("d",
|
|
153955
|
+
node.setAttribute("d", path25[this.pathName]);
|
|
153574
153956
|
}
|
|
153575
153957
|
return node;
|
|
153576
153958
|
}
|
|
@@ -153578,7 +153960,7 @@ var PathNode = class {
|
|
|
153578
153960
|
if (this.alternate) {
|
|
153579
153961
|
return '<path d="' + escape4(this.alternate) + '"/>';
|
|
153580
153962
|
} else {
|
|
153581
|
-
return '<path d="' + escape4(
|
|
153963
|
+
return '<path d="' + escape4(path25[this.pathName]) + '"/>';
|
|
153582
153964
|
}
|
|
153583
153965
|
}
|
|
153584
153966
|
};
|
|
@@ -157229,8 +157611,8 @@ var svgData = {
|
|
|
157229
157611
|
};
|
|
157230
157612
|
var staticSvg = function staticSvg2(value, options2) {
|
|
157231
157613
|
var _svgData$value = svgData[value], pathName = _svgData$value[0], width = _svgData$value[1], height = _svgData$value[2];
|
|
157232
|
-
var
|
|
157233
|
-
var svgNode = new SvgNode([
|
|
157614
|
+
var path45 = new PathNode(pathName);
|
|
157615
|
+
var svgNode = new SvgNode([path45], {
|
|
157234
157616
|
"width": makeEm(width),
|
|
157235
157617
|
"height": makeEm(height),
|
|
157236
157618
|
// Override CSS rule `.katex svg { width: 100% }`
|
|
@@ -158373,8 +158755,8 @@ var stretchySvg = function stretchySvg2(group, options2) {
|
|
|
158373
158755
|
pathName = "tilde" + imgIndex;
|
|
158374
158756
|
}
|
|
158375
158757
|
}
|
|
158376
|
-
var
|
|
158377
|
-
var svgNode = new SvgNode([
|
|
158758
|
+
var path45 = new PathNode(pathName);
|
|
158759
|
+
var svgNode = new SvgNode([path45], {
|
|
158378
158760
|
"width": "100%",
|
|
158379
158761
|
"height": makeEm(_height),
|
|
158380
158762
|
"viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight,
|
|
@@ -159588,8 +159970,8 @@ var makeGlyphSpan = function makeGlyphSpan2(symbol, font, mode, options2) {
|
|
|
159588
159970
|
};
|
|
159589
159971
|
var makeInner = function makeInner2(ch4, height, options2) {
|
|
159590
159972
|
var width = fontMetricsData["Size4-Regular"][ch4.charCodeAt(0)] ? fontMetricsData["Size4-Regular"][ch4.charCodeAt(0)][4] : fontMetricsData["Size1-Regular"][ch4.charCodeAt(0)][4];
|
|
159591
|
-
var
|
|
159592
|
-
var svgNode = new SvgNode([
|
|
159973
|
+
var path45 = new PathNode("inner", innerPath(ch4, Math.round(1e3 * height)));
|
|
159974
|
+
var svgNode = new SvgNode([path45], {
|
|
159593
159975
|
"width": makeEm(width),
|
|
159594
159976
|
"height": makeEm(height),
|
|
159595
159977
|
// Override CSS rule `.katex svg { width: 100% }`
|
|
@@ -159758,10 +160140,10 @@ var makeStackedDelim = function makeStackedDelim2(delim, heightTotal, center, op
|
|
|
159758
160140
|
var midHeight = realHeightTotal - topHeightTotal - bottomHeightTotal;
|
|
159759
160141
|
var viewBoxHeight = Math.round(realHeightTotal * 1e3);
|
|
159760
160142
|
var pathStr = tallDelim(svgLabel, Math.round(midHeight * 1e3));
|
|
159761
|
-
var
|
|
160143
|
+
var path45 = new PathNode(svgLabel, pathStr);
|
|
159762
160144
|
var width = makeEm(viewBoxWidth / 1e3);
|
|
159763
160145
|
var height = makeEm(viewBoxHeight / 1e3);
|
|
159764
|
-
var svg = new SvgNode([
|
|
160146
|
+
var svg = new SvgNode([path45], {
|
|
159765
160147
|
"width": width,
|
|
159766
160148
|
"height": height,
|
|
159767
160149
|
"viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight
|
|
@@ -159802,8 +160184,8 @@ var makeStackedDelim = function makeStackedDelim2(delim, heightTotal, center, op
|
|
|
159802
160184
|
var vbPad = 80;
|
|
159803
160185
|
var emPad = 0.08;
|
|
159804
160186
|
var sqrtSvg = function sqrtSvg2(sqrtName, height, viewBoxHeight, extraVinculum, options2) {
|
|
159805
|
-
var
|
|
159806
|
-
var pathNode = new PathNode(sqrtName,
|
|
160187
|
+
var path45 = sqrtPath(sqrtName, extraVinculum, viewBoxHeight);
|
|
160188
|
+
var pathNode = new PathNode(sqrtName, path45);
|
|
159807
160189
|
var svg = new SvgNode([pathNode], {
|
|
159808
160190
|
// Note: 1000:1 ratio of viewBox to document em width.
|
|
159809
160191
|
"width": "400em",
|
|
@@ -160302,8 +160684,8 @@ var htmlBuilder$7 = (group, options2) => {
|
|
|
160302
160684
|
var angleHeight = inner2.height + inner2.depth + lineWeight + clearance;
|
|
160303
160685
|
inner2.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight);
|
|
160304
160686
|
var viewBoxHeight = Math.floor(1e3 * angleHeight * scale);
|
|
160305
|
-
var
|
|
160306
|
-
var svgNode = new SvgNode([new PathNode("phase",
|
|
160687
|
+
var path45 = phasePath(viewBoxHeight);
|
|
160688
|
+
var svgNode = new SvgNode([new PathNode("phase", path45)], {
|
|
160307
160689
|
"width": "400em",
|
|
160308
160690
|
"height": makeEm(viewBoxHeight / 1e3),
|
|
160309
160691
|
"viewBox": "0 0 400000 " + viewBoxHeight,
|
|
@@ -162251,13 +162633,13 @@ defineFunction({
|
|
|
162251
162633
|
}
|
|
162252
162634
|
data.push(current);
|
|
162253
162635
|
for (var _i6 = 0; _i6 < data.length; _i6++) {
|
|
162254
|
-
var
|
|
162255
|
-
var firstEquals =
|
|
162636
|
+
var item3 = data[_i6];
|
|
162637
|
+
var firstEquals = item3.indexOf("=");
|
|
162256
162638
|
if (firstEquals < 0) {
|
|
162257
|
-
throw new ParseError("\\htmlData key/value '" +
|
|
162639
|
+
throw new ParseError("\\htmlData key/value '" + item3 + "' missing equals sign");
|
|
162258
162640
|
}
|
|
162259
|
-
var key2 =
|
|
162260
|
-
var _value =
|
|
162641
|
+
var key2 = item3.slice(0, firstEquals);
|
|
162642
|
+
var _value = item3.slice(firstEquals + 1);
|
|
162261
162643
|
attributes["data-" + key2.trim()] = _value;
|
|
162262
162644
|
}
|
|
162263
162645
|
trustContext = {
|
|
@@ -166827,7 +167209,7 @@ function renderProblems(state2) {
|
|
|
166827
167209
|
|
|
166828
167210
|
// src/server/document-session.ts
|
|
166829
167211
|
var import_promises = __toESM(require("node:fs/promises"), 1);
|
|
166830
|
-
var
|
|
167212
|
+
var import_node_path24 = __toESM(require("node:path"), 1);
|
|
166831
167213
|
|
|
166832
167214
|
// ../../node_modules/.pnpm/loro-crdt@1.16.4/node_modules/loro-crdt/base64/index.js
|
|
166833
167215
|
function _loadWasmModule(sync, filepath, src, imports2) {
|
|
@@ -166843,10 +167225,10 @@ function _loadWasmModule(sync, filepath, src, imports2) {
|
|
|
166843
167225
|
var buf = null;
|
|
166844
167226
|
var isNode2 = typeof process !== "undefined" && process.versions != null && process.versions.node != null;
|
|
166845
167227
|
if (filepath && isNode2) {
|
|
166846
|
-
var
|
|
166847
|
-
var
|
|
167228
|
+
var fs50 = null;
|
|
167229
|
+
var path45 = null;
|
|
166848
167230
|
return new Promise((resolve, reject) => {
|
|
166849
|
-
|
|
167231
|
+
fs50.readFile(path45.resolve(__dirname, filepath), (error, buffer) => {
|
|
166850
167232
|
if (error != null) {
|
|
166851
167233
|
reject(error);
|
|
166852
167234
|
} else {
|
|
@@ -168149,10 +168531,10 @@ var LoroDoc = class _LoroDoc {
|
|
|
168149
168531
|
* @param {string} path
|
|
168150
168532
|
* @returns {Value | Container | undefined}
|
|
168151
168533
|
*/
|
|
168152
|
-
getByPath(
|
|
168534
|
+
getByPath(path45) {
|
|
168153
168535
|
try {
|
|
168154
168536
|
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
168155
|
-
const ptr0 = passStringToWasm0(
|
|
168537
|
+
const ptr0 = passStringToWasm0(path45, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
|
168156
168538
|
const len0 = WASM_VECTOR_LEN;
|
|
168157
168539
|
wasm.lorodoc_getByPath(retptr, this.__wbg_ptr, ptr0, len0);
|
|
168158
168540
|
var r02 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
@@ -175247,9 +175629,9 @@ LoroDoc.prototype.toJsonWithReplacer = function(replacer) {
|
|
|
175247
175629
|
};
|
|
175248
175630
|
const run3 = (layer2) => {
|
|
175249
175631
|
if (Array.isArray(layer2)) {
|
|
175250
|
-
return layer2.map((
|
|
175251
|
-
return m11(index,
|
|
175252
|
-
}).filter((
|
|
175632
|
+
return layer2.map((item3, index) => {
|
|
175633
|
+
return m11(index, item3);
|
|
175634
|
+
}).filter((item3) => item3 !== void 0);
|
|
175253
175635
|
}
|
|
175254
175636
|
const result = {};
|
|
175255
175637
|
for (const [key2, value] of Object.entries(layer2)) {
|
|
@@ -175773,16 +176155,16 @@ var Diff = class {
|
|
|
175773
176155
|
}
|
|
175774
176156
|
}
|
|
175775
176157
|
}
|
|
175776
|
-
addToPath(
|
|
175777
|
-
const last =
|
|
176158
|
+
addToPath(path45, added, removed, oldPosInc, options2) {
|
|
176159
|
+
const last = path45.lastComponent;
|
|
175778
176160
|
if (last && !options2.oneChangePerToken && last.added === added && last.removed === removed) {
|
|
175779
176161
|
return {
|
|
175780
|
-
oldPos:
|
|
176162
|
+
oldPos: path45.oldPos + oldPosInc,
|
|
175781
176163
|
lastComponent: { count: last.count + 1, added, removed, previousComponent: last.previousComponent }
|
|
175782
176164
|
};
|
|
175783
176165
|
} else {
|
|
175784
176166
|
return {
|
|
175785
|
-
oldPos:
|
|
176167
|
+
oldPos: path45.oldPos + oldPosInc,
|
|
175786
176168
|
lastComponent: { count: 1, added, removed, previousComponent: last }
|
|
175787
176169
|
};
|
|
175788
176170
|
}
|
|
@@ -176219,15 +176601,15 @@ __export(LexicalMarkdown_dev_exports, {
|
|
|
176219
176601
|
});
|
|
176220
176602
|
function indexBy(list2, callback) {
|
|
176221
176603
|
const index = {};
|
|
176222
|
-
for (const
|
|
176223
|
-
const key2 = callback(
|
|
176604
|
+
for (const item3 of list2) {
|
|
176605
|
+
const key2 = callback(item3);
|
|
176224
176606
|
if (!key2) {
|
|
176225
176607
|
continue;
|
|
176226
176608
|
}
|
|
176227
176609
|
if (index[key2]) {
|
|
176228
|
-
index[key2].push(
|
|
176610
|
+
index[key2].push(item3);
|
|
176229
176611
|
} else {
|
|
176230
|
-
index[key2] = [
|
|
176612
|
+
index[key2] = [item3];
|
|
176231
176613
|
}
|
|
176232
176614
|
}
|
|
176233
176615
|
return index;
|
|
@@ -180666,7 +181048,7 @@ async function readText2(file) {
|
|
|
180666
181048
|
}
|
|
180667
181049
|
}
|
|
180668
181050
|
async function writeAtomic(file, data) {
|
|
180669
|
-
await import_promises.default.mkdir(
|
|
181051
|
+
await import_promises.default.mkdir(import_node_path24.default.dirname(file), { recursive: true });
|
|
180670
181052
|
const tmp = `${file}.${process.pid}.tmp`;
|
|
180671
181053
|
await import_promises.default.writeFile(tmp, data);
|
|
180672
181054
|
await import_promises.default.rename(tmp, file);
|
|
@@ -180700,7 +181082,7 @@ async function createDocumentSession(options2) {
|
|
|
180700
181082
|
let lastGoodText = null;
|
|
180701
181083
|
let lastAgentText = null;
|
|
180702
181084
|
let lastFileText = await readText2(file) ?? "";
|
|
180703
|
-
const activityFile =
|
|
181085
|
+
const activityFile = import_node_path24.default.join(import_node_path24.default.dirname(snapshotFile), "agent-active");
|
|
180704
181086
|
let agentActiveAt = await lastAgentWrite(activityFile, file);
|
|
180705
181087
|
let activitySaved = Promise.resolve();
|
|
180706
181088
|
const emitStatus = () => emit({ type: "status", outcome, streaming: streaming > 0, agentActiveAt });
|
|
@@ -180925,39 +181307,45 @@ function fillRefIds(state2, lookup2) {
|
|
|
180925
181307
|
const children2 = state2.root.children.map(fill);
|
|
180926
181308
|
return { ...state2, root: { ...state2.root, children: children2 } };
|
|
180927
181309
|
}
|
|
181310
|
+
var NOUN2 = {
|
|
181311
|
+
document: "a document",
|
|
181312
|
+
artboard: "an artboard",
|
|
181313
|
+
whiteboard: "a whiteboard",
|
|
181314
|
+
html: "an html page"
|
|
181315
|
+
};
|
|
180928
181316
|
function refWarnings(refs3, lookup2) {
|
|
180929
181317
|
return refs3.flatMap((ref) => {
|
|
180930
181318
|
const at7 = `block ${ref.blockId}: `;
|
|
180931
|
-
|
|
180932
|
-
const slug = ref
|
|
180933
|
-
const id3 = lookup2.idOf(slug);
|
|
180934
|
-
if (!id3)
|
|
181319
|
+
const kind = refKind(ref);
|
|
181320
|
+
const slug = refSlug(ref);
|
|
181321
|
+
const id3 = lookup2.idOf(slug, kind);
|
|
181322
|
+
if (!id3)
|
|
181323
|
+
return [`${at7}<ref ${kind}="${slug}"> names ${NOUN2[kind]} that is not in this project`];
|
|
180935
181324
|
if (ref.to && ref.to !== id3)
|
|
180936
181325
|
return [
|
|
180937
|
-
`${at7}<ref
|
|
180938
|
-
];
|
|
180939
|
-
const canvas = lookup2.canvasOf(slug);
|
|
180940
|
-
if (!canvas) return [];
|
|
180941
|
-
if (ref.group && !canvas.groups.includes(ref.group))
|
|
180942
|
-
return [
|
|
180943
|
-
`${at7}<ref artboard="${slug}" group="${ref.group}">: the artboard has no group ${ref.group}`
|
|
180944
|
-
];
|
|
180945
|
-
if (ref.board && !canvas.boards.includes(ref.board))
|
|
180946
|
-
return [
|
|
180947
|
-
`${at7}<ref artboard="${slug}" board="${ref.board}">: the artboard has no board ${ref.board}`
|
|
181326
|
+
`${at7}<ref ${kind}="${slug}"> points at ${ref.to}, but ${slug} is now ${id3}; delete to= to point the reference at it`
|
|
180948
181327
|
];
|
|
181328
|
+
if (kind === "whiteboard") return whiteboardWarnings(ref, at7, lookup2);
|
|
181329
|
+
if (kind === "artboard") return artboardWarnings(ref, at7, lookup2);
|
|
180949
181330
|
return [];
|
|
180950
181331
|
});
|
|
180951
181332
|
}
|
|
180952
|
-
function
|
|
180953
|
-
const slug = ref.
|
|
180954
|
-
const
|
|
180955
|
-
if (!
|
|
180956
|
-
|
|
180957
|
-
if (ref.to && ref.to !== id3)
|
|
181333
|
+
function artboardWarnings(ref, at7, lookup2) {
|
|
181334
|
+
const slug = ref.artboard;
|
|
181335
|
+
const canvas = lookup2.canvasOf(slug);
|
|
181336
|
+
if (!canvas) return [];
|
|
181337
|
+
if (ref.group && !canvas.groups.includes(ref.group))
|
|
180958
181338
|
return [
|
|
180959
|
-
`${at7}<ref
|
|
181339
|
+
`${at7}<ref artboard="${slug}" group="${ref.group}">: the artboard has no group ${ref.group}`
|
|
180960
181340
|
];
|
|
181341
|
+
if (ref.board && !canvas.boards.includes(ref.board))
|
|
181342
|
+
return [
|
|
181343
|
+
`${at7}<ref artboard="${slug}" board="${ref.board}">: the artboard has no board ${ref.board}`
|
|
181344
|
+
];
|
|
181345
|
+
return [];
|
|
181346
|
+
}
|
|
181347
|
+
function whiteboardWarnings(ref, at7, lookup2) {
|
|
181348
|
+
const slug = ref.whiteboard;
|
|
180961
181349
|
const index = lookup2.framesOf(slug);
|
|
180962
181350
|
if (!index) return [];
|
|
180963
181351
|
if (ref.page) {
|
|
@@ -181011,10 +181399,14 @@ function createDocumentRegistry(options2) {
|
|
|
181011
181399
|
const before2 = JSON.parse(lastArtboards.get(id3) ?? "[]");
|
|
181012
181400
|
lastArtboards.set(id3, key2);
|
|
181013
181401
|
const all = [...before2, ...refs3];
|
|
181014
|
-
const
|
|
181015
|
-
|
|
181016
|
-
|
|
181017
|
-
|
|
181402
|
+
const keys2 = [...new Set(all.map((ref) => `${refKind(ref)}/${refSlug(ref)}`))];
|
|
181403
|
+
options2.onRefsChange?.(
|
|
181404
|
+
id3,
|
|
181405
|
+
keys2.map((key3) => {
|
|
181406
|
+
const [type, slug] = key3.split("/");
|
|
181407
|
+
return { type, id: slug };
|
|
181408
|
+
})
|
|
181409
|
+
);
|
|
181018
181410
|
};
|
|
181019
181411
|
const liveRefWarnings = (id3) => {
|
|
181020
181412
|
const session = ready.get(id3);
|
|
@@ -181022,7 +181414,7 @@ function createDocumentRegistry(options2) {
|
|
|
181022
181414
|
};
|
|
181023
181415
|
const warnings = /* @__PURE__ */ new Map();
|
|
181024
181416
|
const rechecks = /* @__PURE__ */ new Map();
|
|
181025
|
-
const docFile = (id3) =>
|
|
181417
|
+
const docFile = (id3) => import_node_path25.default.join(options2.root, "document", id3, "doc.xml");
|
|
181026
181418
|
const commentStores = /* @__PURE__ */ new Map();
|
|
181027
181419
|
const cursors = createCommentCursors(options2.stateDir);
|
|
181028
181420
|
const changeCursors = createChangeCursors(options2.stateDir);
|
|
@@ -181030,7 +181422,7 @@ function createDocumentRegistry(options2) {
|
|
|
181030
181422
|
let store = commentStores.get(id3);
|
|
181031
181423
|
if (!store) {
|
|
181032
181424
|
store = createCommentStore(
|
|
181033
|
-
|
|
181425
|
+
import_node_path25.default.join(options2.root, "document", id3, "comments.json"),
|
|
181034
181426
|
options2.names
|
|
181035
181427
|
);
|
|
181036
181428
|
commentStores.set(id3, store);
|
|
@@ -181063,10 +181455,10 @@ function createDocumentRegistry(options2) {
|
|
|
181063
181455
|
if (JSON.stringify(store.warnings()) !== before2) options2.onWarningsChange(id3);
|
|
181064
181456
|
};
|
|
181065
181457
|
const create3 = async (id3) => {
|
|
181066
|
-
if (!
|
|
181458
|
+
if (!import_node_fs28.default.existsSync(docFile(id3))) return null;
|
|
181067
181459
|
const session = await createDocumentSession({
|
|
181068
181460
|
file: docFile(id3),
|
|
181069
|
-
snapshotFile:
|
|
181461
|
+
snapshotFile: import_node_path25.default.join(options2.stateDir, "document", id3, "doc.loro"),
|
|
181070
181462
|
fillRefs: (state2) => fillRefIds(state2, refLookup),
|
|
181071
181463
|
...options2.timing,
|
|
181072
181464
|
log: options2.log
|
|
@@ -181144,7 +181536,7 @@ function createDocumentRegistry(options2) {
|
|
|
181144
181536
|
const known = sessions.has(id3);
|
|
181145
181537
|
void open2(id3).then((session) => {
|
|
181146
181538
|
if (!session || !known) return;
|
|
181147
|
-
|
|
181539
|
+
import_node_fs28.default.readFile(docFile(id3), "utf8", (err, text5) => {
|
|
181148
181540
|
if (!err) session.onFileText(text5);
|
|
181149
181541
|
});
|
|
181150
181542
|
});
|
|
@@ -181225,8 +181617,8 @@ function createDocumentRegistry(options2) {
|
|
|
181225
181617
|
}
|
|
181226
181618
|
|
|
181227
181619
|
// src/server/dynamic-blocks.ts
|
|
181228
|
-
var
|
|
181229
|
-
var
|
|
181620
|
+
var import_node_fs29 = __toESM(require("node:fs"), 1);
|
|
181621
|
+
var import_node_path26 = __toESM(require("node:path"), 1);
|
|
181230
181622
|
function dynamicUrls(xml) {
|
|
181231
181623
|
const urls = /* @__PURE__ */ new Set();
|
|
181232
181624
|
for (const match of stripOpaque(xml).matchAll(TAG)) {
|
|
@@ -181239,7 +181631,7 @@ function dynamicUrls(xml) {
|
|
|
181239
181631
|
}
|
|
181240
181632
|
var mtimeOf = (file) => {
|
|
181241
181633
|
try {
|
|
181242
|
-
return
|
|
181634
|
+
return import_node_fs29.default.statSync(file).mtimeMs;
|
|
181243
181635
|
} catch {
|
|
181244
181636
|
return -1;
|
|
181245
181637
|
}
|
|
@@ -181256,7 +181648,7 @@ function createDynamicBlocks(limits) {
|
|
|
181256
181648
|
};
|
|
181257
181649
|
const entry = (id3, dir, file) => {
|
|
181258
181650
|
const map = files(id3);
|
|
181259
|
-
const mtime = mtimeOf(
|
|
181651
|
+
const mtime = mtimeOf(import_node_path26.default.join(dir, file));
|
|
181260
181652
|
let state2 = map.get(file);
|
|
181261
181653
|
if (!state2 || state2.mtime !== mtime) {
|
|
181262
181654
|
state2 = { mtime, errors: [], ran: false };
|
|
@@ -181281,19 +181673,19 @@ function createDynamicBlocks(limits) {
|
|
|
181281
181673
|
state(id3, dir) {
|
|
181282
181674
|
let xml;
|
|
181283
181675
|
try {
|
|
181284
|
-
xml =
|
|
181676
|
+
xml = import_node_fs29.default.readFileSync(import_node_path26.default.join(dir, "doc.xml"), "utf8");
|
|
181285
181677
|
} catch {
|
|
181286
181678
|
return { warnings: [], dynamic: {} };
|
|
181287
181679
|
}
|
|
181288
181680
|
const urls = dynamicUrls(xml);
|
|
181289
181681
|
const map = files(id3);
|
|
181290
181682
|
for (const [file, state2] of map) {
|
|
181291
|
-
if (!urls.includes(file) || state2.mtime !== mtimeOf(
|
|
181683
|
+
if (!urls.includes(file) || state2.mtime !== mtimeOf(import_node_path26.default.join(dir, file))) map.delete(file);
|
|
181292
181684
|
}
|
|
181293
181685
|
const warnings = [];
|
|
181294
181686
|
const dynamic = {};
|
|
181295
181687
|
for (const url of urls) {
|
|
181296
|
-
if (!
|
|
181688
|
+
if (!import_node_fs29.default.existsSync(import_node_path26.default.join(dir, url))) warnings.push(`${url} not found`);
|
|
181297
181689
|
const state2 = map.get(url);
|
|
181298
181690
|
for (const error of state2?.errors ?? []) warnings.push(`runtime: ${url}: ${error}`);
|
|
181299
181691
|
dynamic[url] = { ran: state2?.ran ?? false };
|
|
@@ -181309,7 +181701,7 @@ var MAX_COMMENT_OP = 64 * 1024;
|
|
|
181309
181701
|
var MAX_DOCUMENT_UPDATE = 8 * 1024 * 1024;
|
|
181310
181702
|
|
|
181311
181703
|
// src/server/artifact-file.ts
|
|
181312
|
-
var
|
|
181704
|
+
var import_node_fs30 = __toESM(require("node:fs"), 1);
|
|
181313
181705
|
var RESOLVE = {
|
|
181314
181706
|
artboard: resolveBoardFile,
|
|
181315
181707
|
document: resolveDocumentAsset,
|
|
@@ -181323,8 +181715,8 @@ function readArtifactFile(dir, type, relative, uiRuntimeUrl, maxBytes = Infinity
|
|
|
181323
181715
|
if (!target) return null;
|
|
181324
181716
|
let data;
|
|
181325
181717
|
try {
|
|
181326
|
-
if (
|
|
181327
|
-
data =
|
|
181718
|
+
if (import_node_fs30.default.statSync(target).size > maxBytes) throw new RangeError("too large");
|
|
181719
|
+
data = import_node_fs30.default.readFileSync(target);
|
|
181328
181720
|
} catch (err) {
|
|
181329
181721
|
if (err instanceof RangeError) throw err;
|
|
181330
181722
|
return null;
|
|
@@ -181460,6 +181852,24 @@ async function handleRelay(ctx, key2, body, conn, contentOrigin = "") {
|
|
|
181460
181852
|
const request = typeof body === "object" && body !== null ? body : {};
|
|
181461
181853
|
if (request.op === "publication" && ctx.cloud) return ctx.cloud.publication(key2);
|
|
181462
181854
|
if (request.op === "publish" && ctx.cloud) return ctx.cloud.publishNow(key2);
|
|
181855
|
+
if (request.op === "refs" && ctx.cloud)
|
|
181856
|
+
return ctx.cloud.cascade(
|
|
181857
|
+
key2,
|
|
181858
|
+
request.visibility === "public" || request.visibility === "private" ? request.visibility : void 0
|
|
181859
|
+
);
|
|
181860
|
+
if (request.op === "publish-referrers" && ctx.cloud) {
|
|
181861
|
+
const list2 = (value) => Array.isArray(value) ? value.filter((each) => typeof each === "string") : [];
|
|
181862
|
+
return ctx.cloud.publishReferrersNow(key2, list2(request.publish), list2(request.makePublic));
|
|
181863
|
+
}
|
|
181864
|
+
if (request.op === "publish-refs" && ctx.cloud) {
|
|
181865
|
+
const list2 = (value) => Array.isArray(value) ? value.filter((each) => typeof each === "string") : [];
|
|
181866
|
+
return ctx.cloud.publishRefsNow(
|
|
181867
|
+
key2,
|
|
181868
|
+
list2(request.refs),
|
|
181869
|
+
list2(request.makePublic),
|
|
181870
|
+
request.visibility === "public" || request.visibility === "private" ? request.visibility : void 0
|
|
181871
|
+
);
|
|
181872
|
+
}
|
|
181463
181873
|
if (request.op === "meta") return ctx.artifactMeta(ref, dir, contentOrigin);
|
|
181464
181874
|
if (request.op === "file") {
|
|
181465
181875
|
const file = typeof request.path === "string" ? readArtifactFile(
|
|
@@ -181519,8 +181929,8 @@ async function handleRelay(ctx, key2, body, conn, contentOrigin = "") {
|
|
|
181519
181929
|
}
|
|
181520
181930
|
|
|
181521
181931
|
// src/server/selection.ts
|
|
181522
|
-
var
|
|
181523
|
-
var
|
|
181932
|
+
var import_node_fs31 = __toESM(require("node:fs"), 1);
|
|
181933
|
+
var import_node_path27 = __toESM(require("node:path"), 1);
|
|
181524
181934
|
|
|
181525
181935
|
// src/shared/selection.ts
|
|
181526
181936
|
var SELECTION_FULL_NODES = 20;
|
|
@@ -181566,9 +181976,9 @@ function readChange(value) {
|
|
|
181566
181976
|
function readAll(values, read3) {
|
|
181567
181977
|
const out = [];
|
|
181568
181978
|
for (const value of values) {
|
|
181569
|
-
const
|
|
181570
|
-
if (!
|
|
181571
|
-
out.push(
|
|
181979
|
+
const item3 = read3(value);
|
|
181980
|
+
if (!item3) return null;
|
|
181981
|
+
out.push(item3);
|
|
181572
181982
|
}
|
|
181573
181983
|
return out;
|
|
181574
181984
|
}
|
|
@@ -181580,16 +181990,16 @@ function readSelectionMessage(value) {
|
|
|
181580
181990
|
return null;
|
|
181581
181991
|
if (!list(value.selected, SELECTION_FULL_NODES) || !list(value.tweaks, SELECTION_MAX_NODES) || !list(value.nodes, SELECTION_MAX_NODES))
|
|
181582
181992
|
return null;
|
|
181583
|
-
const selected = readAll(value.selected, (
|
|
181584
|
-
const node = readNode(
|
|
181585
|
-
if (!node || !object(
|
|
181993
|
+
const selected = readAll(value.selected, (item3) => {
|
|
181994
|
+
const node = readNode(item3);
|
|
181995
|
+
if (!node || !object(item3) || !text2(item3.text, SELECTION_LIMITS.text) || !text2(item3.html, SELECTION_LIMITS.html) || !list(item3.tweaks, INSPECTOR_PROPERTIES.length))
|
|
181586
181996
|
return null;
|
|
181587
|
-
const tweaks2 = readAll(
|
|
181588
|
-
return tweaks2 && { ...node, text:
|
|
181997
|
+
const tweaks2 = readAll(item3.tweaks, readChange);
|
|
181998
|
+
return tweaks2 && { ...node, text: item3.text, html: item3.html, tweaks: tweaks2 };
|
|
181589
181999
|
});
|
|
181590
|
-
const tweaks = readAll(value.tweaks, (
|
|
181591
|
-
const node = readNode(
|
|
181592
|
-
const change = readChange(
|
|
182000
|
+
const tweaks = readAll(value.tweaks, (item3) => {
|
|
182001
|
+
const node = readNode(item3);
|
|
182002
|
+
const change = readChange(item3);
|
|
181593
182003
|
return node && change && { ...node, ...change };
|
|
181594
182004
|
});
|
|
181595
182005
|
const nodes = readAll(value.nodes, readNode);
|
|
@@ -181625,17 +182035,17 @@ function readWhiteboardSelectionMessage(value) {
|
|
|
181625
182035
|
return null;
|
|
181626
182036
|
const id3 = value.artifact.slice("whiteboard/".length);
|
|
181627
182037
|
if (!value.artifact.startsWith("whiteboard/") || !isArtifactId(id3)) return null;
|
|
181628
|
-
const optional3 = (
|
|
182038
|
+
const optional3 = (item3, max) => typeof item3 === "string" ? item3.slice(0, max) : null;
|
|
181629
182039
|
const selected = [];
|
|
181630
|
-
for (const
|
|
181631
|
-
if (!object(
|
|
182040
|
+
for (const item3 of value.selected) {
|
|
182041
|
+
if (!object(item3) || !text2(item3.id, WHITEBOARD_SELECTION_LIMITS.id) || !item3.id || !text2(item3.type, WHITEBOARD_SELECTION_LIMITS.type))
|
|
181632
182042
|
return null;
|
|
181633
182043
|
selected.push({
|
|
181634
|
-
id:
|
|
181635
|
-
type:
|
|
181636
|
-
text: optional3(
|
|
181637
|
-
frameId: optional3(
|
|
181638
|
-
author:
|
|
182044
|
+
id: item3.id,
|
|
182045
|
+
type: item3.type,
|
|
182046
|
+
text: optional3(item3.text, WHITEBOARD_SELECTION_LIMITS.text),
|
|
182047
|
+
frameId: optional3(item3.frameId, WHITEBOARD_SELECTION_LIMITS.id),
|
|
182048
|
+
author: item3.author === "human" || item3.author === "agent" ? item3.author : null
|
|
181639
182049
|
});
|
|
181640
182050
|
}
|
|
181641
182051
|
const page = isPageId(value.page) ? { page: value.page } : {};
|
|
@@ -181665,7 +182075,7 @@ function readAnySelection(value) {
|
|
|
181665
182075
|
function createSelectionStore(stateDir, exists) {
|
|
181666
182076
|
const tabs = /* @__PURE__ */ new Map();
|
|
181667
182077
|
let clock = 0;
|
|
181668
|
-
const fileOf2 = (kind, id3) =>
|
|
182078
|
+
const fileOf2 = (kind, id3) => import_node_path27.default.join(stateDir, kind, id3, "selection.json");
|
|
181669
182079
|
const write = (kind, id3) => {
|
|
181670
182080
|
let winner;
|
|
181671
182081
|
for (const tab of tabs.values()) {
|
|
@@ -181673,7 +182083,7 @@ function createSelectionStore(stateDir, exists) {
|
|
|
181673
182083
|
if (!winner || tab.humanAt > winner.humanAt || tab.humanAt === winner.humanAt && tab.seenAt > winner.seenAt)
|
|
181674
182084
|
winner = tab;
|
|
181675
182085
|
}
|
|
181676
|
-
if (!winner?.state)
|
|
182086
|
+
if (!winner?.state) import_node_fs31.default.rmSync(fileOf2(kind, id3), { force: true });
|
|
181677
182087
|
else
|
|
181678
182088
|
writeJsonAtomic(fileOf2(kind, id3), {
|
|
181679
182089
|
artifact: `${kind}/${id3}`,
|
|
@@ -181715,11 +182125,11 @@ function createSelectionStore(stateDir, exists) {
|
|
|
181715
182125
|
for (const kind of ["artboard", "document", "whiteboard"]) {
|
|
181716
182126
|
let ids;
|
|
181717
182127
|
try {
|
|
181718
|
-
ids =
|
|
182128
|
+
ids = import_node_fs31.default.readdirSync(import_node_path27.default.join(stateDir, kind));
|
|
181719
182129
|
} catch {
|
|
181720
182130
|
continue;
|
|
181721
182131
|
}
|
|
181722
|
-
for (const id3 of ids)
|
|
182132
|
+
for (const id3 of ids) import_node_fs31.default.rmSync(fileOf2(kind, id3), { force: true });
|
|
181723
182133
|
}
|
|
181724
182134
|
}
|
|
181725
182135
|
};
|
|
@@ -181727,13 +182137,13 @@ function createSelectionStore(stateDir, exists) {
|
|
|
181727
182137
|
|
|
181728
182138
|
// src/server/verify-recordings.ts
|
|
181729
182139
|
var import_node_crypto11 = __toESM(require("node:crypto"), 1);
|
|
181730
|
-
var
|
|
181731
|
-
var
|
|
182140
|
+
var import_node_fs33 = __toESM(require("node:fs"), 1);
|
|
182141
|
+
var import_node_path29 = __toESM(require("node:path"), 1);
|
|
181732
182142
|
|
|
181733
182143
|
// src/server/recording-trim.ts
|
|
181734
182144
|
var import_node_child_process3 = require("node:child_process");
|
|
181735
|
-
var
|
|
181736
|
-
var
|
|
182145
|
+
var import_node_fs32 = __toESM(require("node:fs"), 1);
|
|
182146
|
+
var import_node_path28 = __toESM(require("node:path"), 1);
|
|
181737
182147
|
function run2(command, args, signal3) {
|
|
181738
182148
|
return new Promise((resolve, reject) => {
|
|
181739
182149
|
(0, import_node_child_process3.execFile)(
|
|
@@ -181753,7 +182163,7 @@ function run2(command, args, signal3) {
|
|
|
181753
182163
|
});
|
|
181754
182164
|
}
|
|
181755
182165
|
async function trimRecording(input, output, signal3) {
|
|
181756
|
-
if (input === output ||
|
|
182166
|
+
if (input === output || import_node_fs32.default.existsSync(output))
|
|
181757
182167
|
throw new Error("Choose a new output path; existing files are never overwritten.");
|
|
181758
182168
|
const probe = JSON.parse(
|
|
181759
182169
|
(await run2(
|
|
@@ -181825,9 +182235,9 @@ async function trimRecording(input, output, signal3) {
|
|
|
181825
182235
|
if (start > 0 || end < duration) status = "trimmed";
|
|
181826
182236
|
}
|
|
181827
182237
|
if (status === "trimmed") {
|
|
181828
|
-
const temporary =
|
|
182238
|
+
const temporary = import_node_fs32.default.mkdtempSync(import_node_path28.default.join(import_node_path28.default.dirname(output), ".trim-"));
|
|
181829
182239
|
try {
|
|
181830
|
-
const encoded =
|
|
182240
|
+
const encoded = import_node_path28.default.join(temporary, "clip.mp4");
|
|
181831
182241
|
await run2(
|
|
181832
182242
|
"ffmpeg",
|
|
181833
182243
|
[
|
|
@@ -181863,9 +182273,9 @@ async function trimRecording(input, output, signal3) {
|
|
|
181863
182273
|
],
|
|
181864
182274
|
signal3
|
|
181865
182275
|
);
|
|
181866
|
-
|
|
182276
|
+
import_node_fs32.default.linkSync(encoded, output);
|
|
181867
182277
|
} finally {
|
|
181868
|
-
|
|
182278
|
+
import_node_fs32.default.rmSync(temporary, { recursive: true, force: true });
|
|
181869
182279
|
}
|
|
181870
182280
|
}
|
|
181871
182281
|
return { duration, start, end, removed: duration - (end - start), status };
|
|
@@ -181876,7 +182286,7 @@ var POLICY = "idle-ends-v2";
|
|
|
181876
182286
|
var STABLE_MS = 750;
|
|
181877
182287
|
var digest2 = (data) => import_node_crypto11.default.createHash("sha256").update(data).digest("hex");
|
|
181878
182288
|
var stamp2 = (file) => {
|
|
181879
|
-
const stat =
|
|
182289
|
+
const stat = import_node_fs33.default.statSync(file);
|
|
181880
182290
|
return `${stat.dev}:${stat.ino}:${stat.size}:${stat.mtimeMs}:${stat.ctimeMs}`;
|
|
181881
182291
|
};
|
|
181882
182292
|
function createVerifyRecordings(options2) {
|
|
@@ -181890,7 +182300,7 @@ function createVerifyRecordings(options2) {
|
|
|
181890
182300
|
const notify = (job) => {
|
|
181891
182301
|
if (current(job)) options2.onChange(job.artifact);
|
|
181892
182302
|
};
|
|
181893
|
-
const cacheDir =
|
|
182303
|
+
const cacheDir = import_node_path29.default.join(options2.stateDir, "recordings");
|
|
181894
182304
|
async function process2(job) {
|
|
181895
182305
|
let temporary;
|
|
181896
182306
|
try {
|
|
@@ -181899,7 +182309,7 @@ function createVerifyRecordings(options2) {
|
|
|
181899
182309
|
options2.onChange(job.artifact);
|
|
181900
182310
|
return;
|
|
181901
182311
|
}
|
|
181902
|
-
const bytes = await
|
|
182312
|
+
const bytes = await import_node_fs33.default.promises.readFile(job.file);
|
|
181903
182313
|
if (!current(job)) return;
|
|
181904
182314
|
if (stamp2(job.file) !== job.stamp) {
|
|
181905
182315
|
jobs.delete(job.key);
|
|
@@ -181907,22 +182317,22 @@ function createVerifyRecordings(options2) {
|
|
|
181907
182317
|
return;
|
|
181908
182318
|
}
|
|
181909
182319
|
const key2 = digest2(`${POLICY}:${digest2(bytes)}`);
|
|
181910
|
-
const dir =
|
|
181911
|
-
const output =
|
|
181912
|
-
const metadata =
|
|
182320
|
+
const dir = import_node_path29.default.join(cacheDir, key2);
|
|
182321
|
+
const output = import_node_path29.default.join(dir, "clip.mp4");
|
|
182322
|
+
const metadata = import_node_path29.default.join(dir, "result.json");
|
|
181913
182323
|
let cached;
|
|
181914
182324
|
try {
|
|
181915
|
-
const saved = JSON.parse(
|
|
181916
|
-
if (saved.result.status !== "trimmed" ||
|
|
182325
|
+
const saved = JSON.parse(import_node_fs33.default.readFileSync(metadata, "utf8"));
|
|
182326
|
+
if (saved.result.status !== "trimmed" || import_node_fs33.default.existsSync(output) && saved.hash === digest2(import_node_fs33.default.readFileSync(output)))
|
|
181917
182327
|
cached = saved;
|
|
181918
182328
|
} catch {
|
|
181919
182329
|
}
|
|
181920
182330
|
if (!cached) {
|
|
181921
|
-
|
|
181922
|
-
temporary =
|
|
181923
|
-
const input =
|
|
181924
|
-
const prepared =
|
|
181925
|
-
|
|
182331
|
+
import_node_fs33.default.mkdirSync(cacheDir, { recursive: true });
|
|
182332
|
+
temporary = import_node_fs33.default.mkdtempSync(import_node_path29.default.join(cacheDir, ".prepare-"));
|
|
182333
|
+
const input = import_node_path29.default.join(temporary, "capture");
|
|
182334
|
+
const prepared = import_node_path29.default.join(temporary, "clip.mp4");
|
|
182335
|
+
import_node_fs33.default.writeFileSync(input, bytes);
|
|
181926
182336
|
const result = await (options2.prepare ?? trimRecording)(
|
|
181927
182337
|
input,
|
|
181928
182338
|
prepared,
|
|
@@ -181934,9 +182344,9 @@ function createVerifyRecordings(options2) {
|
|
|
181934
182344
|
options2.onChange(job.artifact);
|
|
181935
182345
|
return;
|
|
181936
182346
|
}
|
|
181937
|
-
|
|
181938
|
-
const hash2 = result.status === "trimmed" ? digest2(
|
|
181939
|
-
if (result.status === "trimmed")
|
|
182347
|
+
import_node_fs33.default.mkdirSync(dir, { recursive: true });
|
|
182348
|
+
const hash2 = result.status === "trimmed" ? digest2(import_node_fs33.default.readFileSync(prepared)) : void 0;
|
|
182349
|
+
if (result.status === "trimmed") import_node_fs33.default.copyFileSync(prepared, output);
|
|
181940
182350
|
cached = { result, ...hash2 ? { hash: hash2 } : {} };
|
|
181941
182351
|
writeJsonAtomic(metadata, cached);
|
|
181942
182352
|
}
|
|
@@ -181969,7 +182379,7 @@ function createVerifyRecordings(options2) {
|
|
|
181969
182379
|
};
|
|
181970
182380
|
notify(job);
|
|
181971
182381
|
} finally {
|
|
181972
|
-
if (temporary)
|
|
182382
|
+
if (temporary) import_node_fs33.default.rmSync(temporary, { recursive: true, force: true });
|
|
181973
182383
|
}
|
|
181974
182384
|
}
|
|
181975
182385
|
function pump() {
|
|
@@ -182035,7 +182445,7 @@ function createVerifyRecordings(options2) {
|
|
|
182035
182445
|
if (job.state.status === "processing") pending.add(boardId);
|
|
182036
182446
|
if (job.virtual && job.output) {
|
|
182037
182447
|
canvas.boards[boardId] = { ...board, file: job.virtual, src: job.virtual };
|
|
182038
|
-
versions[job.virtual] =
|
|
182448
|
+
versions[job.virtual] = import_node_fs33.default.statSync(job.output).mtimeMs;
|
|
182039
182449
|
}
|
|
182040
182450
|
}
|
|
182041
182451
|
for (const job of jobs.values()) if (job.artifact === id3 && !active.has(job.key)) stop(job);
|
|
@@ -182064,7 +182474,7 @@ function createVerifyRecordings(options2) {
|
|
|
182064
182474
|
continue;
|
|
182065
182475
|
const original = job.key.slice(id3.length + 1);
|
|
182066
182476
|
if (!referenced.has(original)) overrides.set(original, null);
|
|
182067
|
-
overrides.set(job.virtual,
|
|
182477
|
+
overrides.set(job.virtual, import_node_fs33.default.readFileSync(job.output));
|
|
182068
182478
|
}
|
|
182069
182479
|
if (overrides.size) overrides.set("canvas.json", Buffer.from(JSON.stringify(payload.canvas)));
|
|
182070
182480
|
return overrides;
|
|
@@ -182078,8 +182488,8 @@ function createVerifyRecordings(options2) {
|
|
|
182078
182488
|
}
|
|
182079
182489
|
|
|
182080
182490
|
// src/server/whiteboard.ts
|
|
182081
|
-
var
|
|
182082
|
-
var
|
|
182491
|
+
var import_node_fs34 = __toESM(require("node:fs"), 1);
|
|
182492
|
+
var import_node_path30 = __toESM(require("node:path"), 1);
|
|
182083
182493
|
|
|
182084
182494
|
// src/server/whiteboard-lint.ts
|
|
182085
182495
|
var LINE_TYPES = /* @__PURE__ */ new Set(["arrow", "line"]);
|
|
@@ -182129,16 +182539,16 @@ var segmentsCross = (a5, b6, c10, d10) => side(a5, b6, c10) * side(a5, b6, d10)
|
|
|
182129
182539
|
var pathOf = (element) => {
|
|
182130
182540
|
const { points: points2 } = element;
|
|
182131
182541
|
if (!Array.isArray(points2) || points2.length < 2) return null;
|
|
182132
|
-
const
|
|
182542
|
+
const path45 = [];
|
|
182133
182543
|
for (const point2 of points2) {
|
|
182134
182544
|
if (!Array.isArray(point2) || typeof point2[0] !== "number" || typeof point2[1] !== "number")
|
|
182135
182545
|
return null;
|
|
182136
|
-
|
|
182546
|
+
path45.push([(element.x ?? 0) + point2[0], (element.y ?? 0) + point2[1]]);
|
|
182137
182547
|
}
|
|
182138
|
-
return
|
|
182548
|
+
return path45;
|
|
182139
182549
|
};
|
|
182140
|
-
var segmentsOf = (
|
|
182141
|
-
var lengthOf = (
|
|
182550
|
+
var segmentsOf = (path45) => path45.slice(1).map((end, index) => [path45[index], end]);
|
|
182551
|
+
var lengthOf = (path45) => segmentsOf(path45).reduce((sum2, [a5, b6]) => sum2 + Math.hypot(b6[0] - a5[0], b6[1] - a5[1]), 0);
|
|
182142
182552
|
var boundIds = (element) => [element.startBinding?.elementId, element.endBinding?.elementId].filter(
|
|
182143
182553
|
(id3) => typeof id3 === "string"
|
|
182144
182554
|
);
|
|
@@ -182175,18 +182585,18 @@ function arrowWarnings(live3, geometry) {
|
|
|
182175
182585
|
);
|
|
182176
182586
|
const arrows = live3.flatMap((element) => {
|
|
182177
182587
|
if (!LINE_TYPES.has(element.type) || ryugi(element).author !== "agent") return [];
|
|
182178
|
-
const
|
|
182179
|
-
return
|
|
182588
|
+
const path45 = pathOf(element);
|
|
182589
|
+
return path45 ? [{ element, path: path45, bound: boundIds(element) }] : [];
|
|
182180
182590
|
});
|
|
182181
182591
|
const warnings = [];
|
|
182182
|
-
for (const { element, path:
|
|
182183
|
-
const ends = [
|
|
182592
|
+
for (const { element, path: path45 } of arrows) {
|
|
182593
|
+
const ends = [path45[0], path45.at(-1)];
|
|
182184
182594
|
const around = obstacles.filter(
|
|
182185
182595
|
(shape2) => !ends.some((end) => holds(geometry[shape2.id], end))
|
|
182186
182596
|
);
|
|
182187
182597
|
for (const shape2 of around) {
|
|
182188
182598
|
const box2 = inset(geometry[shape2.id], GRAZE);
|
|
182189
|
-
if (segmentsOf(
|
|
182599
|
+
if (segmentsOf(path45).some(([a5, b6]) => segmentHits(a5, b6, box2)))
|
|
182190
182600
|
warnings.push(
|
|
182191
182601
|
`arrow ${element.id} crosses ${shape2.id} \u2014 move ${shape2.id} or bend the arrow around it`
|
|
182192
182602
|
);
|
|
@@ -182204,7 +182614,7 @@ function arrowWarnings(live3, geometry) {
|
|
|
182204
182614
|
const need = Math.ceil(
|
|
182205
182615
|
(Math.abs(dx2) * label.w + Math.abs(dy2) * label.h) / chord + LABEL_MARGIN
|
|
182206
182616
|
);
|
|
182207
|
-
const length = lengthOf(
|
|
182617
|
+
const length = lengthOf(path45);
|
|
182208
182618
|
if (length < need)
|
|
182209
182619
|
warnings.push(
|
|
182210
182620
|
`label of arrow ${element.id} needs the arrow to be at least ${need} px long (now ${Math.round(length)}) \u2014 move its ends apart or shorten the label`
|
|
@@ -182236,7 +182646,7 @@ function readWhiteboard(dir, id3) {
|
|
|
182236
182646
|
const version3 = latestMtime(dir);
|
|
182237
182647
|
let source;
|
|
182238
182648
|
try {
|
|
182239
|
-
source =
|
|
182649
|
+
source = import_node_fs34.default.readFileSync(import_node_path30.default.join(dir, ENTRY_FILE.whiteboard), "utf8");
|
|
182240
182650
|
} catch {
|
|
182241
182651
|
return {
|
|
182242
182652
|
title: id3,
|
|
@@ -182359,7 +182769,7 @@ function onlyPage(result, page, pages) {
|
|
|
182359
182769
|
}
|
|
182360
182770
|
|
|
182361
182771
|
// src/server/whiteboard-comments.ts
|
|
182362
|
-
var
|
|
182772
|
+
var import_node_path31 = __toESM(require("node:path"), 1);
|
|
182363
182773
|
|
|
182364
182774
|
// src/shared/whiteboard/comments.ts
|
|
182365
182775
|
var MAX_ELEMENTS = 50;
|
|
@@ -182484,7 +182894,7 @@ function createWhiteboardComments(options2) {
|
|
|
182484
182894
|
let found = stores.get(id3);
|
|
182485
182895
|
if (!found) {
|
|
182486
182896
|
found = createStore(
|
|
182487
|
-
|
|
182897
|
+
import_node_path31.default.join(options2.root, "whiteboard", id3, "comments.json"),
|
|
182488
182898
|
rules,
|
|
182489
182899
|
options2.names
|
|
182490
182900
|
);
|
|
@@ -182580,8 +182990,8 @@ function createWhiteboardComments(options2) {
|
|
|
182580
182990
|
}
|
|
182581
182991
|
|
|
182582
182992
|
// src/server/whiteboards.ts
|
|
182583
|
-
var
|
|
182584
|
-
var
|
|
182993
|
+
var import_node_fs35 = __toESM(require("node:fs"), 1);
|
|
182994
|
+
var import_node_path32 = __toESM(require("node:path"), 1);
|
|
182585
182995
|
|
|
182586
182996
|
// src/server/whiteboard-merge.ts
|
|
182587
182997
|
var nonce = () => Math.floor(Math.random() * 2 ** 31);
|
|
@@ -182711,7 +183121,7 @@ var emptyScene = () => ({
|
|
|
182711
183121
|
});
|
|
182712
183122
|
var readText3 = (file) => {
|
|
182713
183123
|
try {
|
|
182714
|
-
return
|
|
183124
|
+
return import_node_fs35.default.readFileSync(file, "utf8");
|
|
182715
183125
|
} catch {
|
|
182716
183126
|
return null;
|
|
182717
183127
|
}
|
|
@@ -182726,8 +183136,8 @@ var validGeometry = (value) => {
|
|
|
182726
183136
|
};
|
|
182727
183137
|
function writeTextAtomic(file, text5) {
|
|
182728
183138
|
const tmp = `${file}.${process.pid}.tmp`;
|
|
182729
|
-
|
|
182730
|
-
|
|
183139
|
+
import_node_fs35.default.writeFileSync(tmp, text5);
|
|
183140
|
+
import_node_fs35.default.renameSync(tmp, file);
|
|
182731
183141
|
}
|
|
182732
183142
|
function createWhiteboards(opts) {
|
|
182733
183143
|
const writeDelayMs = opts.writeDelayMs ?? 500;
|
|
@@ -182736,9 +183146,9 @@ function createWhiteboards(opts) {
|
|
|
182736
183146
|
const geometries = /* @__PURE__ */ new Map();
|
|
182737
183147
|
const renders = /* @__PURE__ */ new Map();
|
|
182738
183148
|
const legacyCleared = /* @__PURE__ */ new Set();
|
|
182739
|
-
const stateDir = opts.stateDir ??
|
|
182740
|
-
const
|
|
182741
|
-
const pageStateOf = (id3, page) =>
|
|
183149
|
+
const stateDir = opts.stateDir ?? import_node_path32.default.join(opts.root, ".state");
|
|
183150
|
+
const stateOf2 = (id3) => import_node_path32.default.join(stateDir, "whiteboard", id3);
|
|
183151
|
+
const pageStateOf = (id3, page) => import_node_path32.default.join(stateOf2(id3), "pages", page);
|
|
182742
183152
|
const keyOf = (id3, page) => `${id3}
|
|
182743
183153
|
${page}`;
|
|
182744
183154
|
const list2 = (id3) => {
|
|
@@ -182746,7 +183156,7 @@ ${page}`;
|
|
|
182746
183156
|
if (existing) return existing;
|
|
182747
183157
|
const dir = resolveArtifactDir(opts.root, "whiteboard", id3);
|
|
182748
183158
|
if (!dir) return null;
|
|
182749
|
-
const file =
|
|
183159
|
+
const file = import_node_path32.default.join(dir, PAGES_FILE);
|
|
182750
183160
|
const text5 = readText3(file);
|
|
182751
183161
|
const parsed = parsePages(text5);
|
|
182752
183162
|
const created = {
|
|
@@ -182780,7 +183190,7 @@ ${page}`;
|
|
|
182780
183190
|
if (existing) return existing;
|
|
182781
183191
|
const dir = resolveArtifactDir(opts.root, "whiteboard", id3);
|
|
182782
183192
|
if (!dir) return null;
|
|
182783
|
-
const file =
|
|
183193
|
+
const file = import_node_path32.default.join(dir, pageFileOf(page));
|
|
182784
183194
|
const text5 = readText3(file);
|
|
182785
183195
|
const parsed = text5 === null ? { scene: emptyScene() } : parseScene(text5, pageFileOf(page));
|
|
182786
183196
|
const session = {
|
|
@@ -182809,7 +183219,7 @@ ${page}`;
|
|
|
182809
183219
|
session.pending = false;
|
|
182810
183220
|
const text5 = serializeScene(session.scene);
|
|
182811
183221
|
if (text5 === session.written) return;
|
|
182812
|
-
|
|
183222
|
+
import_node_fs35.default.mkdirSync(import_node_path32.default.dirname(session.file), { recursive: true });
|
|
182813
183223
|
writeTextAtomic(session.file, text5);
|
|
182814
183224
|
session.written = text5;
|
|
182815
183225
|
};
|
|
@@ -182875,7 +183285,7 @@ ${page}`;
|
|
|
182875
183285
|
if (legacyCleared.has(id3)) return;
|
|
182876
183286
|
legacyCleared.add(id3);
|
|
182877
183287
|
for (const name of ["render.png", "render.json", "geometry.json"])
|
|
182878
|
-
|
|
183288
|
+
import_node_fs35.default.rmSync(import_node_path32.default.join(stateOf2(id3), name), { force: true });
|
|
182879
183289
|
};
|
|
182880
183290
|
const known = (id3, page) => isPageId(page) && resolveArtifactDir(opts.root, "whiteboard", id3) !== null;
|
|
182881
183291
|
const live3 = (id3) => livePages(normalized2(id3)?.pages ?? []);
|
|
@@ -182944,19 +183354,19 @@ ${page}`;
|
|
|
182944
183354
|
reportGeometry(id3, geometry, page = MAIN_PAGE) {
|
|
182945
183355
|
if (!validGeometry(geometry) || !known(id3, page)) return false;
|
|
182946
183356
|
geometries.set(keyOf(id3, page), geometry);
|
|
182947
|
-
writeJsonAtomic(
|
|
183357
|
+
writeJsonAtomic(import_node_path32.default.join(pageStateOf(id3, page), "geometry.json"), geometry);
|
|
182948
183358
|
stateWritten(id3);
|
|
182949
183359
|
return true;
|
|
182950
183360
|
},
|
|
182951
183361
|
render: (id3, page = MAIN_PAGE) => renders.get(keyOf(id3, page)) ?? null,
|
|
182952
|
-
renderPathOf: (id3, page = MAIN_PAGE) =>
|
|
183362
|
+
renderPathOf: (id3, page = MAIN_PAGE) => import_node_path32.default.join(pageStateOf(id3, page), "render.png"),
|
|
182953
183363
|
reportRender(id3, png, sceneVersion, page = MAIN_PAGE) {
|
|
182954
183364
|
if (!Number.isFinite(sceneVersion) || !known(id3, page)) return false;
|
|
182955
|
-
|
|
182956
|
-
writeTextAtomic(
|
|
183365
|
+
import_node_fs35.default.mkdirSync(pageStateOf(id3, page), { recursive: true });
|
|
183366
|
+
writeTextAtomic(import_node_path32.default.join(pageStateOf(id3, page), "render.png"), png);
|
|
182957
183367
|
const meta = { sceneVersion, at: (/* @__PURE__ */ new Date()).toISOString() };
|
|
182958
183368
|
renders.set(keyOf(id3, page), meta);
|
|
182959
|
-
writeJsonAtomic(
|
|
183369
|
+
writeJsonAtomic(import_node_path32.default.join(pageStateOf(id3, page), "render.json"), meta);
|
|
182960
183370
|
stateWritten(id3);
|
|
182961
183371
|
return true;
|
|
182962
183372
|
},
|
|
@@ -182981,7 +183391,6 @@ ${page}`;
|
|
|
182981
183391
|
}
|
|
182982
183392
|
|
|
182983
183393
|
// src/server/context.ts
|
|
182984
|
-
var REF_ARTBOARD = /<ref\b[^>]*?\bartboard="([^"]+)"/g;
|
|
182985
183394
|
function readArtifactSource(dir, ref, runtime = []) {
|
|
182986
183395
|
if (ref.type === "artboard") {
|
|
182987
183396
|
const payload2 = readCanvas(dir);
|
|
@@ -183011,18 +183420,18 @@ function titleOf(payload) {
|
|
|
183011
183420
|
return "Untitled artifact";
|
|
183012
183421
|
}
|
|
183013
183422
|
function createServerContext(options2) {
|
|
183014
|
-
const root =
|
|
183015
|
-
const viewerDir =
|
|
183016
|
-
const runtimeDir = options2.runtimeDir ?
|
|
183017
|
-
const stateDir =
|
|
183018
|
-
|
|
183019
|
-
|
|
183423
|
+
const root = import_node_path33.default.resolve(options2.root);
|
|
183424
|
+
const viewerDir = import_node_path33.default.resolve(options2.viewerDir);
|
|
183425
|
+
const runtimeDir = options2.runtimeDir ? import_node_path33.default.resolve(options2.runtimeDir) : null;
|
|
183426
|
+
const stateDir = import_node_path33.default.join(root, ".state");
|
|
183427
|
+
import_node_fs36.default.mkdirSync(stateDir, { recursive: true, mode: 448 });
|
|
183428
|
+
import_node_fs36.default.writeFileSync(import_node_path33.default.join(stateDir, ".gitignore"), "*\n");
|
|
183020
183429
|
if (options2.configFile) ensureConfig(options2.configFile);
|
|
183021
|
-
const portFile =
|
|
183022
|
-
const tokenFile =
|
|
183430
|
+
const portFile = import_node_path33.default.join(stateDir, ".last-port");
|
|
183431
|
+
const tokenFile = import_node_path33.default.join(stateDir, ".last-token");
|
|
183023
183432
|
const mount = options2.mount;
|
|
183024
183433
|
const token = mount?.token ?? (readPersisted(tokenFile) || randomToken());
|
|
183025
|
-
if (!mount)
|
|
183434
|
+
if (!mount) import_node_fs36.default.writeFileSync(tokenFile, `${token}
|
|
183026
183435
|
`, { mode: 384 });
|
|
183027
183436
|
const contentToken = randomToken();
|
|
183028
183437
|
const loopback = isLoopbackHost(options2.host);
|
|
@@ -183052,7 +183461,7 @@ function createServerContext(options2) {
|
|
|
183052
183461
|
const pages = whiteboards.livePages(id3).flatMap((page) => {
|
|
183053
183462
|
const scene = whiteboards.scene(id3, page.id);
|
|
183054
183463
|
if (!scene) return [];
|
|
183055
|
-
const bytes =
|
|
183464
|
+
const bytes = import_node_fs36.default.statSync(import_node_path33.default.join(dir, pageFileOf(page.id)), { throwIfNoEntry: false })?.size ?? 0;
|
|
183056
183465
|
return [
|
|
183057
183466
|
{
|
|
183058
183467
|
id: page.id,
|
|
@@ -183125,8 +183534,8 @@ function createServerContext(options2) {
|
|
|
183125
183534
|
});
|
|
183126
183535
|
const avatars = createAvatars(options2.fetch);
|
|
183127
183536
|
const names = commentNames({
|
|
183128
|
-
agentFile:
|
|
183129
|
-
projectDir:
|
|
183537
|
+
agentFile: import_node_path33.default.join(stateDir, "agent"),
|
|
183538
|
+
projectDir: import_node_path33.default.resolve(root, "../.."),
|
|
183130
183539
|
cloud: options2.cloud
|
|
183131
183540
|
});
|
|
183132
183541
|
const whiteboardComments = createWhiteboardComments({
|
|
@@ -183184,11 +183593,7 @@ function createServerContext(options2) {
|
|
|
183184
183593
|
writeState({ type: "document", id: id3 }, dir);
|
|
183185
183594
|
broadcast({ type: "change", artifact: `document/${id3}`, files: [] });
|
|
183186
183595
|
},
|
|
183187
|
-
onRefsChange: (_id,
|
|
183188
|
-
const targets = [
|
|
183189
|
-
...artboards.map((id3) => ({ type: "artboard", id: id3 })),
|
|
183190
|
-
...whiteboards2.map((id3) => ({ type: "whiteboard", id: id3 }))
|
|
183191
|
-
];
|
|
183596
|
+
onRefsChange: (_id, targets) => {
|
|
183192
183597
|
for (const ref of targets) {
|
|
183193
183598
|
const dir = resolveArtifactDir(root, ref.type, ref.id);
|
|
183194
183599
|
if (!dir) continue;
|
|
@@ -183244,15 +183649,10 @@ function createServerContext(options2) {
|
|
|
183244
183649
|
const cloud = options2.cloud && options2.configFile ? createCloudRoutes({
|
|
183245
183650
|
...options2.cloud,
|
|
183246
183651
|
configFile: options2.configFile,
|
|
183247
|
-
project:
|
|
183652
|
+
project: import_node_path33.default.basename(import_node_path33.default.resolve(root, "../..")),
|
|
183248
183653
|
address: (ref) => artifactPath(root, ref.type, ref.id).split("/").pop(),
|
|
183249
|
-
references: (ref) => {
|
|
183250
|
-
|
|
183251
|
-
const dir = resolveArtifactDir(root, "document", ref.id);
|
|
183252
|
-
const file = dir ? import_node_path32.default.join(dir, "doc.xml") : null;
|
|
183253
|
-
const xml = file && import_node_fs35.default.existsSync(file) ? import_node_fs35.default.readFileSync(file, "utf8") : "";
|
|
183254
|
-
return [...xml.matchAll(REF_ARTBOARD)].map((match) => match[1]).filter((slug) => resolveArtifactDir(root, "artboard", slug) !== null);
|
|
183255
|
-
},
|
|
183654
|
+
references: (ref) => referencesOf(root, `${ref.type}/${ref.id}`),
|
|
183655
|
+
referrers: (ref) => referrersOf(root, `${ref.type}/${ref.id}`),
|
|
183256
183656
|
port: () => ctx.port,
|
|
183257
183657
|
inspect,
|
|
183258
183658
|
onPublication: (key2, publication) => {
|
|
@@ -183260,7 +183660,7 @@ function createServerContext(options2) {
|
|
|
183260
183660
|
}
|
|
183261
183661
|
}) : null;
|
|
183262
183662
|
const autoPublisher = cloud ? createAutoPublisher({
|
|
183263
|
-
stateFile:
|
|
183663
|
+
stateFile: import_node_path33.default.join(stateDir, "auto-publish.json"),
|
|
183264
183664
|
enabled: cloud.autoPublishEnabled,
|
|
183265
183665
|
token: cloud.token,
|
|
183266
183666
|
publish: async (key2) => {
|
|
@@ -183306,7 +183706,7 @@ function createServerContext(options2) {
|
|
|
183306
183706
|
staleThreads: boardComments.stale(ref.id),
|
|
183307
183707
|
listening: boardComments.listening(ref.id),
|
|
183308
183708
|
backlinks: backlinksOf(ref.id)
|
|
183309
|
-
} :
|
|
183709
|
+
} : { backlinks: backlinksOf(ref.id, ref.type) },
|
|
183310
183710
|
contentBase: `${contentOrigin}${contentPrefix}${ref.type}/${ref.id}/`
|
|
183311
183711
|
});
|
|
183312
183712
|
const signatures = /* @__PURE__ */ new Map();
|
|
@@ -183320,11 +183720,10 @@ function createServerContext(options2) {
|
|
|
183320
183720
|
payload,
|
|
183321
183721
|
ref.type === "artboard" ? { ...extra, ...artboardHints(ref.id) } : extra
|
|
183322
183722
|
);
|
|
183323
|
-
|
|
183324
|
-
|
|
183325
|
-
|
|
183326
|
-
|
|
183327
|
-
);
|
|
183723
|
+
writeJsonAtomic(
|
|
183724
|
+
import_node_path33.default.join(stateDir, ref.type, ref.id, "backlinks.json"),
|
|
183725
|
+
backlinksOf(ref.id, ref.type)
|
|
183726
|
+
);
|
|
183328
183727
|
} catch (err) {
|
|
183329
183728
|
console.error(JSON.stringify({ type: "state-write-error", error: err.message }));
|
|
183330
183729
|
}
|
|
@@ -183417,7 +183816,7 @@ function createServerContext(options2) {
|
|
|
183417
183816
|
};
|
|
183418
183817
|
return ctx;
|
|
183419
183818
|
}
|
|
183420
|
-
var projectName = (ctx) =>
|
|
183819
|
+
var projectName = (ctx) => import_node_path33.default.basename(import_node_path33.default.dirname(import_node_path33.default.dirname(ctx.root)));
|
|
183421
183820
|
|
|
183422
183821
|
// ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/wrapper.mjs
|
|
183423
183822
|
var import_stream = __toESM(require_stream(), 1);
|
|
@@ -183591,8 +183990,8 @@ function createRelayClient(options2) {
|
|
|
183591
183990
|
}
|
|
183592
183991
|
|
|
183593
183992
|
// src/server/routes/content.ts
|
|
183594
|
-
var
|
|
183595
|
-
var
|
|
183993
|
+
var import_node_fs37 = __toESM(require("node:fs"), 1);
|
|
183994
|
+
var import_node_path34 = __toESM(require("node:path"), 1);
|
|
183596
183995
|
function serveContent(ctx, res, rest, range, mode = "main") {
|
|
183597
183996
|
const { root, runtimeDir, recordings, options: options2 } = ctx;
|
|
183598
183997
|
if (rest.startsWith("runtime/")) {
|
|
@@ -183644,7 +184043,7 @@ function serveContent(ctx, res, rest, range, mode = "main") {
|
|
|
183644
184043
|
sendFile(res, target, headers, range);
|
|
183645
184044
|
return;
|
|
183646
184045
|
}
|
|
183647
|
-
|
|
184046
|
+
import_node_fs37.default.readFile(target, "utf8", (err, source) => {
|
|
183648
184047
|
if (err) send(res, 404, "Not found");
|
|
183649
184048
|
else {
|
|
183650
184049
|
const uiRuntimeUrl = runtimeDir ? `${mode === "board" ? "/c/" : ctx.contentPrefix}runtime/ryugi-ui.js` : void 0;
|
|
@@ -183680,7 +184079,7 @@ var robotsRoute = {
|
|
|
183680
184079
|
path: "/robots.txt",
|
|
183681
184080
|
auth: "public",
|
|
183682
184081
|
handle: (_req, res, ctx) => {
|
|
183683
|
-
sendFile(res,
|
|
184082
|
+
sendFile(res, import_node_path34.default.join(ctx.viewerDir, "robots.txt"));
|
|
183684
184083
|
}
|
|
183685
184084
|
};
|
|
183686
184085
|
var contentRoute = {
|
|
@@ -183727,8 +184126,8 @@ var createBoardRequestHandler = (ctx) => (req, res) => {
|
|
|
183727
184126
|
};
|
|
183728
184127
|
|
|
183729
184128
|
// src/server/routes/agent.ts
|
|
183730
|
-
var
|
|
183731
|
-
var
|
|
184129
|
+
var import_node_fs38 = __toESM(require("node:fs"), 1);
|
|
184130
|
+
var import_node_path35 = __toESM(require("node:path"), 1);
|
|
183732
184131
|
|
|
183733
184132
|
// src/shared/whiteboard/summary.ts
|
|
183734
184133
|
var STICKY_FILL = "#ffec99";
|
|
@@ -183746,7 +184145,7 @@ function summarize(scene, opts = {}) {
|
|
|
183746
184145
|
if (element.type === "text" && element.containerId && typeof element.text === "string")
|
|
183747
184146
|
labels.set(element.containerId, element.text);
|
|
183748
184147
|
const frameOf = new Map(live3.map((element) => [element.id, element.frameId ?? null]));
|
|
183749
|
-
const
|
|
184148
|
+
const item3 = (element) => ({
|
|
183750
184149
|
id: element.id,
|
|
183751
184150
|
type: element.type,
|
|
183752
184151
|
text: labels.get(element.id) ?? (typeof element.text === "string" ? element.text : null),
|
|
@@ -183760,9 +184159,9 @@ function summarize(scene, opts = {}) {
|
|
|
183760
184159
|
const frames = live3.filter((element) => element.type === "frame" && (!opts.frame || element.id === opts.frame)).map((frame) => ({
|
|
183761
184160
|
id: frame.id,
|
|
183762
184161
|
name: typeof frame.name === "string" ? frame.name : frame.id,
|
|
183763
|
-
items: shapes.filter((element) => element.frameId === frame.id).map(
|
|
184162
|
+
items: shapes.filter((element) => element.frameId === frame.id).map(item3)
|
|
183764
184163
|
}));
|
|
183765
|
-
const loose = opts.frame ? [] : shapes.filter((element) => !element.frameId).map(
|
|
184164
|
+
const loose = opts.frame ? [] : shapes.filter((element) => !element.frameId).map(item3);
|
|
183766
184165
|
const inFrame = (id3) => id3 !== null && frameOf.get(id3) === opts.frame;
|
|
183767
184166
|
const arrows = live3.filter((element) => LINE_TYPES3.has(element.type)).map((arrow) => ({
|
|
183768
184167
|
arrow,
|
|
@@ -183781,7 +184180,7 @@ function summarize(scene, opts = {}) {
|
|
|
183781
184180
|
}
|
|
183782
184181
|
var oneLine2 = (text5) => text5.replaceAll(/\s*\n\s*/g, " / ");
|
|
183783
184182
|
var credit = ({ author, editedBy }) => author ? ` \xB7 ${author}${editedBy ? `, ${editedBy} edited` : ""}` : "";
|
|
183784
|
-
var itemLine = (
|
|
184183
|
+
var itemLine = (item3) => ` ${item3.id} ${item3.sticky ? "sticky" : item3.type}${item3.text ? ` "${oneLine2(item3.text)}"` : ""}${credit(item3)}`;
|
|
183785
184184
|
function formatSummary(summary) {
|
|
183786
184185
|
const lines = [];
|
|
183787
184186
|
for (const frame of summary.frames) {
|
|
@@ -183859,7 +184258,7 @@ var CHECK_BROWSER_WAIT_MS = 1e4;
|
|
|
183859
184258
|
var agentName = (fields) => typeof fields.agent === "string" && fields.agent.length > 0 && fields.agent.length <= 100 ? fields.agent : void 0;
|
|
183860
184259
|
var blockIdsOf = async (ctx, id3, dir) => {
|
|
183861
184260
|
await (await ctx.documents.open(id3))?.flush();
|
|
183862
|
-
const state2 = parseDocument2(
|
|
184261
|
+
const state2 = parseDocument2(import_node_fs38.default.readFileSync(import_node_path35.default.join(dir, "doc.xml"), "utf8"));
|
|
183863
184262
|
return new Set(
|
|
183864
184263
|
state2.root.children.flatMap(
|
|
183865
184264
|
(block) => block.$?.blockId ? [block.$.blockId] : []
|
|
@@ -184044,7 +184443,7 @@ async function serveAgentCheck(res, ctx, type, id3, page = null) {
|
|
|
184044
184443
|
let merging = false;
|
|
184045
184444
|
if (ref.type === "document") {
|
|
184046
184445
|
const session = await documents.open(ref.id);
|
|
184047
|
-
const text5 = await
|
|
184446
|
+
const text5 = await import_node_fs38.default.promises.readFile(import_node_path35.default.join(dir, "doc.xml"), "utf8").catch(() => null);
|
|
184048
184447
|
if (session && text5 !== null) {
|
|
184049
184448
|
session.onFileText(text5);
|
|
184050
184449
|
const timeout = new Promise(
|
|
@@ -184057,7 +184456,7 @@ async function serveAgentCheck(res, ctx, type, id3, page = null) {
|
|
|
184057
184456
|
if (ref.type === "whiteboard") await whiteboardCaughtUp(ctx, ref.id, checkedPages);
|
|
184058
184457
|
const payload = ctx.writeState(ref, dir);
|
|
184059
184458
|
const written = JSON.parse(
|
|
184060
|
-
await
|
|
184459
|
+
await import_node_fs38.default.promises.readFile(import_node_path35.default.join(stateDir, ref.type, ref.id, "warnings.json"), "utf8")
|
|
184061
184460
|
);
|
|
184062
184461
|
const state2 = page === null ? written : {
|
|
184063
184462
|
...written,
|
|
@@ -184224,7 +184623,7 @@ async function serveAgentWhiteboardScene(req, res, ctx, id3) {
|
|
|
184224
184623
|
sendJson(res, 404, { error: `whiteboard/${id3} not found` });
|
|
184225
184624
|
return;
|
|
184226
184625
|
}
|
|
184227
|
-
const selection = readSelectedIds(
|
|
184626
|
+
const selection = readSelectedIds(import_node_path35.default.join(ctx.stateDir, "whiteboard", id3, "selection.json"));
|
|
184228
184627
|
const summary = summarize(scene, { ...frame ? { frame } : {}, selected: selection });
|
|
184229
184628
|
sendJson(res, 200, {
|
|
184230
184629
|
artifact: `whiteboard/${id3}`,
|
|
@@ -184238,9 +184637,9 @@ async function serveAgentWhiteboardScene(req, res, ctx, id3) {
|
|
|
184238
184637
|
}
|
|
184239
184638
|
function readSelectedIds(file) {
|
|
184240
184639
|
try {
|
|
184241
|
-
const parsed = JSON.parse(
|
|
184640
|
+
const parsed = JSON.parse(import_node_fs38.default.readFileSync(file, "utf8"));
|
|
184242
184641
|
return (parsed.selected ?? []).flatMap(
|
|
184243
|
-
(
|
|
184642
|
+
(item3) => typeof item3.id === "string" ? [item3.id] : []
|
|
184244
184643
|
);
|
|
184245
184644
|
} catch {
|
|
184246
184645
|
return [];
|
|
@@ -184289,12 +184688,12 @@ var agentEventRoute = {
|
|
|
184289
184688
|
|
|
184290
184689
|
// src/server/review-defaults.ts
|
|
184291
184690
|
function actionable(section, rounds) {
|
|
184292
|
-
if (section === "asks") return (
|
|
184293
|
-
if (section === "rounds") return (
|
|
184691
|
+
if (section === "asks") return (item3) => item3.state === "submitted";
|
|
184692
|
+
if (section === "rounds") return (item3) => item3.state === "open" || item3.state === "submitted";
|
|
184294
184693
|
const submitted = new Set(
|
|
184295
184694
|
rounds.filter((round) => round.state === "submitted").map((round) => round.id)
|
|
184296
184695
|
);
|
|
184297
|
-
return (
|
|
184696
|
+
return (item3) => item3.kind === "verify" ? item3.verdict === "reject" : submitted.has(item3.round);
|
|
184298
184697
|
}
|
|
184299
184698
|
|
|
184300
184699
|
// src/server/routes/agent-review.ts
|
|
@@ -184427,7 +184826,7 @@ async function serve(req, res, ctx, type, id3, operation) {
|
|
|
184427
184826
|
if (body.op === "read" && !input.thread)
|
|
184428
184827
|
throw new ReviewError("E_ARGUMENT_INVALID", "A thread ID is required.");
|
|
184429
184828
|
if (body.sections !== void 0) {
|
|
184430
|
-
if (body.op !== "list" || !Array.isArray(body.sections) || !body.sections.every((
|
|
184829
|
+
if (body.op !== "list" || !Array.isArray(body.sections) || !body.sections.every((item3) => typeof item3 === "string"))
|
|
184431
184830
|
throw new ReviewError(
|
|
184432
184831
|
"E_ARGUMENT_INVALID",
|
|
184433
184832
|
"sections requires a list of collection names and op=list."
|
|
@@ -184548,8 +184947,8 @@ function shape(element, at7, scale) {
|
|
|
184548
184947
|
case "arrow":
|
|
184549
184948
|
case "line":
|
|
184550
184949
|
case "freedraw": {
|
|
184551
|
-
const
|
|
184552
|
-
return
|
|
184950
|
+
const path45 = points(element).map(([dx2, dy2]) => at7(x9 + dx2, y5 + dy2).join(",")).join(" ");
|
|
184951
|
+
return path45 ? `<polyline points="${path45}" stroke="${stroke}" stroke-width="1.4" fill="none" stroke-linecap="round"/>` : "";
|
|
184553
184952
|
}
|
|
184554
184953
|
case "text": {
|
|
184555
184954
|
const size = Math.max(4, Math.min(28, h9 || 12 * scale));
|
|
@@ -184675,9 +185074,9 @@ function documentDrawing(title, payload) {
|
|
|
184675
185074
|
});
|
|
184676
185075
|
y5 += rows.length * 22 + 10;
|
|
184677
185076
|
} else if (type === "list") {
|
|
184678
|
-
children(block.children).slice(0, 4).forEach((
|
|
185077
|
+
children(block.children).slice(0, 4).forEach((item3, i7) => {
|
|
184679
185078
|
parts.push(text4(104, y5, block.listType === "number" ? `${i7 + 1}.` : "\u2022"));
|
|
184680
|
-
lines(nodeText(
|
|
185079
|
+
lines(nodeText(item3), 9, 2, 13);
|
|
184681
185080
|
});
|
|
184682
185081
|
y5 += 8;
|
|
184683
185082
|
} else if (type === "alert-quote") {
|
|
@@ -185085,8 +185484,8 @@ var clientSocketRoute = {
|
|
|
185085
185484
|
};
|
|
185086
185485
|
|
|
185087
185486
|
// src/server/routes/viewer.ts
|
|
185088
|
-
var
|
|
185089
|
-
var
|
|
185487
|
+
var import_node_fs39 = __toESM(require("node:fs"), 1);
|
|
185488
|
+
var import_node_path36 = __toESM(require("node:path"), 1);
|
|
185090
185489
|
|
|
185091
185490
|
// src/shared/type-icons.ts
|
|
185092
185491
|
var TYPE_GLYPHS = {
|
|
@@ -185215,8 +185614,8 @@ function serveShell(req, res, ctx, { pathname, key: key2 }, embedded) {
|
|
|
185215
185614
|
if (ref) headers["Referrer-Policy"] = "same-origin";
|
|
185216
185615
|
if (key2 !== null && !loopback)
|
|
185217
185616
|
headers["Set-Cookie"] = `${ctx.cookieName}=${ctx.token}; HttpOnly; SameSite=Strict; Path=/`;
|
|
185218
|
-
const entry = preview2 &&
|
|
185219
|
-
void
|
|
185617
|
+
const entry = preview2 && import_node_fs39.default.existsSync(import_node_path36.default.join(viewerDir, "preview.html")) ? "preview.html" : "index.html";
|
|
185618
|
+
void import_node_fs39.default.promises.readFile(import_node_path36.default.join(viewerDir, entry), "utf8").then((template) => {
|
|
185220
185619
|
const html = viewerPage(template, {
|
|
185221
185620
|
title,
|
|
185222
185621
|
description,
|
|
@@ -185568,7 +185967,7 @@ async function startArtifactsServer(options2) {
|
|
|
185568
185967
|
} catch {
|
|
185569
185968
|
ctx.port = await listen(server, options2.host, 0);
|
|
185570
185969
|
}
|
|
185571
|
-
|
|
185970
|
+
import_node_fs40.default.writeFileSync(ctx.portFile, `${ctx.port}
|
|
185572
185971
|
`, { mode: 384 });
|
|
185573
185972
|
}
|
|
185574
185973
|
const port = ctx.port;
|
|
@@ -185577,7 +185976,7 @@ async function startArtifactsServer(options2) {
|
|
|
185577
185976
|
const boardServer = import_node_http.default.createServer(handleBoardRequest);
|
|
185578
185977
|
if (mount) ctx.boardPort = mount.boardPort;
|
|
185579
185978
|
else if (loopback) {
|
|
185580
|
-
const boardPortFile =
|
|
185979
|
+
const boardPortFile = import_node_path37.default.join(stateDir, BOARD_PORT_FILE);
|
|
185581
185980
|
const previousBoardPort = Number(readPersisted(boardPortFile));
|
|
185582
185981
|
try {
|
|
185583
185982
|
ctx.boardPort = await listen(
|
|
@@ -185588,7 +185987,7 @@ async function startArtifactsServer(options2) {
|
|
|
185588
185987
|
} catch {
|
|
185589
185988
|
ctx.boardPort = await listen(boardServer, options2.host, 0);
|
|
185590
185989
|
}
|
|
185591
|
-
|
|
185990
|
+
import_node_fs40.default.writeFileSync(boardPortFile, `${ctx.boardPort}
|
|
185592
185991
|
`, { mode: 384 });
|
|
185593
185992
|
}
|
|
185594
185993
|
const boardPort = ctx.boardPort;
|
|
@@ -185607,7 +186006,7 @@ async function startArtifactsServer(options2) {
|
|
|
185607
186006
|
initialChanges.push({ ref: entry, payload, files: [] });
|
|
185608
186007
|
if (entry.type === "document") void ctx.documents.open(entry.id);
|
|
185609
186008
|
}
|
|
185610
|
-
writeJsonAtomic(
|
|
186009
|
+
writeJsonAtomic(import_node_path37.default.join(stateDir, "server-info"), {
|
|
185611
186010
|
type: "server-started",
|
|
185612
186011
|
url,
|
|
185613
186012
|
port,
|
|
@@ -185691,66 +186090,66 @@ async function startArtifactsServer(options2) {
|
|
|
185691
186090
|
});
|
|
185692
186091
|
await ctx.documents.close().catch(() => void 0);
|
|
185693
186092
|
ctx.whiteboards.close();
|
|
185694
|
-
if (mount)
|
|
186093
|
+
if (mount) import_node_fs40.default.rmSync(import_node_path37.default.join(stateDir, "server-info"), { force: true });
|
|
185695
186094
|
}
|
|
185696
186095
|
};
|
|
185697
186096
|
}
|
|
185698
186097
|
var mountArtifactsProject = (options2) => startArtifactsServer(options2);
|
|
185699
186098
|
|
|
185700
186099
|
// src/server/artifact-index.ts
|
|
185701
|
-
var
|
|
185702
|
-
var
|
|
186100
|
+
var import_node_fs42 = __toESM(require("node:fs"), 1);
|
|
186101
|
+
var import_node_path39 = __toESM(require("node:path"), 1);
|
|
185703
186102
|
|
|
185704
186103
|
// src/server/machine.ts
|
|
185705
|
-
var
|
|
186104
|
+
var import_node_fs41 = __toESM(require("node:fs"), 1);
|
|
185706
186105
|
var import_node_os = __toESM(require("node:os"), 1);
|
|
185707
|
-
var
|
|
186106
|
+
var import_node_path38 = __toESM(require("node:path"), 1);
|
|
185708
186107
|
var DORMANT_AFTER_MS = 7 * 24 * 60 * 60 * 1e3;
|
|
185709
186108
|
function machinePaths(env = process.env, homedir = import_node_os.default.homedir()) {
|
|
185710
|
-
const home = env.RYUGI_SERVER_HOME ||
|
|
186109
|
+
const home = env.RYUGI_SERVER_HOME || import_node_path38.default.join(homedir, ".ryugi", "server");
|
|
185711
186110
|
return {
|
|
185712
186111
|
home,
|
|
185713
|
-
pid:
|
|
185714
|
-
serverId:
|
|
185715
|
-
info:
|
|
185716
|
-
log:
|
|
185717
|
-
version:
|
|
185718
|
-
lock:
|
|
185719
|
-
key:
|
|
185720
|
-
projects:
|
|
185721
|
-
settings:
|
|
185722
|
-
stopped:
|
|
186112
|
+
pid: import_node_path38.default.join(home, "server.pid"),
|
|
186113
|
+
serverId: import_node_path38.default.join(home, "server-instance-id"),
|
|
186114
|
+
info: import_node_path38.default.join(home, "server-info"),
|
|
186115
|
+
log: import_node_path38.default.join(home, "server.log"),
|
|
186116
|
+
version: import_node_path38.default.join(home, "server-version"),
|
|
186117
|
+
lock: import_node_path38.default.join(home, "start.lock"),
|
|
186118
|
+
key: import_node_path38.default.join(home, "key"),
|
|
186119
|
+
projects: import_node_path38.default.join(home, "projects.json"),
|
|
186120
|
+
settings: import_node_path38.default.join(home, "settings.json"),
|
|
186121
|
+
stopped: import_node_path38.default.join(home, "server-stopped")
|
|
185723
186122
|
};
|
|
185724
186123
|
}
|
|
185725
186124
|
function ensureHome(home) {
|
|
185726
|
-
|
|
185727
|
-
|
|
186125
|
+
import_node_fs41.default.mkdirSync(home, { recursive: true, mode: 448 });
|
|
186126
|
+
import_node_fs41.default.chmodSync(home, 448);
|
|
185728
186127
|
}
|
|
185729
186128
|
var realDir = (dir) => {
|
|
185730
186129
|
try {
|
|
185731
|
-
return
|
|
186130
|
+
return import_node_fs41.default.realpathSync(import_node_path38.default.resolve(dir));
|
|
185732
186131
|
} catch {
|
|
185733
|
-
return
|
|
186132
|
+
return import_node_path38.default.resolve(dir);
|
|
185734
186133
|
}
|
|
185735
186134
|
};
|
|
185736
186135
|
var validEntry = (value) => {
|
|
185737
186136
|
const entry = value;
|
|
185738
|
-
return !!entry && typeof entry.dir === "string" &&
|
|
186137
|
+
return !!entry && typeof entry.dir === "string" && import_node_path38.default.isAbsolute(entry.dir) && Number.isFinite(entry.registeredAt) && Number.isFinite(entry.lastUsedAt);
|
|
185739
186138
|
};
|
|
185740
186139
|
function readProjects(file) {
|
|
185741
186140
|
try {
|
|
185742
|
-
const value = JSON.parse(
|
|
186141
|
+
const value = JSON.parse(import_node_fs41.default.readFileSync(file, "utf8"));
|
|
185743
186142
|
return Array.isArray(value.projects) ? value.projects.filter(validEntry) : [];
|
|
185744
186143
|
} catch {
|
|
185745
186144
|
return [];
|
|
185746
186145
|
}
|
|
185747
186146
|
}
|
|
185748
186147
|
function writeProjects(file, projects) {
|
|
185749
|
-
ensureHome(
|
|
186148
|
+
ensureHome(import_node_path38.default.dirname(file));
|
|
185750
186149
|
const tmp = `${file}.${process.pid}.tmp`;
|
|
185751
|
-
|
|
186150
|
+
import_node_fs41.default.writeFileSync(tmp, `${JSON.stringify({ projects }, null, 2)}
|
|
185752
186151
|
`, { mode: 384 });
|
|
185753
|
-
|
|
186152
|
+
import_node_fs41.default.renameSync(tmp, file);
|
|
185754
186153
|
}
|
|
185755
186154
|
function registerProject(file, projectDir, now = Date.now()) {
|
|
185756
186155
|
const dir = realDir(projectDir);
|
|
@@ -185767,10 +186166,10 @@ function removeProject(file, projectDir) {
|
|
|
185767
186166
|
const kept = projects.filter((entry) => entry.dir !== dir);
|
|
185768
186167
|
if (kept.length !== projects.length) writeProjects(file, kept);
|
|
185769
186168
|
}
|
|
185770
|
-
var artifactsRootOf = (projectDir) =>
|
|
186169
|
+
var artifactsRootOf = (projectDir) => import_node_path38.default.join(projectDir, ".ryugi", "artifacts");
|
|
185771
186170
|
function pruneProjects(file) {
|
|
185772
186171
|
const projects = readProjects(file);
|
|
185773
|
-
const kept = projects.filter((entry) =>
|
|
186172
|
+
const kept = projects.filter((entry) => import_node_fs41.default.existsSync(artifactsRootOf(entry.dir)));
|
|
185774
186173
|
if (kept.length !== projects.length) writeProjects(file, kept);
|
|
185775
186174
|
return kept;
|
|
185776
186175
|
}
|
|
@@ -185779,7 +186178,7 @@ var isDormant = (entry, now = Date.now()) => now - entry.lastUsedAt > DORMANT_AF
|
|
|
185779
186178
|
// src/server/artifact-index.ts
|
|
185780
186179
|
var readAddress = (dir) => {
|
|
185781
186180
|
try {
|
|
185782
|
-
const value =
|
|
186181
|
+
const value = import_node_fs42.default.readFileSync(import_node_path39.default.join(dir, ".artifact-id"), "utf8").trim();
|
|
185783
186182
|
return isArtifactAddress(value) ? value : null;
|
|
185784
186183
|
} catch {
|
|
185785
186184
|
return null;
|
|
@@ -185787,7 +186186,7 @@ var readAddress = (dir) => {
|
|
|
185787
186186
|
};
|
|
185788
186187
|
var mtimeOf2 = (dir) => {
|
|
185789
186188
|
try {
|
|
185790
|
-
return
|
|
186189
|
+
return import_node_fs42.default.statSync(dir).mtimeMs;
|
|
185791
186190
|
} catch {
|
|
185792
186191
|
return 0;
|
|
185793
186192
|
}
|
|
@@ -185886,7 +186285,7 @@ var ARTIFACT_KEY = /^(?:artboard|document|html)\/[a-z0-9][a-z0-9-]*$/;
|
|
|
185886
186285
|
var SEP = "\n";
|
|
185887
186286
|
var realDir2 = (dir) => {
|
|
185888
186287
|
try {
|
|
185889
|
-
return
|
|
186288
|
+
return import_node_fs43.default.realpathSync(import_node_path40.default.resolve(dir));
|
|
185890
186289
|
} catch {
|
|
185891
186290
|
return null;
|
|
185892
186291
|
}
|
|
@@ -185944,7 +186343,7 @@ async function startHub(options2) {
|
|
|
185944
186343
|
runtimeDir: options2.runtimeDir,
|
|
185945
186344
|
host: options2.host,
|
|
185946
186345
|
urlHost: options2.urlHost,
|
|
185947
|
-
configFile:
|
|
186346
|
+
configFile: import_node_path40.default.join(project, ".ryugi", "config.json"),
|
|
185948
186347
|
cloud: options2.cloud,
|
|
185949
186348
|
fetch: options2.fetch,
|
|
185950
186349
|
debounceMs: options2.debounceMs,
|
|
@@ -185959,7 +186358,7 @@ async function startHub(options2) {
|
|
|
185959
186358
|
}
|
|
185960
186359
|
return pending;
|
|
185961
186360
|
};
|
|
185962
|
-
const configFileOf = (project) =>
|
|
186361
|
+
const configFileOf = (project) => import_node_path40.default.join(project, ".ryugi", "config.json");
|
|
185963
186362
|
const servedBy = (project) => {
|
|
185964
186363
|
const mounted = ready.get(project);
|
|
185965
186364
|
if (mounted) return mounted.served();
|
|
@@ -186006,10 +186405,10 @@ async function startHub(options2) {
|
|
|
186006
186405
|
}) : null;
|
|
186007
186406
|
const origin = `http://${urlHostForHttp(options2.urlHost)}:${port}`;
|
|
186008
186407
|
const url = loopback ? `${origin}/` : `${origin}/?key=${options2.token}`;
|
|
186009
|
-
const infoFileOf = (project) =>
|
|
186408
|
+
const infoFileOf = (project) => import_node_path40.default.join(artifactsRootOf(project), ".state", "server-info");
|
|
186010
186409
|
const writeCompatInfo = (project) => {
|
|
186011
186410
|
try {
|
|
186012
|
-
|
|
186411
|
+
import_node_fs43.default.mkdirSync(import_node_path40.default.dirname(infoFileOf(project)), { recursive: true, mode: 448 });
|
|
186013
186412
|
writeJsonAtomic(infoFileOf(project), {
|
|
186014
186413
|
type: "server-started",
|
|
186015
186414
|
url,
|
|
@@ -186028,7 +186427,7 @@ async function startHub(options2) {
|
|
|
186028
186427
|
counts.set(entry.project, (counts.get(entry.project) ?? 0) + 1);
|
|
186029
186428
|
return ordered3().map((entry) => ({
|
|
186030
186429
|
dir: entry.dir,
|
|
186031
|
-
name:
|
|
186430
|
+
name: import_node_path40.default.basename(entry.dir),
|
|
186032
186431
|
lastUsedAt: entry.lastUsedAt,
|
|
186033
186432
|
dormant: isDormant(entry),
|
|
186034
186433
|
artifacts: counts.get(entry.dir) ?? 0
|
|
@@ -186041,7 +186440,7 @@ async function startHub(options2) {
|
|
|
186041
186440
|
const root = artifactsRootOf(entry.dir);
|
|
186042
186441
|
const listed = listArtifacts(root);
|
|
186043
186442
|
for (const warning of listed.warnings)
|
|
186044
|
-
warnings.push(`${
|
|
186443
|
+
warnings.push(`${import_node_path40.default.basename(entry.dir)}: ${warning}`);
|
|
186045
186444
|
for (const artifact of listed.artifacts) {
|
|
186046
186445
|
try {
|
|
186047
186446
|
artifacts.push({
|
|
@@ -186092,7 +186491,7 @@ async function startHub(options2) {
|
|
|
186092
186491
|
};
|
|
186093
186492
|
const publishedIn = (project, cloudId) => {
|
|
186094
186493
|
try {
|
|
186095
|
-
const { artifacts } = readConfig(
|
|
186494
|
+
const { artifacts } = readConfig(import_node_path40.default.join(project, ".ryugi", "config.json")).config;
|
|
186096
186495
|
return Object.values(artifacts).some((entry) => entry.cloud?.id === cloudId);
|
|
186097
186496
|
} catch {
|
|
186098
186497
|
return false;
|
|
@@ -186155,7 +186554,7 @@ async function startHub(options2) {
|
|
|
186155
186554
|
const register = async (dir, open2) => {
|
|
186156
186555
|
const real = realDir2(dir);
|
|
186157
186556
|
if (!real) throw new Error(`Project directory not found: ${dir}`);
|
|
186158
|
-
|
|
186557
|
+
import_node_fs43.default.mkdirSync(artifactsRootOf(real), { recursive: true });
|
|
186159
186558
|
const entry = registerProject(projectsFile, real);
|
|
186160
186559
|
index.rescan();
|
|
186161
186560
|
writeCompatInfo(real);
|
|
@@ -186165,10 +186564,10 @@ async function startHub(options2) {
|
|
|
186165
186564
|
return entry;
|
|
186166
186565
|
};
|
|
186167
186566
|
const remove2 = async (dir) => {
|
|
186168
|
-
const real = realDir2(dir) ??
|
|
186567
|
+
const real = realDir2(dir) ?? import_node_path40.default.resolve(dir);
|
|
186169
186568
|
removeProject(projectsFile, real);
|
|
186170
186569
|
index.rescan();
|
|
186171
|
-
|
|
186570
|
+
import_node_fs43.default.rmSync(infoFileOf(real), { force: true });
|
|
186172
186571
|
const pending = mounts.get(real);
|
|
186173
186572
|
mounts.delete(real);
|
|
186174
186573
|
ready.delete(real);
|
|
@@ -186176,17 +186575,17 @@ async function startHub(options2) {
|
|
|
186176
186575
|
};
|
|
186177
186576
|
const logTail = (project) => {
|
|
186178
186577
|
try {
|
|
186179
|
-
const fd3 =
|
|
186578
|
+
const fd3 = import_node_fs43.default.openSync(options2.paths.log, "r");
|
|
186180
186579
|
try {
|
|
186181
|
-
const size =
|
|
186580
|
+
const size = import_node_fs43.default.fstatSync(fd3).size;
|
|
186182
186581
|
const length = Math.min(size, LOG_TAIL_BYTES);
|
|
186183
186582
|
const buffer = Buffer.alloc(length);
|
|
186184
|
-
|
|
186583
|
+
import_node_fs43.default.readSync(fd3, buffer, 0, length, size - length);
|
|
186185
186584
|
const lines = buffer.toString("utf8").split("\n").filter(Boolean);
|
|
186186
186585
|
if (length < size) lines.shift();
|
|
186187
186586
|
return lines.filter((line2) => !project || line2.includes(project)).slice(-LOG_TAIL_LINES);
|
|
186188
186587
|
} finally {
|
|
186189
|
-
|
|
186588
|
+
import_node_fs43.default.closeSync(fd3);
|
|
186190
186589
|
}
|
|
186191
186590
|
} catch {
|
|
186192
186591
|
return [];
|
|
@@ -186324,7 +186723,7 @@ async function startHub(options2) {
|
|
|
186324
186723
|
mounts.clear();
|
|
186325
186724
|
ready.clear();
|
|
186326
186725
|
await Promise.all(all.map(async (pending) => (await pending.catch(() => null))?.close()));
|
|
186327
|
-
for (const entry of ordered3())
|
|
186726
|
+
for (const entry of ordered3()) import_node_fs43.default.rmSync(infoFileOf(entry.dir), { force: true });
|
|
186328
186727
|
for (const server of [front, board]) server.closeAllConnections();
|
|
186329
186728
|
await Promise.all(stopped);
|
|
186330
186729
|
}
|
|
@@ -186333,8 +186732,8 @@ async function startHub(options2) {
|
|
|
186333
186732
|
|
|
186334
186733
|
// src/server/relaunch.ts
|
|
186335
186734
|
var import_node_child_process4 = require("node:child_process");
|
|
186336
|
-
var
|
|
186337
|
-
var
|
|
186735
|
+
var import_node_fs44 = __toESM(require("node:fs"), 1);
|
|
186736
|
+
var import_node_path41 = __toESM(require("node:path"), 1);
|
|
186338
186737
|
var LAUNCHER_COMMAND = /^node "(.+)"$/;
|
|
186339
186738
|
var WAIT_THEN_RUN = `
|
|
186340
186739
|
const [pid, file, ...args] = process.argv.slice(1);
|
|
@@ -186348,20 +186747,20 @@ tick();
|
|
|
186348
186747
|
function relaunchCommand(env, serverDir) {
|
|
186349
186748
|
const launcher = LAUNCHER_COMMAND.exec(env.RYUGI_ARTIFACTS_LAUNCHER ?? "")?.[1];
|
|
186350
186749
|
if (launcher) return [process.execPath, launcher];
|
|
186351
|
-
const cli =
|
|
186352
|
-
return
|
|
186750
|
+
const cli = import_node_path41.default.join(serverDir, "cli.cjs");
|
|
186751
|
+
return import_node_fs44.default.existsSync(cli) ? [process.execPath, cli] : null;
|
|
186353
186752
|
}
|
|
186354
186753
|
function pinLauncherRelease(env, homedir, version3, now = Date.now()) {
|
|
186355
|
-
const releases =
|
|
186356
|
-
env.XDG_CACHE_HOME ||
|
|
186754
|
+
const releases = import_node_path41.default.join(
|
|
186755
|
+
env.XDG_CACHE_HOME || import_node_path41.default.join(homedir, ".cache"),
|
|
186357
186756
|
"ryugi",
|
|
186358
186757
|
"artifacts"
|
|
186359
186758
|
);
|
|
186360
|
-
|
|
186361
|
-
const file =
|
|
186759
|
+
import_node_fs44.default.mkdirSync(releases, { recursive: true });
|
|
186760
|
+
const file = import_node_path41.default.join(releases, "latest.json");
|
|
186362
186761
|
const tmp = `${file}.${process.pid}`;
|
|
186363
|
-
|
|
186364
|
-
|
|
186762
|
+
import_node_fs44.default.writeFileSync(tmp, JSON.stringify({ version: version3, checkedAt: now }));
|
|
186763
|
+
import_node_fs44.default.renameSync(tmp, file);
|
|
186365
186764
|
}
|
|
186366
186765
|
function spawnAfterExit(pid, argv, env = process.env) {
|
|
186367
186766
|
const [file, ...args] = argv;
|
|
@@ -186375,7 +186774,7 @@ function spawnAfterExit(pid, argv, env = process.env) {
|
|
|
186375
186774
|
}
|
|
186376
186775
|
|
|
186377
186776
|
// src/server/update-check.ts
|
|
186378
|
-
var
|
|
186777
|
+
var import_node_fs45 = __toESM(require("node:fs"), 1);
|
|
186379
186778
|
var REGISTRY_URL = "https://registry.npmjs.org/ryugi-artifacts/latest";
|
|
186380
186779
|
var DAY_MS = 24 * 60 * 60 * 1e3;
|
|
186381
186780
|
var TIMEOUT_MS2 = 5e3;
|
|
@@ -186390,7 +186789,7 @@ function newerVersion(candidate, current) {
|
|
|
186390
186789
|
}
|
|
186391
186790
|
function readCache(file) {
|
|
186392
186791
|
try {
|
|
186393
|
-
const value = JSON.parse(
|
|
186792
|
+
const value = JSON.parse(import_node_fs45.default.readFileSync(file, "utf8"));
|
|
186394
186793
|
return typeof value.version === "string" && Number.isFinite(value.checkedAt) ? value : null;
|
|
186395
186794
|
} catch {
|
|
186396
186795
|
return null;
|
|
@@ -186414,7 +186813,7 @@ function createUpdateCheck(options2) {
|
|
|
186414
186813
|
const { version: version3 } = await res.json();
|
|
186415
186814
|
if (typeof version3 !== "string") return;
|
|
186416
186815
|
cached = { version: version3, checkedAt: now() };
|
|
186417
|
-
|
|
186816
|
+
import_node_fs45.default.writeFileSync(options2.cacheFile, `${JSON.stringify(cached)}
|
|
186418
186817
|
`, { mode: 384 });
|
|
186419
186818
|
} catch {
|
|
186420
186819
|
}
|
|
@@ -186426,12 +186825,12 @@ function createUpdateCheck(options2) {
|
|
|
186426
186825
|
var UPDATE_POLL_MS = 60 * 60 * 1e3;
|
|
186427
186826
|
function machineKey(file) {
|
|
186428
186827
|
try {
|
|
186429
|
-
const key3 =
|
|
186828
|
+
const key3 = import_node_fs46.default.readFileSync(file, "utf8").trim();
|
|
186430
186829
|
if (/^[a-f0-9]{48}$/.test(key3)) return key3;
|
|
186431
186830
|
} catch {
|
|
186432
186831
|
}
|
|
186433
186832
|
const key2 = import_node_crypto13.default.randomBytes(24).toString("hex");
|
|
186434
|
-
|
|
186833
|
+
import_node_fs46.default.writeFileSync(file, `${key2}
|
|
186435
186834
|
`, { mode: 384 });
|
|
186436
186835
|
return key2;
|
|
186437
186836
|
}
|
|
@@ -186440,14 +186839,14 @@ async function main2() {
|
|
|
186440
186839
|
const paths = machinePaths();
|
|
186441
186840
|
ensureHome(paths.home);
|
|
186442
186841
|
const updates = createUpdateCheck({
|
|
186443
|
-
cacheFile:
|
|
186842
|
+
cacheFile: import_node_path42.default.join(paths.home, "latest.json"),
|
|
186444
186843
|
current: version
|
|
186445
186844
|
});
|
|
186446
186845
|
const hub = await startHub({
|
|
186447
186846
|
host: config.host,
|
|
186448
186847
|
urlHost: config.urlHost,
|
|
186449
|
-
viewerDir:
|
|
186450
|
-
runtimeDir:
|
|
186848
|
+
viewerDir: import_node_path42.default.join(__dirname, "viewer"),
|
|
186849
|
+
runtimeDir: import_node_path42.default.join(__dirname, "runtime"),
|
|
186451
186850
|
ports: config.ports,
|
|
186452
186851
|
boardPorts: config.boardPorts,
|
|
186453
186852
|
paths,
|
|
@@ -186484,14 +186883,14 @@ async function main2() {
|
|
|
186484
186883
|
if (stopping) return;
|
|
186485
186884
|
stopping = true;
|
|
186486
186885
|
console.info(JSON.stringify({ type: "server-stopped", reason, at: (/* @__PURE__ */ new Date()).toISOString() }));
|
|
186487
|
-
|
|
186886
|
+
import_node_fs46.default.rmSync(paths.info, { force: true });
|
|
186488
186887
|
if (intended) writeJsonAtomic(paths.stopped, { reason, timestamp: Date.now() });
|
|
186489
186888
|
await hub.close();
|
|
186490
186889
|
process.exit(0);
|
|
186491
186890
|
}
|
|
186492
186891
|
function readRunningVersion() {
|
|
186493
186892
|
try {
|
|
186494
|
-
return
|
|
186893
|
+
return import_node_fs46.default.readFileSync(paths.version, "utf8").trim() || version;
|
|
186495
186894
|
} catch {
|
|
186496
186895
|
return version;
|
|
186497
186896
|
}
|
|
@@ -186534,7 +186933,7 @@ async function main2() {
|
|
|
186534
186933
|
process.on("SIGTERM", () => void shutdown("SIGTERM"));
|
|
186535
186934
|
process.on("SIGINT", () => void shutdown("SIGINT"));
|
|
186536
186935
|
process.on("SIGHUP", () => void shutdown("SIGHUP"));
|
|
186537
|
-
|
|
186936
|
+
import_node_fs46.default.rmSync(paths.stopped, { force: true });
|
|
186538
186937
|
const started = {
|
|
186539
186938
|
type: "server-started",
|
|
186540
186939
|
url: hub.url,
|