@ryan_nookpi/pi-skill-excalidraw 0.1.4 → 0.2.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/README.md +3 -0
- package/package.json +5 -3
- package/skills/excalidraw/SKILL.md +22 -0
- package/skills/excalidraw/app/dist/assets/{abnfDiagram-VCTEODGH-CZIuQcX5.js → abnfDiagram-VCTEODGH-CAT6DKw3.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{ar-SA-G6X2FPQ2-e2g2uVLm.js → ar-SA-G6X2FPQ2-D-Try6v-.js} +1 -1
- package/skills/excalidraw/app/dist/assets/architecture-7GRP2DOG-Dcnt3QC3.js +1 -0
- package/skills/excalidraw/app/dist/assets/{architectureDiagram-5GKGNRK7-JZq1kTdB.js → architectureDiagram-5GKGNRK7-TQjasTUW.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{az-AZ-76LH7QW2-C6UtibTN.js → az-AZ-76LH7QW2-Qn7-1ci1.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{bg-BG-XCXSNQG7-xGOrRa6w.js → bg-BG-XCXSNQG7-8-U_jx9I.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{blockDiagram-I7D4REHJ-Do9SvsPC.js → blockDiagram-I7D4REHJ-CWLpln-Z.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{bn-BD-2XOGV67Q-96ofOCIB.js → bn-BD-2XOGV67Q-Cz-3YvD1.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{c4Diagram-7LVT6UL2-5ue2hi5B.js → c4Diagram-7LVT6UL2-I5V5jWDp.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{ca-ES-6MX7JW3Y-DoJHtTpz.js → ca-ES-6MX7JW3Y-HqIeM05s.js} +1 -1
- package/skills/excalidraw/app/dist/assets/channel-BIPx3eah.js +1 -0
- package/skills/excalidraw/app/dist/assets/{chunk-4HAMMTFA-BJl8f4hj.js → chunk-4HAMMTFA-CzZxlTpE.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{chunk-75Z2AOVW-BEZtmt_5.js → chunk-75Z2AOVW-CbeuR4Ot.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{chunk-DU6HZSFF-BbRzTxIu.js → chunk-DU6HZSFF-DZz78Un3.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{chunk-EIO257PC-CDf-LIGO.js → chunk-EIO257PC-IMKc9z-9.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{chunk-F27PBJKO-MV5PD49O.js → chunk-F27PBJKO-CGicDwdm.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{chunk-GMAD6QVW-u83hsId7.js → chunk-GMAD6QVW-DThxvp5C.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{chunk-GVQU2GXP-DhRGdiur.js → chunk-GVQU2GXP-9aTtlsAc.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{chunk-IMKFNOWR-LcKd9v9s.js → chunk-IMKFNOWR-BWC22GUm.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{chunk-L3NEJ4N5-cDOiUn0I.js → chunk-L3NEJ4N5-Diwx5yin.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{chunk-OSK3NFVY-GcK4QREf.js → chunk-OSK3NFVY-Dv40KCwY.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{chunk-P2QGCYS3-Ch37Dd6P.js → chunk-P2QGCYS3-DUBD_aub.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{chunk-POPQ4Y6H-ChWUKdmB.js → chunk-POPQ4Y6H-BAegQTfz.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{chunk-PWAF6VOD-CW5GCk0X.js → chunk-PWAF6VOD-DxytMMtq.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{chunk-SHT3W25Y-DffgJ0n3.js → chunk-SHT3W25Y-fU6PKi4c.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{chunk-SVP7TREG-BNSeHPRk.js → chunk-SVP7TREG-D0VwXMvM.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{chunk-TICWLB2K-C6rdEwMp.js → chunk-TICWLB2K-CMzIChvJ.js} +1 -1
- package/skills/excalidraw/app/dist/assets/classDiagram-ZZMXUADV-Bj88vXVK.js +1 -0
- package/skills/excalidraw/app/dist/assets/classDiagram-v2-VYDZK3BY-Bj88vXVK.js +1 -0
- package/skills/excalidraw/app/dist/assets/{cs-CZ-2BRQDIVT-BE0Wk0Du.js → cs-CZ-2BRQDIVT-C5s4TCP8.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{cynefin-OW5HDTMX-TLJoQn41.js → cynefin-OW5HDTMX-Dpz7zEdx.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{cynefinDiagram-5FMLGOSQ-rC-HSjVV.js → cynefinDiagram-5FMLGOSQ-BvWrIxfb.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{da-DK-5WZEPLOC-Cs3oblPs.js → da-DK-5WZEPLOC-D9rc8rmW.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{dagre-GXQ25YYZ-wyUKclSr.js → dagre-GXQ25YYZ-CyF_ZIu7.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{de-DE-XR44H4JA-u3VqZl5o.js → de-DE-XR44H4JA-DHSBC4Nt.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{diagram-S7CK7UJ4-BA0zr9Ln.js → diagram-S7CK7UJ4-BwImP6lx.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{diagram-UQ7AKVKN-BrmvEPwN.js → diagram-UQ7AKVKN-By4IdyHa.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{diagram-VSXAHHWV-D_79GLkd.js → diagram-VSXAHHWV-DeMdkgpT.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{diagram-VX7I27RA-D6MiLZH3.js → diagram-VX7I27RA-n_LiTBMb.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{diagram-Z3DM3KII-DUBocNEy.js → diagram-Z3DM3KII-CIBREgKF.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{dist-CZtRAIh5.js → dist-CGUgmxmI.js} +4 -4
- package/skills/excalidraw/app/dist/assets/{ebnfDiagram-PWID7BFC-Bok_2JTv.js → ebnfDiagram-PWID7BFC-DxOEB4FQ.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{el-GR-BZB4AONW-C8dhXUCR.js → el-GR-BZB4AONW-YC6MeIfW.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{en-B4ZKOASM-CuIv77eQ.js → en-B4ZKOASM-CVx0ANl4.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{erDiagram-RLTQ6QDP-DmZZemzY.js → erDiagram-RLTQ6QDP-C0EZkOW8.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{es-ES-U4NZUMDT-DUMCK6Ck.js → es-ES-U4NZUMDT-n674Yc5D.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{eu-ES-A7QVB2H4-CVLkKQxE.js → eu-ES-A7QVB2H4-DrKvWa2H.js} +1 -1
- package/skills/excalidraw/app/dist/assets/eventmodeling-NTZA5JFV-CDYflXz5.js +1 -0
- package/skills/excalidraw/app/dist/assets/{fa-IR-HGAKTJCU-DGiyThKe.js → fa-IR-HGAKTJCU-CxvVhkhK.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{fi-FI-Z5N7JZ37-D4go03qO.js → fi-FI-Z5N7JZ37-wx_WBXUB.js} +1 -1
- package/skills/excalidraw/app/dist/assets/flowDiagram-HODETNUW-DeM3MgFB.js +1 -0
- package/skills/excalidraw/app/dist/assets/{fr-FR-RHASNOE6-D87DQ39u.js → fr-FR-RHASNOE6-DQxC7xdf.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{ganttDiagram-EL5Y4UJY-7cVW9NNi.js → ganttDiagram-EL5Y4UJY-Cjre33Qa.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{gitGraph-4MIJSDKK-BEY40yrV.js → gitGraph-4MIJSDKK-DWb2qgLi.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{gitGraphDiagram-WWUBYQGX-B-Lfvb9V.js → gitGraphDiagram-WWUBYQGX-BVjMYFvo.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{gl-ES-HMX3MZ6V-Df79IgqG.js → gl-ES-HMX3MZ6V-Ut8TQ5K1.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{he-IL-6SHJWFNN-B2MduYIk.js → he-IL-6SHJWFNN-hNDhtKos.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{hi-IN-IWLTKZ5I-DzfZntbn.js → hi-IN-IWLTKZ5I-CDHD1JSu.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{hu-HU-A5ZG7DT2-ZCfdicPP.js → hu-HU-A5ZG7DT2-XSuA1YRk.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{id-ID-SAP4L64H-B3X6T4rm.js → id-ID-SAP4L64H-BKoBj6-S.js} +1 -1
- package/skills/excalidraw/app/dist/assets/image-GAAHSSAO-B49j11sb.js +1 -0
- package/skills/excalidraw/app/dist/assets/index-D6RZCno-.js +208 -0
- package/skills/excalidraw/app/dist/assets/{info-A6RAGUB7-CL9tRM1h.js → info-A6RAGUB7-BnY7WMiD.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{infoDiagram-27XIBGKW-R3aiYNu9.js → infoDiagram-27XIBGKW-BipEmlkR.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{ishikawaDiagram-5VMMS53U-DTESLM2m.js → ishikawaDiagram-5VMMS53U-CfOkzSVR.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{it-IT-JPQ66NNP-BmfCqD8E.js → it-IT-JPQ66NNP-I5FJRjHl.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{ja-JP-DBVTYXUO-poCtVssg.js → ja-JP-DBVTYXUO-DGXZ0Q0r.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{journeyDiagram-3NMN7TZE-hXNITeol.js → journeyDiagram-3NMN7TZE-DgYBVujj.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{kaa-6HZHGXH3-CMGm4sKC.js → kaa-6HZHGXH3-x-UWcOLs.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{kab-KAB-ZGHBKWFO-BZgJVp25.js → kab-KAB-ZGHBKWFO-Bf574YEO.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{kanban-definition-UXKFOSKX-C6s-BUcU.js → kanban-definition-UXKFOSKX-DqVdN98o.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{kk-KZ-P5N5QNE5-PW7XBW8H.js → kk-KZ-P5N5QNE5-Pum9byuH.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{km-KH-HSX4SM5Z-CiDy4UGb.js → km-KH-HSX4SM5Z-DRF2eVac.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{ko-KR-MTYHY66A-_I465Tst.js → ko-KR-MTYHY66A-CWKvj0c2.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{ku-TR-6OUDTVRD-CxhJqtX5.js → ku-TR-6OUDTVRD-C6zZLgAR.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{line-Dib4X-Fq.js → line-BQdgLOJP.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{lt-LT-XHIRWOB4-D3ULh7Sf.js → lt-LT-XHIRWOB4-CQ3CcWcK.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{lv-LV-5QDEKY6T-DM0hHv9d.js → lv-LV-5QDEKY6T-DsrNn0LB.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{mermaid-parser.core-BjygNlZP.js → mermaid-parser.core-m_sjIMK3.js} +3 -3
- package/skills/excalidraw/app/dist/assets/{mindmap-definition-YA3MSWOX-Co0kxZ_S.js → mindmap-definition-YA3MSWOX-DBaPsSkE.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{mr-IN-CRQNXWMA-Cm2Y9UIN.js → mr-IN-CRQNXWMA-MADaVhJ-.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{my-MM-5M5IBNSE-C0b98C9v.js → my-MM-5M5IBNSE-BJTnNIqG.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{nb-NO-T6EIAALU-DCbe9E9r.js → nb-NO-T6EIAALU-DntkTdyU.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{nl-NL-IS3SIHDZ-BGsegYOn.js → nl-NL-IS3SIHDZ-Buj5LU98.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{nn-NO-6E72VCQL-CKzpE5og.js → nn-NO-6E72VCQL-CQTSFq9z.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{oc-FR-POXYY2M6-DU_G0Lbm.js → oc-FR-POXYY2M6-BZ6kXarA.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{pa-IN-N4M65BXN-Cg5tGrWt.js → pa-IN-N4M65BXN-Dvmt8dZy.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{packet-AYTQ26CC-5T6nzbJH.js → packet-AYTQ26CC-DQcibPVx.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{pegDiagram-XKGWAZYB-CYuI1-NC.js → pegDiagram-XKGWAZYB-DYmk8L-p.js} +1 -1
- package/skills/excalidraw/app/dist/assets/percentages-BXMCSKIN-B4Clmuyx.js +1 -0
- package/skills/excalidraw/app/dist/assets/{pie-WAS4IAKB-DI5e1lz7.js → pie-WAS4IAKB-BjtKzvFw.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{pieDiagram-E7YTZNPT-CidIif1z.js → pieDiagram-E7YTZNPT-RB5UYded.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{pl-PL-T2D74RX3-BZRHntUW.js → pl-PL-T2D74RX3-D3Gs4RO8.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{pt-BR-5N22H2LF-B9Tz5Aby.js → pt-BR-5N22H2LF-Brqpe5WM.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{pt-PT-UZXXM6DQ-TFFmNb0q.js → pt-PT-UZXXM6DQ-2I0pB_hY.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{quadrantDiagram-AXDQQJYC-BKQVbnpS.js → quadrantDiagram-AXDQQJYC-Fzalqgec.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{radar-RG4KPBEZ-DP3qJc6S.js → radar-RG4KPBEZ-9sF3Oowk.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{railroad-74A4TZTK-9ukDzDF7.js → railroad-74A4TZTK-ChN1bG6C.js} +1 -1
- package/skills/excalidraw/app/dist/assets/railroad-abnf-HS5TGJTU-1ajX5YXj.js +1 -0
- package/skills/excalidraw/app/dist/assets/railroad-ebnf-LZEXJU2U-bY58zBs-.js +1 -0
- package/skills/excalidraw/app/dist/assets/railroad-peg-WCYAUIDC-Ad7PMf0C.js +1 -0
- package/skills/excalidraw/app/dist/assets/{railroadDiagram-O6MQD6OU-DnkrieKF.js → railroadDiagram-O6MQD6OU-Cc53Oizy.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{requirementDiagram-BXWQKSXE-B5jXr2XK.js → requirementDiagram-BXWQKSXE-BsXx77QE.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{ro-RO-JPDTUUEW-DXjMvI6V.js → ro-RO-JPDTUUEW-CMhFV1nB.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{ru-RU-B4JR7IUQ-CSxDpFDd.js → ru-RU-B4JR7IUQ-D0KmATqU.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{sankeyDiagram-P5KCCOFB-DA5BPuJI.js → sankeyDiagram-P5KCCOFB-Dq0RAdE1.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{sequenceDiagram-WJ2MYXX4-BJKW-hN5.js → sequenceDiagram-WJ2MYXX4-Bg7TnX_Z.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{si-LK-N5RQ5JYF-B92qjwcf.js → si-LK-N5RQ5JYF-B5qCPqAS.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{sk-SK-C5VTKIMK-cBcXxEd5.js → sk-SK-C5VTKIMK-jNvvGb9l.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{sl-SI-NN7IZMDC-DAxtv6Ub.js → sl-SI-NN7IZMDC-DRe9A6rY.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{stateDiagram-D77RDMKH-DccTl2o2.js → stateDiagram-D77RDMKH-CDZdo2Ar.js} +1 -1
- package/skills/excalidraw/app/dist/assets/stateDiagram-v2-MP3YSRHH-xKVBV8uO.js +1 -0
- package/skills/excalidraw/app/dist/assets/subset-shared.chunk-CLEUXNbo.js +1 -0
- package/skills/excalidraw/app/dist/assets/{subset-worker.chunk-DdulaO6i.js → subset-worker.chunk-CNyzR2G8.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{sv-SE-XGPEYMSR-CPvPJH47.js → sv-SE-XGPEYMSR-DaS3e-zk.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{swimlanes-42K2YHIH-D7pjRFB9.js → swimlanes-42K2YHIH-CHNQYCRx.js} +1 -1
- package/skills/excalidraw/app/dist/assets/swimlanesDiagram-VR7AAH4N-veeBG8Pe.js +8 -0
- package/skills/excalidraw/app/dist/assets/{ta-IN-2NMHFXQM-BBEC3f3N.js → ta-IN-2NMHFXQM-kvLHqRe-.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{th-TH-HPSO5L25-DDDbbu5P.js → th-TH-HPSO5L25-DoN751L3.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{timeline-definition-24CTP7MA-B6HTpZKB.js → timeline-definition-24CTP7MA-DVgmrRvT.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{tr-TR-DEFEU3FU-n3kHpRvH.js → tr-TR-DEFEU3FU-WZwkLLgY.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{treeView-Q6P3EWNA-DB3IdO3v.js → treeView-Q6P3EWNA-BH-C4PAc.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{treemap-WGGIJYW6-CdWayNO_.js → treemap-WGGIJYW6-CCN-D6TQ.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{uk-UA-QMV73CPH-BIgtz66-.js → uk-UA-QMV73CPH-ZY7Zukh2.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{vennDiagram-4TSXK5OY-gyIQonJM.js → vennDiagram-4TSXK5OY-DqUIgk4c.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{vi-VN-M7AON7JQ-EHnHzhTl.js → vi-VN-M7AON7JQ-BI-ZTRYo.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{wardley-WFR3VGLG-D2SQfybF.js → wardley-WFR3VGLG-WJi8VJkU.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{wardleyDiagram-VM6X3IG4-Cc0aycrS.js → wardleyDiagram-VM6X3IG4-DdMd87x7.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{xychartDiagram-S5SC5T6Z-eXreaCYn.js → xychartDiagram-S5SC5T6Z-BJZtb4P5.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{zh-CN-LNUGB5OW-KvwjffQz.js → zh-CN-LNUGB5OW-BWgnDKCe.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{zh-HK-E62DVLB3-DoBuDyuy.js → zh-HK-E62DVLB3-CzTwSFzt.js} +1 -1
- package/skills/excalidraw/app/dist/assets/{zh-TW-RAJ6MFWO-BiI3UmNY.js → zh-TW-RAJ6MFWO-BNFRktxp.js} +1 -1
- package/skills/excalidraw/app/dist/index.html +2 -1
- package/skills/excalidraw/app/index.html +1 -0
- package/skills/excalidraw/app/src/main.jsx +35 -1
- package/skills/excalidraw/references/sync-protocol.md +11 -1
- package/skills/excalidraw/scripts/excal.mjs +220 -20
- package/skills/excalidraw/scripts/library.mjs +303 -0
- package/skills/excalidraw/scripts/server.mjs +45 -0
- package/skills/excalidraw/app/dist/assets/architecture-7GRP2DOG-7jeFDpJR.js +0 -1
- package/skills/excalidraw/app/dist/assets/channel-uL0FsxtS.js +0 -1
- package/skills/excalidraw/app/dist/assets/classDiagram-ZZMXUADV-CuOnbBpH.js +0 -1
- package/skills/excalidraw/app/dist/assets/classDiagram-v2-VYDZK3BY-CuOnbBpH.js +0 -1
- package/skills/excalidraw/app/dist/assets/eventmodeling-NTZA5JFV-zQWNUpTz.js +0 -1
- package/skills/excalidraw/app/dist/assets/flowDiagram-HODETNUW-CnMHGSoA.js +0 -1
- package/skills/excalidraw/app/dist/assets/image-GAAHSSAO-Bc_EwI1R.js +0 -1
- package/skills/excalidraw/app/dist/assets/index-B7WaxUYZ.js +0 -208
- package/skills/excalidraw/app/dist/assets/percentages-BXMCSKIN-DR-sZ-Cj.js +0 -1
- package/skills/excalidraw/app/dist/assets/railroad-abnf-HS5TGJTU-S4oE0xhi.js +0 -1
- package/skills/excalidraw/app/dist/assets/railroad-ebnf-LZEXJU2U-ClCABo4z.js +0 -1
- package/skills/excalidraw/app/dist/assets/railroad-peg-WCYAUIDC-Cged2bPf.js +0 -1
- package/skills/excalidraw/app/dist/assets/stateDiagram-v2-MP3YSRHH-BGa59Ao_.js +0 -1
- package/skills/excalidraw/app/dist/assets/subset-shared.chunk-DZ7VZc1A.js +0 -1
- package/skills/excalidraw/app/dist/assets/swimlanesDiagram-VR7AAH4N-C3YPXYAD.js +0 -8
- package/skills/excalidraw/scripts/excal.test.mjs +0 -64
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
// Excalidraw library support shared by the CLI and the sync server.
|
|
2
|
+
// One personal library file (STATE_DIR/library.excalidrawlib) backs both the
|
|
3
|
+
// window's library panel and `excal library` commands.
|
|
4
|
+
import crypto from "node:crypto";
|
|
5
|
+
import fs from "node:fs";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { readJSON, STATE_DIR, writeFileAtomic } from "./lib.mjs";
|
|
8
|
+
|
|
9
|
+
export const LIBRARY_FILE = path.join(STATE_DIR, "library.excalidrawlib");
|
|
10
|
+
export const CATALOG_CACHE = path.join(STATE_DIR, "library-catalog.json");
|
|
11
|
+
export const CATALOG_URL =
|
|
12
|
+
process.env.EXCAL_LIBRARY_CATALOG ||
|
|
13
|
+
"https://raw.githubusercontent.com/excalidraw/excalidraw-libraries/main/libraries.json";
|
|
14
|
+
export const LIBRARIES_BASE = "https://raw.githubusercontent.com/excalidraw/excalidraw-libraries/main/libraries/";
|
|
15
|
+
const CATALOG_TTL_MS = 24 * 60 * 60_000;
|
|
16
|
+
|
|
17
|
+
/** Same allowlist Excalidraw's useHandleLibrary uses by default. */
|
|
18
|
+
const ALLOWED = ["excalidraw.com", "raw.githubusercontent.com/excalidraw/excalidraw-libraries"];
|
|
19
|
+
|
|
20
|
+
export function isAllowedLibraryUrl(url) {
|
|
21
|
+
let u;
|
|
22
|
+
try {
|
|
23
|
+
u = new URL(url);
|
|
24
|
+
} catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
if (u.protocol !== "https:") return false;
|
|
28
|
+
return ALLOWED.some((entry) => {
|
|
29
|
+
const { hostname, pathname } = new URL(`https://${entry}`);
|
|
30
|
+
const hostOk = u.hostname === hostname || u.hostname.endsWith(`.${hostname}`);
|
|
31
|
+
const prefix = pathname.replace(/\/+$/, "");
|
|
32
|
+
return hostOk && (prefix === "" || u.pathname === prefix || u.pathname.startsWith(`${prefix}/`));
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// ---------- library file ----------
|
|
37
|
+
|
|
38
|
+
/** Turn any .excalidrawlib payload (v1 `library`, v2 `libraryItems`) into v2 items. */
|
|
39
|
+
export function normalizeItems(data, { name } = {}) {
|
|
40
|
+
const raw = Array.isArray(data?.libraryItems)
|
|
41
|
+
? data.libraryItems
|
|
42
|
+
: Array.isArray(data?.library)
|
|
43
|
+
? data.library
|
|
44
|
+
: null;
|
|
45
|
+
if (!raw) throw new Error("excalidrawlib 형식이 아닙니다 (library / libraryItems 배열 없음)");
|
|
46
|
+
const items = [];
|
|
47
|
+
raw.forEach((entry, i) => {
|
|
48
|
+
const elements = (Array.isArray(entry) ? entry : entry?.elements || []).filter((e) => e && !e.isDeleted);
|
|
49
|
+
if (!elements.length) return;
|
|
50
|
+
const item = {
|
|
51
|
+
id: (!Array.isArray(entry) && entry.id) || randomId(),
|
|
52
|
+
status: (!Array.isArray(entry) && entry.status) || "published",
|
|
53
|
+
elements,
|
|
54
|
+
created: (!Array.isArray(entry) && entry.created) || Date.now(),
|
|
55
|
+
};
|
|
56
|
+
const itemName = !Array.isArray(entry) && entry.name;
|
|
57
|
+
if (itemName) item.name = itemName;
|
|
58
|
+
else if (name) item.name = raw.length > 1 ? `${name} #${i + 1}` : name;
|
|
59
|
+
items.push(item);
|
|
60
|
+
});
|
|
61
|
+
return items;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Missing file means an empty library. A file that exists but does not parse
|
|
66
|
+
* throws: returning [] would let the next save replace the user's library.
|
|
67
|
+
*/
|
|
68
|
+
export function readLibrary(file = LIBRARY_FILE) {
|
|
69
|
+
let text;
|
|
70
|
+
try {
|
|
71
|
+
text = fs.readFileSync(file, "utf8");
|
|
72
|
+
} catch (err) {
|
|
73
|
+
if (err.code === "ENOENT") return [];
|
|
74
|
+
throw err;
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
return normalizeItems(JSON.parse(text));
|
|
78
|
+
} catch (err) {
|
|
79
|
+
throw new Error(
|
|
80
|
+
`라이브러리 파일이 손상됐습니다: ${file} (${err.message}). 고치거나 ${path.basename(file)}.bak으로 되돌리세요`,
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function serializeLibrary(items) {
|
|
86
|
+
return `${JSON.stringify({ type: "excalidrawlib", version: 2, source: "pi-excalidraw", libraryItems: items }, null, 2)}\n`;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Writes atomically and keeps the previous version as `<file>.bak`. */
|
|
90
|
+
export function writeLibrary(items, file = LIBRARY_FILE) {
|
|
91
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
92
|
+
if (fs.existsSync(file)) fs.copyFileSync(file, `${file}.bak`);
|
|
93
|
+
writeFileAtomic(file, serializeLibrary(items));
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** Shape signature that ignores ids and position, to skip re-adding the same item. */
|
|
97
|
+
function itemSignature(item) {
|
|
98
|
+
const box = boundsOf(item.elements);
|
|
99
|
+
return JSON.stringify(
|
|
100
|
+
item.elements.map((e) => [
|
|
101
|
+
e.type,
|
|
102
|
+
Math.round(e.x - box.x),
|
|
103
|
+
Math.round(e.y - box.y),
|
|
104
|
+
Math.round(e.width ?? 0),
|
|
105
|
+
Math.round(e.height ?? 0),
|
|
106
|
+
e.text ?? "",
|
|
107
|
+
]),
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** Append items, skipping ones whose id or shape is already in the library. */
|
|
112
|
+
export function mergeItems(existing, incoming) {
|
|
113
|
+
const ids = new Set(existing.map((i) => i.id));
|
|
114
|
+
const sigs = new Set(existing.map(itemSignature));
|
|
115
|
+
const added = [];
|
|
116
|
+
for (const item of incoming) {
|
|
117
|
+
const sig = itemSignature(item);
|
|
118
|
+
if (ids.has(item.id) || sigs.has(sig)) continue;
|
|
119
|
+
ids.add(item.id);
|
|
120
|
+
sigs.add(sig);
|
|
121
|
+
added.push(item);
|
|
122
|
+
}
|
|
123
|
+
// Excalidraw lists the newest items first.
|
|
124
|
+
return { items: [...added, ...existing], added: added.length, skipped: incoming.length - added.length };
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// ---------- catalog ----------
|
|
128
|
+
|
|
129
|
+
async function fetchText(url) {
|
|
130
|
+
const r = await fetch(url, { signal: AbortSignal.timeout(20_000) });
|
|
131
|
+
if (!r.ok) throw new Error(`${url} 응답 ${r.status}`);
|
|
132
|
+
return r.text();
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export async function loadCatalog({ refresh = false } = {}) {
|
|
136
|
+
if (!/^https?:/.test(CATALOG_URL)) return JSON.parse(fs.readFileSync(CATALOG_URL, "utf8"));
|
|
137
|
+
const cached = readJSON(CATALOG_CACHE, null);
|
|
138
|
+
if (!refresh && cached?.url === CATALOG_URL && Date.now() - cached.fetchedAt < CATALOG_TTL_MS) return cached.items;
|
|
139
|
+
try {
|
|
140
|
+
const items = JSON.parse(await fetchText(CATALOG_URL));
|
|
141
|
+
fs.mkdirSync(path.dirname(CATALOG_CACHE), { recursive: true });
|
|
142
|
+
fs.writeFileSync(CATALOG_CACHE, JSON.stringify({ url: CATALOG_URL, fetchedAt: Date.now(), items }));
|
|
143
|
+
return items;
|
|
144
|
+
} catch (err) {
|
|
145
|
+
if (cached?.items) return cached.items; // offline: stale cache beats nothing
|
|
146
|
+
throw new Error(`라이브러리 목록을 받지 못했습니다: ${err.message}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export function searchCatalog(catalog, query) {
|
|
151
|
+
const terms = query.toLowerCase().split(/\s+/).filter(Boolean);
|
|
152
|
+
const hay = (l) => [l.name, l.description, l.source, ...(l.authors || []).map((a) => a.name)].join(" ").toLowerCase();
|
|
153
|
+
return catalog
|
|
154
|
+
.filter((l) => terms.every((t) => hay(l).includes(t)))
|
|
155
|
+
.map((l) => ({ l, score: terms.filter((t) => l.name.toLowerCase().includes(t)).length }))
|
|
156
|
+
.sort((a, b) => b.score - a.score || String(b.l.updated).localeCompare(String(a.l.updated)))
|
|
157
|
+
.map(({ l }) => l);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/** Resolve a catalog id, source path or name to a catalog entry. */
|
|
161
|
+
export function findCatalogEntry(catalog, ref) {
|
|
162
|
+
const r = ref.toLowerCase().replace(/\.excalidrawlib$/, "");
|
|
163
|
+
return (
|
|
164
|
+
catalog.find((l) => l.id === ref) ||
|
|
165
|
+
catalog.find((l) => l.source.toLowerCase().replace(/\.excalidrawlib$/, "") === r) ||
|
|
166
|
+
catalog.find((l) => l.name.toLowerCase() === r)
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Load library items from a local .excalidrawlib path, an allowed URL, or a
|
|
172
|
+
* catalog reference (id, `author/name` source, or exact name).
|
|
173
|
+
*/
|
|
174
|
+
export async function fetchLibrary(ref, { refresh = false } = {}) {
|
|
175
|
+
if (fs.existsSync(ref) && fs.statSync(ref).isFile()) {
|
|
176
|
+
const name = path.basename(ref, path.extname(ref));
|
|
177
|
+
return { name, from: path.resolve(ref), items: normalizeItems(JSON.parse(fs.readFileSync(ref, "utf8")), { name }) };
|
|
178
|
+
}
|
|
179
|
+
let url = ref;
|
|
180
|
+
let name;
|
|
181
|
+
if (!/^https?:\/\//.test(ref)) {
|
|
182
|
+
const entry = findCatalogEntry(await loadCatalog({ refresh }), ref);
|
|
183
|
+
if (!entry)
|
|
184
|
+
throw new Error(`카탈로그에서 "${ref}"를 찾지 못했습니다. \`excal library search <키워드>\`로 id를 확인하세요`);
|
|
185
|
+
url = LIBRARIES_BASE + entry.source;
|
|
186
|
+
name = entry.name;
|
|
187
|
+
}
|
|
188
|
+
if (!isAllowedLibraryUrl(url))
|
|
189
|
+
throw new Error(`허용되지 않은 라이브러리 URL입니다: ${url} (excalidraw.com, excalidraw-libraries 저장소만 허용)`);
|
|
190
|
+
name ??= decodeURIComponent(new URL(url).pathname.split("/").pop() || "library").replace(/\.excalidrawlib$/, "");
|
|
191
|
+
return { name, from: url, items: normalizeItems(JSON.parse(await fetchText(url)), { name }) };
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// ---------- items ----------
|
|
195
|
+
|
|
196
|
+
export function randomId() {
|
|
197
|
+
return crypto.randomBytes(8).toString("base64url");
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/** Bounding box of elements, including line/arrow points. */
|
|
201
|
+
export function boundsOf(elements) {
|
|
202
|
+
let minX = Infinity;
|
|
203
|
+
let minY = Infinity;
|
|
204
|
+
let maxX = -Infinity;
|
|
205
|
+
let maxY = -Infinity;
|
|
206
|
+
for (const e of elements) {
|
|
207
|
+
if (Array.isArray(e.points) && e.points.length) {
|
|
208
|
+
for (const [px, py] of e.points) {
|
|
209
|
+
minX = Math.min(minX, e.x + px);
|
|
210
|
+
minY = Math.min(minY, e.y + py);
|
|
211
|
+
maxX = Math.max(maxX, e.x + px);
|
|
212
|
+
maxY = Math.max(maxY, e.y + py);
|
|
213
|
+
}
|
|
214
|
+
} else {
|
|
215
|
+
const x2 = e.x + (e.width ?? 0);
|
|
216
|
+
const y2 = e.y + (e.height ?? 0);
|
|
217
|
+
minX = Math.min(minX, e.x, x2);
|
|
218
|
+
minY = Math.min(minY, e.y, y2);
|
|
219
|
+
maxX = Math.max(maxX, e.x, x2);
|
|
220
|
+
maxY = Math.max(maxY, e.y, y2);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (minX === Infinity) return { x: 0, y: 0, width: 0, height: 0 };
|
|
224
|
+
return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export function itemTexts(item) {
|
|
228
|
+
return item.elements.filter((e) => e.type === "text" && e.text).map((e) => e.text.replace(/\s+/g, " "));
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/** Find one item by exact id, exact name, or a unique name/text substring. */
|
|
232
|
+
export function findItem(items, ref) {
|
|
233
|
+
const r = ref.toLowerCase();
|
|
234
|
+
const exact = items.filter((i) => i.id === ref || (i.name || "").toLowerCase() === r);
|
|
235
|
+
if (exact.length === 1) return exact[0];
|
|
236
|
+
const partial = (exact.length ? exact : items).filter((i) =>
|
|
237
|
+
[i.name || "", ...itemTexts(i)].some((s) => s.toLowerCase().includes(r)),
|
|
238
|
+
);
|
|
239
|
+
if (partial.length === 1) return partial[0];
|
|
240
|
+
if (!partial.length) throw new Error(`라이브러리에 "${ref}" 아이템이 없습니다. \`excal library list\`로 확인하세요`);
|
|
241
|
+
throw new Error(
|
|
242
|
+
`"${ref}"에 맞는 아이템이 ${partial.length}개입니다. id로 지정하세요:\n${partial
|
|
243
|
+
.slice(0, 10)
|
|
244
|
+
.map((i) => ` ${i.id} ${i.name ?? ""}`)
|
|
245
|
+
.join("\n")}`,
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Copy an item's elements for placement in a scene: fresh ids (prefix-1, prefix-2, ...),
|
|
251
|
+
* remapped internal references, an outer group `prefix` so the item moves as one,
|
|
252
|
+
* top-left moved to (x, y), optionally scaled to `width`.
|
|
253
|
+
*/
|
|
254
|
+
export function instantiateItem(item, { prefix, x = 0, y = 0, width, takenIds = new Set() }) {
|
|
255
|
+
const src = item.elements.filter((e) => !e.isDeleted);
|
|
256
|
+
const box = boundsOf(src);
|
|
257
|
+
const scale = width && box.width > 0 ? width / box.width : 1;
|
|
258
|
+
const idMap = new Map(src.map((e, i) => [e.id, `${prefix}-${i + 1}`]));
|
|
259
|
+
const groupMap = new Map();
|
|
260
|
+
for (const e of src)
|
|
261
|
+
for (const g of e.groupIds || []) if (!groupMap.has(g)) groupMap.set(g, `${prefix}-g${groupMap.size + 1}`);
|
|
262
|
+
for (const id of [prefix, ...idMap.values(), ...groupMap.values()])
|
|
263
|
+
if (takenIds.has(id)) throw new Error(`id "${id}"가 이미 파일에 있습니다. --id로 다른 접두사를 주세요`);
|
|
264
|
+
const outer = src.length > 1 ? [prefix] : [];
|
|
265
|
+
const mapId = (id) => (id && idMap.has(id) ? idMap.get(id) : null);
|
|
266
|
+
const now = Date.now();
|
|
267
|
+
const elements = src.map((e) => {
|
|
268
|
+
const next = {
|
|
269
|
+
...e,
|
|
270
|
+
id: idMap.get(e.id),
|
|
271
|
+
x: x + (e.x - box.x) * scale,
|
|
272
|
+
y: y + (e.y - box.y) * scale,
|
|
273
|
+
groupIds: [...(e.groupIds || []).map((g) => groupMap.get(g)), ...outer],
|
|
274
|
+
frameId: mapId(e.frameId),
|
|
275
|
+
version: 1,
|
|
276
|
+
versionNonce: Math.floor(Math.random() * 2 ** 31),
|
|
277
|
+
seed: Math.floor(Math.random() * 2 ** 31),
|
|
278
|
+
updated: now,
|
|
279
|
+
isDeleted: false,
|
|
280
|
+
};
|
|
281
|
+
if (typeof e.width === "number") next.width = e.width * scale;
|
|
282
|
+
if (typeof e.height === "number") next.height = e.height * scale;
|
|
283
|
+
if (Array.isArray(e.points)) next.points = e.points.map(([px, py]) => [px * scale, py * scale]);
|
|
284
|
+
if (typeof e.fontSize === "number") next.fontSize = e.fontSize * scale;
|
|
285
|
+
if ("containerId" in e) next.containerId = mapId(e.containerId);
|
|
286
|
+
if (Array.isArray(e.boundElements))
|
|
287
|
+
next.boundElements = e.boundElements.filter((b) => idMap.has(b.id)).map((b) => ({ ...b, id: idMap.get(b.id) }));
|
|
288
|
+
if (Array.isArray(e.boundElementIds)) {
|
|
289
|
+
// legacy v1 field; restoreElements converts it, keep it consistent
|
|
290
|
+
next.boundElementIds = e.boundElementIds.filter((id) => idMap.has(id)).map((id) => idMap.get(id));
|
|
291
|
+
}
|
|
292
|
+
for (const key of ["startBinding", "endBinding"])
|
|
293
|
+
if (e[key])
|
|
294
|
+
next[key] = idMap.has(e[key].elementId) ? { ...e[key], elementId: idMap.get(e[key].elementId) } : null;
|
|
295
|
+
return next;
|
|
296
|
+
});
|
|
297
|
+
return {
|
|
298
|
+
elements,
|
|
299
|
+
group: outer[0] ?? null,
|
|
300
|
+
box: { x, y, width: box.width * scale, height: box.height * scale },
|
|
301
|
+
hasImages: src.some((e) => e.type === "image"),
|
|
302
|
+
};
|
|
303
|
+
}
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
sha,
|
|
22
22
|
writeFileAtomic,
|
|
23
23
|
} from "./lib.mjs";
|
|
24
|
+
import { LIBRARY_FILE, readLibrary, serializeLibrary, writeLibrary } from "./library.mjs";
|
|
24
25
|
|
|
25
26
|
const PREFERRED_PORT = Number(process.env.EXCAL_PORT || 47813);
|
|
26
27
|
const IDLE_MS = Number(process.env.EXCAL_IDLE_MINUTES || 30) * 60_000;
|
|
@@ -178,6 +179,11 @@ function broadcast(entry, event, data, exceptClientId) {
|
|
|
178
179
|
}
|
|
179
180
|
}
|
|
180
181
|
|
|
182
|
+
/** The library is shared by every window, whatever file it shows. */
|
|
183
|
+
function broadcastAll(event, data, exceptClientId) {
|
|
184
|
+
for (const entry of entries.values()) broadcast(entry, event, data, exceptClientId);
|
|
185
|
+
}
|
|
186
|
+
|
|
181
187
|
function totalClients() {
|
|
182
188
|
let n = 0;
|
|
183
189
|
for (const e of entries.values()) n += e.clients.size;
|
|
@@ -288,6 +294,45 @@ async function handleApi(req, res, url) {
|
|
|
288
294
|
});
|
|
289
295
|
}
|
|
290
296
|
|
|
297
|
+
if (parts[1] === "library" && !parts[2] && method === "GET") {
|
|
298
|
+
try {
|
|
299
|
+
return send(res, 200, { libraryItems: readLibrary() });
|
|
300
|
+
} catch (err) {
|
|
301
|
+
return send(res, 500, { error: err.message });
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
if (parts[1] === "library" && !parts[2] && method === "PUT") {
|
|
306
|
+
const { libraryItems, clientId } = JSON.parse((await readBody(req)).toString());
|
|
307
|
+
if (!Array.isArray(libraryItems)) return send(res, 400, { error: "libraryItems array required" });
|
|
308
|
+
let current = "";
|
|
309
|
+
try {
|
|
310
|
+
current = fs.readFileSync(LIBRARY_FILE, "utf8");
|
|
311
|
+
readLibrary(); // refuse to replace a file we cannot read
|
|
312
|
+
} catch (err) {
|
|
313
|
+
if (err.code !== "ENOENT") return send(res, 409, { error: err.message });
|
|
314
|
+
}
|
|
315
|
+
// Windows save back whatever they just loaded; skip no-op writes so they do not echo forever.
|
|
316
|
+
if (serializeLibrary(libraryItems) !== current) {
|
|
317
|
+
writeLibrary(libraryItems);
|
|
318
|
+
log("library saved", libraryItems.length, "items");
|
|
319
|
+
broadcastAll("library", { libraryItems }, clientId);
|
|
320
|
+
}
|
|
321
|
+
return send(res, 200, { ok: true, count: libraryItems.length });
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// The CLI edits the library file directly, then asks open windows to reload it.
|
|
325
|
+
if (parts[1] === "library" && parts[2] === "reload" && method === "POST") {
|
|
326
|
+
let libraryItems;
|
|
327
|
+
try {
|
|
328
|
+
libraryItems = readLibrary();
|
|
329
|
+
} catch (err) {
|
|
330
|
+
return send(res, 500, { error: err.message });
|
|
331
|
+
}
|
|
332
|
+
broadcastAll("library", { libraryItems });
|
|
333
|
+
return send(res, 200, { ok: true, count: libraryItems.length });
|
|
334
|
+
}
|
|
335
|
+
|
|
291
336
|
if (parts[1] === "snapshots" && parts[2] && method === "POST") {
|
|
292
337
|
const pending = pendingSnapshots.get(parts[2]);
|
|
293
338
|
const body = await readBody(req);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./chunk-FOHPRMQF-DzxwRta7.js";import{M as e}from"./mermaid-parser.core-BjygNlZP.js";export{e as createArchitectureServices};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{at as e,ot as t}from"./chunk-DU6HZSFF-BbRzTxIu.js";var n=(n,r)=>t.lang.round(e.parse(n)[r]);export{n as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import"./src-oBChb5qS.js";import"./chunk-DU6HZSFF-BbRzTxIu.js";import"./chunk-75Z2AOVW-BEZtmt_5.js";import"./chunk-P2QGCYS3-Ch37Dd6P.js";import"./chunk-PWAF6VOD-CW5GCk0X.js";import"./chunk-GMAD6QVW-u83hsId7.js";import"./chunk-4HAMMTFA-BJl8f4hj.js";import"./chunk-GVQU2GXP-DhRGdiur.js";import"./chunk-L3NEJ4N5-cDOiUn0I.js";import"./chunk-OSK3NFVY-GcK4QREf.js";import"./dist-CZtRAIh5.js";import"./chunk-F27PBJKO-MV5PD49O.js";import"./chunk-XXDRQBXY-BvKO0v-W.js";import"./chunk-POPQ4Y6H-ChWUKdmB.js";import{i as t,n,r,t as i}from"./chunk-TICWLB2K-C6rdEwMp.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import"./src-oBChb5qS.js";import"./chunk-DU6HZSFF-BbRzTxIu.js";import"./chunk-75Z2AOVW-BEZtmt_5.js";import"./chunk-P2QGCYS3-Ch37Dd6P.js";import"./chunk-PWAF6VOD-CW5GCk0X.js";import"./chunk-GMAD6QVW-u83hsId7.js";import"./chunk-4HAMMTFA-BJl8f4hj.js";import"./chunk-GVQU2GXP-DhRGdiur.js";import"./chunk-L3NEJ4N5-cDOiUn0I.js";import"./chunk-OSK3NFVY-GcK4QREf.js";import"./dist-CZtRAIh5.js";import"./chunk-F27PBJKO-MV5PD49O.js";import"./chunk-XXDRQBXY-BvKO0v-W.js";import"./chunk-POPQ4Y6H-ChWUKdmB.js";import{i as t,n,r,t as i}from"./chunk-TICWLB2K-C6rdEwMp.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./chunk-FOHPRMQF-DzxwRta7.js";import{O as e}from"./mermaid-parser.core-BjygNlZP.js";export{e as createEventModelingServices};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./src-oBChb5qS.js";import"./chunk-DU6HZSFF-BbRzTxIu.js";import"./chunk-75Z2AOVW-BEZtmt_5.js";import"./chunk-P2QGCYS3-Ch37Dd6P.js";import"./chunk-PWAF6VOD-CW5GCk0X.js";import"./chunk-GMAD6QVW-u83hsId7.js";import"./chunk-4HAMMTFA-BJl8f4hj.js";import"./chunk-GVQU2GXP-DhRGdiur.js";import"./chunk-L3NEJ4N5-cDOiUn0I.js";import"./chunk-OSK3NFVY-GcK4QREf.js";import"./dist-CZtRAIh5.js";import"./chunk-F27PBJKO-MV5PD49O.js";import"./chunk-XXDRQBXY-BvKO0v-W.js";import"./chunk-POPQ4Y6H-ChWUKdmB.js";import{n as e}from"./chunk-SHT3W25Y-DffgJ0n3.js";export{e as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{H as e,V as t}from"./index-B7WaxUYZ.js";export{e as decodePngMetadata,t as encodePngMetadata};
|