ryugi-artifacts 1.6.0 → 1.7.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/bin/ryugi-artifacts.cjs +53 -0
- package/dist/runtime/robots.txt +9 -0
- package/dist/server.cjs +223 -228
- package/dist/start-server.sh +279 -0
- package/dist/viewer/{CloudDocument-Cmt0f5LX.js → CloudDocument-Ba6KrnqA.js} +1 -1
- package/dist/viewer/{DocumentEditor-RfVa-8pR.js → DocumentEditor-BS16Wb_Z.js} +158 -158
- package/dist/viewer/{DocumentPage-Cg4Y7n8Z.js → DocumentPage-DQmrD0th.js} +1 -1
- package/dist/viewer/{abnfDiagram-VCTEODGH-Ch1PrcW_.js → abnfDiagram-VCTEODGH-DuJfhZTl.js} +1 -1
- package/dist/viewer/app-icon-6WJOuhLx.svg +1 -0
- package/dist/viewer/app-icon-Bm9-i4yr.png +0 -0
- package/dist/viewer/{ar-SA-G6X2FPQ2-BZLJnXPp.js → ar-SA-G6X2FPQ2-CVlRFGvR.js} +1 -1
- package/dist/viewer/{architectureDiagram-5GKGNRK7-Crf3vLUm.js → architectureDiagram-5GKGNRK7-Ca-sK1k9.js} +1 -1
- package/dist/viewer/{az-AZ-76LH7QW2-CJCCtBBF.js → az-AZ-76LH7QW2-CzO5U4tE.js} +1 -1
- package/dist/viewer/{bg-BG-XCXSNQG7-A9uZROfi.js → bg-BG-XCXSNQG7-DLheLFGn.js} +1 -1
- package/dist/viewer/{blockDiagram-I7D4REHJ-kmyfDg5y.js → blockDiagram-I7D4REHJ-CVWXNFVb.js} +1 -1
- package/dist/viewer/{bn-BD-2XOGV67Q-CMY785z7.js → bn-BD-2XOGV67Q-DvnFf2ym.js} +1 -1
- package/dist/viewer/{c4Diagram-7LVT6UL2-DtRUOCrL.js → c4Diagram-7LVT6UL2-CddHgiim.js} +1 -1
- package/dist/viewer/{ca-ES-6MX7JW3Y-BYYBxQ2h.js → ca-ES-6MX7JW3Y-1SQM_Wxy.js} +1 -1
- package/dist/viewer/{chunk-4HAMMTFA-D7lBPl2E.js → chunk-4HAMMTFA-B7k7y3et.js} +1 -1
- package/dist/viewer/{chunk-EIO257PC-BvW_EZuD.js → chunk-EIO257PC-CNxgWaGL.js} +1 -1
- package/dist/viewer/{chunk-GMAD6QVW-B0KZ3k-s.js → chunk-GMAD6QVW-Do0Tih79.js} +1 -1
- package/dist/viewer/{chunk-GVQU2GXP-vAqsTjwW.js → chunk-GVQU2GXP-C9mWLYpa.js} +1 -1
- package/dist/viewer/{chunk-IMKFNOWR-CVmDn72x.js → chunk-IMKFNOWR-BqsuylOZ.js} +1 -1
- package/dist/viewer/{chunk-L3NEJ4N5-DhAe4WGx.js → chunk-L3NEJ4N5-D_AVAMEp.js} +1 -1
- package/dist/viewer/{chunk-OSK3NFVY-CD-0X77m.js → chunk-OSK3NFVY-BKczRUt9.js} +1 -1
- package/dist/viewer/{chunk-PWAF6VOD-Cku_5L2L.js → chunk-PWAF6VOD-CcIRMiiP.js} +1 -1
- package/dist/viewer/{chunk-SHT3W25Y-DhRf-pGm.js → chunk-SHT3W25Y-D8R29R_u.js} +1 -1
- package/dist/viewer/{chunk-SVP7TREG-DmQ8yYT7.js → chunk-SVP7TREG-DvPbOdMe.js} +1 -1
- package/dist/viewer/{chunk-TICWLB2K-ptqkK9g5.js → chunk-TICWLB2K-v1pSr6BB.js} +1 -1
- package/dist/viewer/{classDiagram-ZZMXUADV-D5iY4ZXd.js → classDiagram-ZZMXUADV-BJqflR68.js} +1 -1
- package/dist/viewer/{classDiagram-v2-VYDZK3BY-D5iY4ZXd.js → classDiagram-v2-VYDZK3BY-BJqflR68.js} +1 -1
- package/dist/viewer/{cs-CZ-2BRQDIVT-Dzf23tSv.js → cs-CZ-2BRQDIVT-CuIWOyM9.js} +1 -1
- package/dist/viewer/{cynefinDiagram-5FMLGOSQ-CPkt5HTK.js → cynefinDiagram-5FMLGOSQ-CarHaJWA.js} +1 -1
- package/dist/viewer/{da-DK-5WZEPLOC-kk5u8oeh.js → da-DK-5WZEPLOC-BNpk9O4Z.js} +1 -1
- package/dist/viewer/{dagre-GXQ25YYZ-Bhb-6j9p.js → dagre-GXQ25YYZ-jKxlutMc.js} +1 -1
- package/dist/viewer/{de-DE-XR44H4JA-SMlX6klW.js → de-DE-XR44H4JA-DeRYYEYN.js} +1 -1
- package/dist/viewer/{diagram-S7CK7UJ4-CvFeOngn.js → diagram-S7CK7UJ4-BzGz76pK.js} +1 -1
- package/dist/viewer/{diagram-UQ7AKVKN-YhpPzvtc.js → diagram-UQ7AKVKN-DDsoAc73.js} +1 -1
- package/dist/viewer/{diagram-VX7I27RA-CHXupSCr.js → diagram-VX7I27RA-BIeolo3r.js} +1 -1
- package/dist/viewer/{diagram-Z3DM3KII-Q_9dAatE.js → diagram-Z3DM3KII-CU7mw2ow.js} +1 -1
- package/dist/viewer/{dist-KarY-eub.js → dist-AH0bdIVa.js} +1 -1
- package/dist/viewer/{dist-CpeuWhgo.js → dist-BSeJYKLj.js} +1 -1
- package/dist/viewer/{dist-D54iKVBK.js → dist-BbW5iWCe.js} +1 -1
- package/dist/viewer/{dist-DPsEN2aY.js → dist-BeULvDu_.js} +1 -1
- package/dist/viewer/{dist-BuhqQu7t.js → dist-BgSBKOA3.js} +1 -1
- package/dist/viewer/{dist-HBBjtVCs.js → dist-BlXyXxst.js} +1 -1
- package/dist/viewer/{dist-BUQddJyY.js → dist-BppD0RS2.js} +1 -1
- package/dist/viewer/{dist-B9l6xPFH.js → dist-Bu_voPaa.js} +1 -1
- package/dist/viewer/{dist-B5smEokn.js → dist-C-ieEyE1.js} +1 -1
- package/dist/viewer/{dist-CQLwSz5A.js → dist-C21gJBBO.js} +1 -1
- package/dist/viewer/{dist-HEpf722E.js → dist-CHLFapPp.js} +1 -1
- package/dist/viewer/{dist-Cyyn2QnM.js → dist-CZsxPTNE.js} +1 -1
- package/dist/viewer/{dist-DuN7MgQk.js → dist-Cackv1h9.js} +1 -1
- package/dist/viewer/{dist-nBKLr6IT.js → dist-CbHHxvP1.js} +1 -1
- package/dist/viewer/{dist-B9MlS-yc.js → dist-CddCPamz.js} +1 -1
- package/dist/viewer/{dist-BiSGJruV.js → dist-CgYgXYmt.js} +1 -1
- package/dist/viewer/{dist-B9dFSb2w.js → dist-CitzQ6z1.js} +4 -4
- package/dist/viewer/{dist-rV_cA3xa.js → dist-Cu6PLla0.js} +1 -1
- package/dist/viewer/{dist-BYFhByvm.js → dist-CvB831yK.js} +1 -1
- package/dist/viewer/{dist-Caiv-ahd.js → dist-DA8TW41P.js} +1 -1
- package/dist/viewer/{dist-DUsSVxcw.js → dist-DC1HltnF.js} +1 -1
- package/dist/viewer/{dist-paIVcwaQ.js → dist-DX3SNcdm.js} +1 -1
- package/dist/viewer/{dist-f0EzsI-T.js → dist-D_Vtqh_s.js} +1 -1
- package/dist/viewer/{dist-DCGRsZVI.js → dist-DqbHnPRI.js} +1 -1
- package/dist/viewer/{ebnfDiagram-PWID7BFC-Hv9B-3hk.js → ebnfDiagram-PWID7BFC-BUmzlASS.js} +1 -1
- package/dist/viewer/{el-GR-BZB4AONW-DaH9owXi.js → el-GR-BZB4AONW-CU9I6jx_.js} +1 -1
- package/dist/viewer/{en-B4ZKOASM-YnGAFBsU.js → en-B4ZKOASM-DGboqHSv.js} +1 -1
- package/dist/viewer/{erDiagram-RLTQ6QDP-BTUs0BT2.js → erDiagram-RLTQ6QDP-DRUmIoEG.js} +1 -1
- package/dist/viewer/{es-ES-U4NZUMDT-BuoQIO3M.js → es-ES-U4NZUMDT-j5HevUjd.js} +1 -1
- package/dist/viewer/{eu-ES-A7QVB2H4-DUhHVlZe.js → eu-ES-A7QVB2H4-FpISoaoc.js} +1 -1
- package/dist/viewer/{fa-IR-HGAKTJCU-CjJKc0am.js → fa-IR-HGAKTJCU-COJsQztN.js} +1 -1
- package/dist/viewer/{fi-FI-Z5N7JZ37-CMFLRD0_.js → fi-FI-Z5N7JZ37-BNHsLnGq.js} +1 -1
- package/dist/viewer/flowDiagram-HODETNUW-BIce5Xbz.js +1 -0
- package/dist/viewer/{fr-FR-RHASNOE6-BHoSntIq.js → fr-FR-RHASNOE6-CM9a28Dh.js} +1 -1
- package/dist/viewer/{ganttDiagram-EL5Y4UJY-CeEQLTco.js → ganttDiagram-EL5Y4UJY-BVcwKFHE.js} +1 -1
- package/dist/viewer/{gl-ES-HMX3MZ6V-DICoY99I.js → gl-ES-HMX3MZ6V-C5aDlPBE.js} +1 -1
- package/dist/viewer/{he-IL-6SHJWFNN-CEe7bLWa.js → he-IL-6SHJWFNN-eFs-GSWn.js} +1 -1
- package/dist/viewer/{hi-IN-IWLTKZ5I-Dh_vRgBn.js → hi-IN-IWLTKZ5I-O1MAguUp.js} +1 -1
- package/dist/viewer/{hu-HU-A5ZG7DT2-Bidop9I6.js → hu-HU-A5ZG7DT2-B3meydQb.js} +1 -1
- package/dist/viewer/{id-ID-SAP4L64H-D183pYjJ.js → id-ID-SAP4L64H-PHNH2hzW.js} +1 -1
- package/dist/viewer/{image-GAAHSSAO-DGMqto4h.js → image-GAAHSSAO-BJifdIGE.js} +1 -1
- package/dist/viewer/index.html +21 -2
- package/dist/viewer/index.js +11 -11
- package/dist/viewer/index2.css +249 -19
- package/dist/viewer/{infoDiagram-27XIBGKW-BWBppJ8S.js → infoDiagram-27XIBGKW-D5Ag03ug.js} +1 -1
- package/dist/viewer/{ishikawaDiagram-5VMMS53U-DwcqlxrU.js → ishikawaDiagram-5VMMS53U-B9SCwzFe.js} +1 -1
- package/dist/viewer/{it-IT-JPQ66NNP-BmsXfM8K.js → it-IT-JPQ66NNP-DHOLiY7r.js} +1 -1
- package/dist/viewer/{ja-JP-DBVTYXUO-DyW8qb-0.js → ja-JP-DBVTYXUO-DTOuZQy0.js} +1 -1
- package/dist/viewer/{journeyDiagram-3NMN7TZE-DcgpwdKu.js → journeyDiagram-3NMN7TZE-CQvvWgCk.js} +1 -1
- package/dist/viewer/{kaa-6HZHGXH3-DJYup-gx.js → kaa-6HZHGXH3-1d0tKthK.js} +1 -1
- package/dist/viewer/{kab-KAB-ZGHBKWFO-D1TTkU3Z.js → kab-KAB-ZGHBKWFO-BaPyqYzR.js} +1 -1
- package/dist/viewer/{kanban-definition-UXKFOSKX-DY7wxWTD.js → kanban-definition-UXKFOSKX-Bg-Q4j28.js} +1 -1
- package/dist/viewer/{kk-KZ-P5N5QNE5-Bi6KJaJ_.js → kk-KZ-P5N5QNE5-BqF9n_h-.js} +1 -1
- package/dist/viewer/{km-KH-HSX4SM5Z-DUgQIxqu.js → km-KH-HSX4SM5Z-DPTb_KDC.js} +1 -1
- package/dist/viewer/{ko-KR-MTYHY66A-DBjXJgtG.js → ko-KR-MTYHY66A-DxGidADD.js} +1 -1
- package/dist/viewer/{ku-TR-6OUDTVRD-DZ7-3E8v.js → ku-TR-6OUDTVRD-BECmOCof.js} +1 -1
- package/dist/viewer/{lt-LT-XHIRWOB4-CZq0sHVB.js → lt-LT-XHIRWOB4-DKQm4SS0.js} +1 -1
- package/dist/viewer/{lv-LV-5QDEKY6T-CSnpouGk.js → lv-LV-5QDEKY6T-C4kUM3XE.js} +1 -1
- package/dist/viewer/{mindmap-definition-YA3MSWOX-B8Pb-wf1.js → mindmap-definition-YA3MSWOX-DRQfDlAQ.js} +1 -1
- package/dist/viewer/{mr-IN-CRQNXWMA-COt7YzBU.js → mr-IN-CRQNXWMA-CutHorlk.js} +1 -1
- package/dist/viewer/{my-MM-5M5IBNSE-D0Y1Da5n.js → my-MM-5M5IBNSE-BqscH03z.js} +1 -1
- package/dist/viewer/{nb-NO-T6EIAALU-oWyfOUMc.js → nb-NO-T6EIAALU-Dqflwtt9.js} +1 -1
- package/dist/viewer/{nl-NL-IS3SIHDZ-DmHiL8bF.js → nl-NL-IS3SIHDZ-BFq09PQX.js} +1 -1
- package/dist/viewer/{nn-NO-6E72VCQL-aPmsjnhV.js → nn-NO-6E72VCQL-BNIuUKOs.js} +1 -1
- package/dist/viewer/{oc-FR-POXYY2M6-IX-_Z2L9.js → oc-FR-POXYY2M6-Bz0jVYcW.js} +1 -1
- package/dist/viewer/{pa-IN-N4M65BXN-Bs_eqV6D.js → pa-IN-N4M65BXN-Diu6ZQtk.js} +1 -1
- package/dist/viewer/{pegDiagram-XKGWAZYB-CUKB72zB.js → pegDiagram-XKGWAZYB-COMSnXOr.js} +1 -1
- package/dist/viewer/percentages-BXMCSKIN-C4UC-sd0.js +1 -0
- package/dist/viewer/{pieDiagram-E7YTZNPT-PGM-bC7i.js → pieDiagram-E7YTZNPT-gHe-bm7N.js} +1 -1
- package/dist/viewer/{pl-PL-T2D74RX3-B62vM7Wd.js → pl-PL-T2D74RX3-CCwgP0Tt.js} +1 -1
- package/dist/viewer/{prod-CXChZPSF.js → prod-iZwju1YX.js} +12 -12
- package/dist/viewer/{pt-BR-5N22H2LF-DeO8w0-j.js → pt-BR-5N22H2LF-CNn18ypM.js} +1 -1
- package/dist/viewer/{pt-PT-UZXXM6DQ-DHRKu_nC.js → pt-PT-UZXXM6DQ-BMoRZ8jH.js} +1 -1
- package/dist/viewer/{quadrantDiagram-AXDQQJYC-BHGqqzJO.js → quadrantDiagram-AXDQQJYC-YkFWTX48.js} +1 -1
- package/dist/viewer/{railroadDiagram-O6MQD6OU-xkx7KBZh.js → railroadDiagram-O6MQD6OU-BP58ggYs.js} +1 -1
- package/dist/viewer/{requirementDiagram-BXWQKSXE-YoHOz35u.js → requirementDiagram-BXWQKSXE-B4RcZ6Uz.js} +1 -1
- package/dist/viewer/{ro-RO-JPDTUUEW-CZ7CkjNI.js → ro-RO-JPDTUUEW-SoalcNvO.js} +1 -1
- package/dist/viewer/robots.txt +9 -0
- package/dist/viewer/{ru-RU-B4JR7IUQ-sQ2YRlyV.js → ru-RU-B4JR7IUQ-DkWHaRhg.js} +1 -1
- package/dist/viewer/{sequenceDiagram-WJ2MYXX4-DdADoY-J.js → sequenceDiagram-WJ2MYXX4-C5uL0tpK.js} +1 -1
- package/dist/viewer/{si-LK-N5RQ5JYF-DLuQj109.js → si-LK-N5RQ5JYF-eD68JhLY.js} +1 -1
- package/dist/viewer/{sk-SK-C5VTKIMK-CMe_YVPU.js → sk-SK-C5VTKIMK-EXqkY3Ta.js} +1 -1
- package/dist/viewer/{sl-SI-NN7IZMDC-BPakRJTF.js → sl-SI-NN7IZMDC-D2V_J_sw.js} +1 -1
- package/dist/viewer/{stateDiagram-D77RDMKH-DDcsZcrC.js → stateDiagram-D77RDMKH-DkyLdU7q.js} +1 -1
- package/dist/viewer/{stateDiagram-v2-MP3YSRHH-BEL5Pgsi.js → stateDiagram-v2-MP3YSRHH-BMCqlN4T.js} +1 -1
- package/dist/viewer/subset-shared.chunk-pCVh-jxe.js +1 -0
- package/dist/viewer/{subset-worker.chunk-CAdHeyaa.js → subset-worker.chunk-B92dIZyQ.js} +1 -1
- package/dist/viewer/{sv-SE-XGPEYMSR-qERuvZ6s.js → sv-SE-XGPEYMSR-Bzbzaslo.js} +1 -1
- package/dist/viewer/{swimlanes-42K2YHIH-C1_2L18N.js → swimlanes-42K2YHIH-BWEGkPBm.js} +1 -1
- package/dist/viewer/{swimlanesDiagram-VR7AAH4N-ZxKOyUwv.js → swimlanesDiagram-VR7AAH4N-a8X5vJTG.js} +1 -1
- package/dist/viewer/{ta-IN-2NMHFXQM-CtrwjuD9.js → ta-IN-2NMHFXQM-BkRw8Ab-.js} +1 -1
- package/dist/viewer/{th-TH-HPSO5L25-D2ykN4P-.js → th-TH-HPSO5L25-DpxjfRSg.js} +1 -1
- package/dist/viewer/{timeline-definition-24CTP7MA-Bw3z4a18.js → timeline-definition-24CTP7MA-BEYELt88.js} +1 -1
- package/dist/viewer/{tr-TR-DEFEU3FU-DG1l6URL.js → tr-TR-DEFEU3FU-CDIHZRzE.js} +1 -1
- package/dist/viewer/{uk-UA-QMV73CPH-BOWgVI7Y.js → uk-UA-QMV73CPH-BX8bS5mk.js} +1 -1
- package/dist/viewer/{vennDiagram-4TSXK5OY-ba8MnyJG.js → vennDiagram-4TSXK5OY-CWnDIkB0.js} +1 -1
- package/dist/viewer/{vi-VN-M7AON7JQ-uVRFZJH3.js → vi-VN-M7AON7JQ-uPTH0PFh.js} +1 -1
- package/dist/viewer/{wardleyDiagram-VM6X3IG4-BXqHV7Of.js → wardleyDiagram-VM6X3IG4-DazKGA6Y.js} +1 -1
- package/dist/viewer/{xychartDiagram-S5SC5T6Z-DDAwmSA_.js → xychartDiagram-S5SC5T6Z-sQuCm3yV.js} +1 -1
- package/dist/viewer/{zh-CN-LNUGB5OW-CG6LZlkW.js → zh-CN-LNUGB5OW-CSw936pf.js} +1 -1
- package/dist/viewer/{zh-HK-E62DVLB3-B1k0qvGq.js → zh-HK-E62DVLB3-D5pp2ILq.js} +1 -1
- package/dist/viewer/{zh-TW-RAJ6MFWO-DnRoij4Q.js → zh-TW-RAJ6MFWO-DUVdEREg.js} +1 -1
- package/package.json +7 -2
- package/dist/viewer/flowDiagram-HODETNUW-CNs3HB63.js +0 -1
- package/dist/viewer/percentages-BXMCSKIN-B0uUmwNv.js +0 -1
- package/dist/viewer/subset-shared.chunk-CT_Q-SQa.js +0 -1
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Start the artifacts server for a project and print its connection info as JSON.
|
|
3
|
+
# Usage: start-server.sh [--project-dir <path>] [--artifact <type>/<id>] [--host <bind-host>]
|
|
4
|
+
# [--url-host <display-host>] [--idle-timeout-minutes <n>] [--open] [--no-open]
|
|
5
|
+
# [--foreground] [--background]
|
|
6
|
+
#
|
|
7
|
+
# --project-dir <path> Project root (default: current directory). Artifacts live in
|
|
8
|
+
# <path>/.ryugi/artifacts/<type>/<id>/ and persist after the server stops.
|
|
9
|
+
# --artifact <t>/<id> Also print "link", the URL that opens that artifact.
|
|
10
|
+
# --host <bind-host> Interface to bind (default 127.0.0.1). Use 0.0.0.0 in remote or
|
|
11
|
+
# containerized environments.
|
|
12
|
+
# --url-host <host> Hostname shown in the returned URL.
|
|
13
|
+
# --idle-timeout-minutes <n> Stop after n minutes without activity (default 240).
|
|
14
|
+
# --open Open the browser when the first artifact is ready (default).
|
|
15
|
+
# --no-open Do not open a browser (for headless or scripted use).
|
|
16
|
+
# --foreground Run in the current terminal instead of backgrounding.
|
|
17
|
+
# --background Force background mode (overrides the Codex/Windows auto-foreground).
|
|
18
|
+
#
|
|
19
|
+
# If a server is already running for the project, its info is printed with "reused": true.
|
|
20
|
+
# Every run registers the calling session as an owner; the server stops when all owners exit.
|
|
21
|
+
|
|
22
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
23
|
+
|
|
24
|
+
PROJECT_DIR="$PWD"
|
|
25
|
+
FOREGROUND="false"
|
|
26
|
+
FORCE_BACKGROUND="false"
|
|
27
|
+
BIND_HOST="127.0.0.1"
|
|
28
|
+
URL_HOST=""
|
|
29
|
+
ARTIFACT=""
|
|
30
|
+
OPEN="${ARTIFACTS_OPEN:-1}"
|
|
31
|
+
while [[ $# -gt 0 ]]; do
|
|
32
|
+
case "$1" in
|
|
33
|
+
--project-dir) PROJECT_DIR="$2"; shift 2 ;;
|
|
34
|
+
--artifact)
|
|
35
|
+
if ! [[ "${2:-}" =~ ^(artboard|document|html)/[a-z0-9][a-z0-9-]*$ ]]; then
|
|
36
|
+
echo '{"error": "--artifact must be <type>/<id>: type artboard, document or html, id of lowercase letters, digits and hyphens"}'
|
|
37
|
+
exit 1
|
|
38
|
+
fi
|
|
39
|
+
ARTIFACT="$2"
|
|
40
|
+
shift 2
|
|
41
|
+
;;
|
|
42
|
+
--host) BIND_HOST="$2"; shift 2 ;;
|
|
43
|
+
--url-host) URL_HOST="$2"; shift 2 ;;
|
|
44
|
+
--idle-timeout-minutes)
|
|
45
|
+
if ! [[ "$2" =~ ^[0-9]+$ ]] || [[ "$2" -lt 1 ]]; then
|
|
46
|
+
echo '{"error": "--idle-timeout-minutes must be a positive integer"}'
|
|
47
|
+
exit 1
|
|
48
|
+
fi
|
|
49
|
+
export ARTIFACTS_IDLE_TIMEOUT_MS=$(( $2 * 60 * 1000 ))
|
|
50
|
+
shift 2
|
|
51
|
+
;;
|
|
52
|
+
--open) OPEN=1; shift ;;
|
|
53
|
+
--no-open) OPEN=0; shift ;;
|
|
54
|
+
--foreground|--no-daemon) FOREGROUND="true"; shift ;;
|
|
55
|
+
--background|--daemon) FORCE_BACKGROUND="true"; shift ;;
|
|
56
|
+
*) echo "{\"error\": \"Unknown argument: $1\"}"; exit 1 ;;
|
|
57
|
+
esac
|
|
58
|
+
done
|
|
59
|
+
|
|
60
|
+
if [[ -z "$URL_HOST" ]]; then
|
|
61
|
+
if [[ "$BIND_HOST" == "127.0.0.1" || "$BIND_HOST" == "localhost" ]]; then
|
|
62
|
+
URL_HOST="localhost"
|
|
63
|
+
else
|
|
64
|
+
URL_HOST="$BIND_HOST"
|
|
65
|
+
fi
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
is_windows_like_shell() {
|
|
69
|
+
case "${OSTYPE:-}" in msys*|cygwin*|mingw*) return 0 ;; esac
|
|
70
|
+
[[ -n "${MSYSTEM:-}" ]] && return 0
|
|
71
|
+
case "$(uname -s 2>/dev/null || true)" in MSYS*|MINGW*|CYGWIN*) return 0 ;; esac
|
|
72
|
+
return 1
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
# Codex and Windows/Git Bash reap background processes.
|
|
76
|
+
if [[ "$FOREGROUND" != "true" && "$FORCE_BACKGROUND" != "true" ]]; then
|
|
77
|
+
if [[ -n "${CODEX_CI:-}" ]] || is_windows_like_shell; then
|
|
78
|
+
FOREGROUND="true"
|
|
79
|
+
fi
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
# State files embed the session key; keep everything owner-only.
|
|
83
|
+
umask 077
|
|
84
|
+
|
|
85
|
+
if ! PROJECT_REAL="$(cd "$PROJECT_DIR" 2>/dev/null && pwd -P)"; then
|
|
86
|
+
echo "{\"error\": \"Project directory not found: $PROJECT_DIR\"}"
|
|
87
|
+
exit 1
|
|
88
|
+
fi
|
|
89
|
+
ROOT_DIR="$PROJECT_REAL/.ryugi/artifacts"
|
|
90
|
+
STATE_DIR="$ROOT_DIR/.state"
|
|
91
|
+
PID_FILE="$STATE_DIR/server.pid"
|
|
92
|
+
LOG_FILE="$STATE_DIR/server.log"
|
|
93
|
+
SERVER_ID_FILE="$STATE_DIR/server-instance-id"
|
|
94
|
+
INFO_FILE="$STATE_DIR/server-info"
|
|
95
|
+
OWNERS_FILE="$STATE_DIR/owners"
|
|
96
|
+
mkdir -p "$STATE_DIR"
|
|
97
|
+
[[ -f "$STATE_DIR/.gitignore" ]] || printf '*\n' > "$STATE_DIR/.gitignore"
|
|
98
|
+
|
|
99
|
+
# A local build (pnpm build:server) wins; otherwise run the release pinned in version.json,
|
|
100
|
+
# installed once per version. Runs before the project lock: a slow install must not outlive
|
|
101
|
+
# the lock's stale threshold. npm installs into a staging dir that is renamed into place;
|
|
102
|
+
# rename(2) refuses a non-empty target, so a concurrent start that finished first keeps its install.
|
|
103
|
+
resolve_server() {
|
|
104
|
+
if [[ -f "$SCRIPT_DIR/server.cjs" ]]; then
|
|
105
|
+
SERVER="$SCRIPT_DIR/server.cjs"
|
|
106
|
+
return 0
|
|
107
|
+
fi
|
|
108
|
+
local version cache staging
|
|
109
|
+
version="$(node -p 'require(process.argv[1]).version' "$SCRIPT_DIR/version.json")"
|
|
110
|
+
cache="${XDG_CACHE_HOME:-$HOME/.cache}/ryugi/artifacts/$version"
|
|
111
|
+
SERVER="$cache/node_modules/ryugi-artifacts/dist/server.cjs"
|
|
112
|
+
[[ -f "$SERVER" ]] && return 0
|
|
113
|
+
staging="$cache.install.$$"
|
|
114
|
+
rm -rf "$staging"
|
|
115
|
+
mkdir -p "$staging"
|
|
116
|
+
if ! npm install --prefix "$staging" --no-save --no-package-lock --no-audit --no-fund --loglevel=error \
|
|
117
|
+
"ryugi-artifacts@$version" > "$staging.log" 2>&1 || [[ ! -f "$staging/node_modules/ryugi-artifacts/dist/server.cjs" ]]; then
|
|
118
|
+
node -e 'console.log(JSON.stringify({ error: `Could not install ${process.argv[1]} from npm; the first start of each version needs network access and a writable ${process.argv[2]}, so rerun outside the sandbox. npm: ${process.argv[3].trim().split("\n").pop() || "failed"}` }))' \
|
|
119
|
+
"ryugi-artifacts@$version" "$(dirname "$cache")" "$(cat "$staging.log")"
|
|
120
|
+
rm -rf "$staging" "$staging.log"
|
|
121
|
+
return 1
|
|
122
|
+
fi
|
|
123
|
+
rm -f "$staging.log"
|
|
124
|
+
node -e 'try { require("node:fs").renameSync(process.argv[1], process.argv[2]) } catch {}' "$staging" "$cache"
|
|
125
|
+
rm -rf "$staging"
|
|
126
|
+
[[ -f "$SERVER" ]] && return 0
|
|
127
|
+
echo "{\"error\": \"Installed ryugi-artifacts@$version but could not move it into $cache\"}"
|
|
128
|
+
return 1
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
resolve_server || exit 1
|
|
132
|
+
|
|
133
|
+
# Concurrent runs for one project must not both spawn a server: hold a lock from the
|
|
134
|
+
# running-server check until the new server has written server-info.
|
|
135
|
+
LOCK_DIR="$STATE_DIR/start.lock"
|
|
136
|
+
release_lock() { rmdir "$LOCK_DIR" 2>/dev/null; return 0; }
|
|
137
|
+
acquire_lock() {
|
|
138
|
+
local _
|
|
139
|
+
for _ in {1..150}; do
|
|
140
|
+
if mkdir "$LOCK_DIR" 2>/dev/null; then
|
|
141
|
+
trap release_lock EXIT
|
|
142
|
+
return 0
|
|
143
|
+
fi
|
|
144
|
+
if [[ -n "$(find "$LOCK_DIR" -maxdepth 0 -mmin +1 2>/dev/null)" ]]; then
|
|
145
|
+
rmdir "$LOCK_DIR" 2>/dev/null
|
|
146
|
+
continue
|
|
147
|
+
fi
|
|
148
|
+
sleep 0.1
|
|
149
|
+
done
|
|
150
|
+
return 1
|
|
151
|
+
}
|
|
152
|
+
if ! acquire_lock; then
|
|
153
|
+
echo '{"error": "Another start-server.sh run for this project is still starting; retry in a moment"}'
|
|
154
|
+
exit 1
|
|
155
|
+
fi
|
|
156
|
+
|
|
157
|
+
command_has_server_id() {
|
|
158
|
+
local pid="$1" expected_arg="--artifacts-server-id=$2" arg command_line
|
|
159
|
+
if [[ -r "/proc/$pid/cmdline" ]]; then
|
|
160
|
+
while IFS= read -r -d '' arg || [[ -n "$arg" ]]; do
|
|
161
|
+
[[ "$arg" == "$expected_arg" ]] && return 0
|
|
162
|
+
done < "/proc/$pid/cmdline"
|
|
163
|
+
return 1
|
|
164
|
+
fi
|
|
165
|
+
command_line="$(ps -ww -p "$pid" -o command= 2>/dev/null || ps -f -p "$pid" 2>/dev/null | sed '1d' || true)"
|
|
166
|
+
case " $command_line " in
|
|
167
|
+
*" $expected_arg "*) return 0 ;;
|
|
168
|
+
*) return 1 ;;
|
|
169
|
+
esac
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
running_server_pid() {
|
|
173
|
+
[[ -f "$PID_FILE" && -f "$SERVER_ID_FILE" ]] || return 1
|
|
174
|
+
local pid id
|
|
175
|
+
pid="$(cat "$PID_FILE")"
|
|
176
|
+
id="$(tr -d '\r\n' < "$SERVER_ID_FILE")"
|
|
177
|
+
kill -0 "$pid" 2>/dev/null || return 1
|
|
178
|
+
command_has_server_id "$pid" "$id" || return 1
|
|
179
|
+
echo "$pid"
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
# $PPID is the throwaway shell the harness spawned for this script; the harness is its parent.
|
|
183
|
+
OWNER_PID="$(ps -o ppid= -p "$PPID" 2>/dev/null | tr -d ' ')"
|
|
184
|
+
if [[ -z "$OWNER_PID" || "$OWNER_PID" == "1" ]]; then
|
|
185
|
+
OWNER_PID="$PPID"
|
|
186
|
+
fi
|
|
187
|
+
# Node cannot see MSYS2 PIDs; an unverifiable owner would stop the server at the first check.
|
|
188
|
+
if is_windows_like_shell; then
|
|
189
|
+
OWNER_PID=""
|
|
190
|
+
fi
|
|
191
|
+
|
|
192
|
+
register_owner() {
|
|
193
|
+
local tmp="$OWNERS_FILE.$$" pid
|
|
194
|
+
{
|
|
195
|
+
if [[ -f "$OWNERS_FILE" ]]; then
|
|
196
|
+
while IFS= read -r pid; do
|
|
197
|
+
[[ "$pid" =~ ^[0-9]+$ ]] && kill -0 "$pid" 2>/dev/null && printf '%s\n' "$pid"
|
|
198
|
+
done < "$OWNERS_FILE"
|
|
199
|
+
fi
|
|
200
|
+
[[ -n "$OWNER_PID" ]] && printf '%s\n' "$OWNER_PID"
|
|
201
|
+
} | sort -u > "$tmp"
|
|
202
|
+
mv "$tmp" "$OWNERS_FILE"
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
# Prints the server info JSON with "link" for --artifact, and "reused" when $1 is true.
|
|
206
|
+
emit_info() {
|
|
207
|
+
node -e '
|
|
208
|
+
const [json, reused, artifact] = process.argv.slice(1);
|
|
209
|
+
const info = JSON.parse(json);
|
|
210
|
+
if (reused === "true") info.reused = true;
|
|
211
|
+
if (artifact) {
|
|
212
|
+
const url = new URL(info.url);
|
|
213
|
+
info.link = `${url.origin}/${artifact}?key=${url.searchParams.get("key")}`;
|
|
214
|
+
}
|
|
215
|
+
console.log(JSON.stringify(info));
|
|
216
|
+
' "$1" "$2" "$ARTIFACT"
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
if running_server_pid >/dev/null && [[ -f "$INFO_FILE" ]]; then
|
|
220
|
+
register_owner
|
|
221
|
+
emit_info "$(cat "$INFO_FILE")" true
|
|
222
|
+
exit 0
|
|
223
|
+
fi
|
|
224
|
+
|
|
225
|
+
register_owner
|
|
226
|
+
rm -f "$INFO_FILE"
|
|
227
|
+
|
|
228
|
+
SERVER_ID=""
|
|
229
|
+
if [[ -r /dev/urandom ]]; then
|
|
230
|
+
SERVER_ID="$(od -An -N24 -tx1 /dev/urandom 2>/dev/null | tr -d ' \n' || true)"
|
|
231
|
+
fi
|
|
232
|
+
if ! [[ "$SERVER_ID" =~ ^[A-Za-z0-9_-]{32,64}$ ]]; then
|
|
233
|
+
SERVER_ID="$(printf '%08x%08x%08x%08x' "$$" "$(date +%s)" "${RANDOM:-0}" "${RANDOM:-0}")"
|
|
234
|
+
fi
|
|
235
|
+
printf '%s\n' "$SERVER_ID" > "$SERVER_ID_FILE"
|
|
236
|
+
|
|
237
|
+
SERVER_ENV=(ARTIFACTS_ROOT="$ROOT_DIR" ARTIFACTS_HOST="$BIND_HOST" ARTIFACTS_URL_HOST="$URL_HOST" ARTIFACTS_OPEN="$OPEN")
|
|
238
|
+
[[ -n "$ARTIFACT" ]] && SERVER_ENV+=(ARTIFACTS_OPEN_ARTIFACT="$ARTIFACT")
|
|
239
|
+
|
|
240
|
+
if [[ "$FOREGROUND" == "true" ]]; then
|
|
241
|
+
env "${SERVER_ENV[@]}" node "$SERVER" "--artifacts-server-id=$SERVER_ID" &
|
|
242
|
+
SERVER_PID=$!
|
|
243
|
+
echo "$SERVER_PID" > "$PID_FILE"
|
|
244
|
+
trap 'kill -TERM "$SERVER_PID" 2>/dev/null || true' INT TERM
|
|
245
|
+
for _ in {1..50}; do
|
|
246
|
+
[[ -f "$INFO_FILE" ]] && break
|
|
247
|
+
sleep 0.1
|
|
248
|
+
done
|
|
249
|
+
release_lock
|
|
250
|
+
wait "$SERVER_PID"
|
|
251
|
+
exit $?
|
|
252
|
+
fi
|
|
253
|
+
|
|
254
|
+
nohup env "${SERVER_ENV[@]}" node "$SERVER" "--artifacts-server-id=$SERVER_ID" > "$LOG_FILE" 2>&1 &
|
|
255
|
+
SERVER_PID=$!
|
|
256
|
+
disown "$SERVER_PID" 2>/dev/null
|
|
257
|
+
echo "$SERVER_PID" > "$PID_FILE"
|
|
258
|
+
|
|
259
|
+
for _ in {1..50}; do
|
|
260
|
+
if grep -q '"server-started"' "$LOG_FILE" 2>/dev/null; then
|
|
261
|
+
for _ in {1..20}; do
|
|
262
|
+
if ! kill -0 "$SERVER_PID" 2>/dev/null; then
|
|
263
|
+
echo "{\"error\": \"Server started but was killed. Retry in a persistent terminal with: $SCRIPT_DIR/start-server.sh --project-dir $PROJECT_REAL --host $BIND_HOST --url-host $URL_HOST --foreground\"}"
|
|
264
|
+
exit 1
|
|
265
|
+
fi
|
|
266
|
+
sleep 0.1
|
|
267
|
+
done
|
|
268
|
+
emit_info "$(grep '"server-started"' "$LOG_FILE" | head -1)" false
|
|
269
|
+
exit 0
|
|
270
|
+
fi
|
|
271
|
+
if grep -q '"server-error"' "$LOG_FILE" 2>/dev/null; then
|
|
272
|
+
grep '"server-error"' "$LOG_FILE" | head -1
|
|
273
|
+
exit 1
|
|
274
|
+
fi
|
|
275
|
+
sleep 0.1
|
|
276
|
+
done
|
|
277
|
+
|
|
278
|
+
echo '{"error": "Server failed to start within 5 seconds"}'
|
|
279
|
+
exit 1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{n as t,t as n}from"./jsx-runtime-CldxteV5.js";import{c as r,l as i,n as a,o,r as s,s as c}from"./DocumentEditor-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{n as t,t as n}from"./jsx-runtime-CldxteV5.js";import{c as r,l as i,n as a,o,r as s,s as c}from"./DocumentEditor-BS16Wb_Z.js";var l=e(t(),1),u=n();function d(){let e=(0,l.useMemo)(()=>window.matchMedia(`(prefers-color-scheme: dark)`),[]),[t,n]=(0,l.useState)(e.matches);return(0,l.useEffect)(()=>{let t=()=>n(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[e]),t}function f({id:e,state:t,contentBase:n}){let f=d(),p=(0,l.useMemo)(()=>({artifact:`cloud/${e}`,contentBase:n,channel:c(),send:()=>void 0}),[e,n]);return(0,l.useEffect)(()=>{let e=document.createElement(`base`);return e.href=n,document.head.prepend(e),()=>e.remove()},[n]),(0,u.jsx)(`div`,{className:`x1us19tq x1rozbrz xo2rkog`,className:`ryugi-doc ${{className:`x1us19tq x1rozbrz xo2rkog`}.className??``}`,children:(0,u.jsx)(`article`,{className:`xrgej4m xvueqy4 x1axd487 x4l9tsp`,children:(0,u.jsx)(o.Provider,{value:p,children:(0,u.jsx)(i,{variant:`article`,theme:f?`dark`:`light`,initialValue:t,extraNodes:a,rendererConfig:s,onEditorReady:e=>e?.setEditable(!1),children:(0,u.jsx)(r,{})})})})})}export{f as default};
|