ryugi-artifacts 1.31.7 → 1.33.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 +496 -82
- package/dist/server.cjs +241 -53
- package/dist/viewer/CloudDocument-DBhwAPZX.js +1 -0
- package/dist/viewer/CloudLiveDocument-ceRinz2F.js +1 -0
- package/dist/viewer/{DocumentLayout-CbIehGxV.js → DocumentLayout-DUPesXt0.js} +141 -141
- package/dist/viewer/DocumentPage-p78IN0UO.js +1 -0
- package/dist/viewer/RailSwitch-B8Aht-FG.js +64 -0
- package/dist/viewer/{abnfDiagram-VCTEODGH-BwImveX1.js → abnfDiagram-VCTEODGH-Dz0T5wEI.js} +1 -1
- package/dist/viewer/{ar-SA-G6X2FPQ2-RpzZk-vo.js → ar-SA-G6X2FPQ2-Bytlrg0S.js} +1 -1
- package/dist/viewer/{architectureDiagram-5GKGNRK7-BhX61Vlu.js → architectureDiagram-5GKGNRK7-OYoo3ME7.js} +1 -1
- package/dist/viewer/{az-AZ-76LH7QW2-BVSWK8b7.js → az-AZ-76LH7QW2-w9f06xDk.js} +1 -1
- package/dist/viewer/{bg-BG-XCXSNQG7-Bpt9s0jR.js → bg-BG-XCXSNQG7-CEWDLlq7.js} +1 -1
- package/dist/viewer/{blockDiagram-I7D4REHJ-CljkTIL7.js → blockDiagram-I7D4REHJ-CAowR37U.js} +1 -1
- package/dist/viewer/{bn-BD-2XOGV67Q-BdFSuTbl.js → bn-BD-2XOGV67Q-DBNpDzHO.js} +1 -1
- package/dist/viewer/{c4Diagram-7LVT6UL2-D0iRCL-u.js → c4Diagram-7LVT6UL2-Dzzhg0Hl.js} +1 -1
- package/dist/viewer/{ca-ES-6MX7JW3Y-ClAdQpRf.js → ca-ES-6MX7JW3Y-Det2dq0q.js} +1 -1
- package/dist/viewer/{chunk-4HAMMTFA-Bp0_MHBC.js → chunk-4HAMMTFA-DZl9uS5D.js} +1 -1
- package/dist/viewer/{chunk-EIO257PC-C-qOSRvN.js → chunk-EIO257PC-CjCjUdBc.js} +1 -1
- package/dist/viewer/{chunk-GMAD6QVW-BFJ7kK_w.js → chunk-GMAD6QVW-CDRo04Dc.js} +1 -1
- package/dist/viewer/{chunk-GVQU2GXP-UaddXAPq.js → chunk-GVQU2GXP-BhrYhgpE.js} +1 -1
- package/dist/viewer/{chunk-IMKFNOWR-BSXuSZSV.js → chunk-IMKFNOWR-BfAgQjlN.js} +1 -1
- package/dist/viewer/{chunk-L3NEJ4N5-CCNBKnXZ.js → chunk-L3NEJ4N5-D-FTstxq.js} +1 -1
- package/dist/viewer/{chunk-OSK3NFVY-C6IbO0Jr.js → chunk-OSK3NFVY-CJgUgQQ4.js} +1 -1
- package/dist/viewer/{chunk-PWAF6VOD-kCQKhtQ5.js → chunk-PWAF6VOD-DWHqbvtp.js} +1 -1
- package/dist/viewer/{chunk-SHT3W25Y-CjszVd1a.js → chunk-SHT3W25Y-CBzt56Er.js} +1 -1
- package/dist/viewer/{chunk-SVP7TREG-BQ5ECbFL.js → chunk-SVP7TREG-b6pmQaqb.js} +1 -1
- package/dist/viewer/{chunk-TICWLB2K-CM3SXgeB.js → chunk-TICWLB2K-DIPK-gAO.js} +1 -1
- package/dist/viewer/{classDiagram-ZZMXUADV-CklLnwGV.js → classDiagram-ZZMXUADV-DgM9EY-7.js} +1 -1
- package/dist/viewer/{classDiagram-v2-VYDZK3BY-CklLnwGV.js → classDiagram-v2-VYDZK3BY-DgM9EY-7.js} +1 -1
- package/dist/viewer/{cs-CZ-2BRQDIVT-C9yZWjpH.js → cs-CZ-2BRQDIVT-CXEgS6Pi.js} +1 -1
- package/dist/viewer/{cynefinDiagram-5FMLGOSQ-pHGN68P6.js → cynefinDiagram-5FMLGOSQ-BQkxO3xf.js} +1 -1
- package/dist/viewer/{da-DK-5WZEPLOC-DNfdbnAi.js → da-DK-5WZEPLOC-D2twM2eB.js} +1 -1
- package/dist/viewer/{dagre-GXQ25YYZ-Cu5hDNcZ.js → dagre-GXQ25YYZ-DD_-ARQM.js} +1 -1
- package/dist/viewer/{de-DE-XR44H4JA-Dtf5rElI.js → de-DE-XR44H4JA-QQ3wzCUN.js} +1 -1
- package/dist/viewer/{diagram-S7CK7UJ4-BKmGJRFo.js → diagram-S7CK7UJ4-C6UhooWh.js} +1 -1
- package/dist/viewer/{diagram-UQ7AKVKN-CiImTxYb.js → diagram-UQ7AKVKN-CmOvdTfi.js} +1 -1
- package/dist/viewer/{diagram-VX7I27RA-KDRajhma.js → diagram-VX7I27RA-BQrnggcb.js} +1 -1
- package/dist/viewer/{diagram-Z3DM3KII-BaftiW-B.js → diagram-Z3DM3KII-eqq_bLYp.js} +1 -1
- package/dist/viewer/{dist-DnVCAc8Q.js → dist-A6XqCKp3.js} +1 -1
- package/dist/viewer/{dist-DH1y51Ji.js → dist-BHQRLarc.js} +1 -1
- package/dist/viewer/{dist-PRMB1ALz.js → dist-BVD4SXRG.js} +1 -1
- package/dist/viewer/{dist-BvAcUpu2.js → dist-C2_czco-.js} +1 -1
- package/dist/viewer/{dist-DZY6VV6F.js → dist-CBPL9nOI.js} +1 -1
- package/dist/viewer/{dist-vSbmlgLw.js → dist-CBa9iIgE.js} +1 -1
- package/dist/viewer/{dist-BIwkt9qv.js → dist-COWTq4PW.js} +1 -1
- package/dist/viewer/{dist-Dr0sIPMq.js → dist-CRFROhiU.js} +1 -1
- package/dist/viewer/{dist-CGMkgipD.js → dist-Cm3PtUTh.js} +1 -1
- package/dist/viewer/{dist-BwXQ338V.js → dist-CmuZXMYX.js} +1 -1
- package/dist/viewer/{dist-CmvbQIrE.js → dist-CvMMV1bh.js} +1 -1
- package/dist/viewer/{dist-hmKSLQSf.js → dist-D6ZK8Xjb.js} +1 -1
- package/dist/viewer/{dist-KWTwuZjj.js → dist-D9ubIHs9.js} +1 -1
- package/dist/viewer/{dist-BPjjkXfR.js → dist-DlqN5LCW.js} +1 -1
- package/dist/viewer/{dist-CJ7SqDZz.js → dist-Dvmx2QWc.js} +1 -1
- package/dist/viewer/{dist-Bf8Gpkfz.js → dist-DwneAiRo.js} +4 -4
- package/dist/viewer/{dist-y8ORXHnh.js → dist-IvjL_4Fz.js} +1 -1
- package/dist/viewer/{dist-Dzz8z2UZ.js → dist-MgwwM__x.js} +1 -1
- package/dist/viewer/{dist-BZ58JpdA.js → dist-QND2Lmk5.js} +1 -1
- package/dist/viewer/{dist-C4SdA9EW.js → dist-YskcL8-n.js} +1 -1
- package/dist/viewer/{dist-B15eZXtk.js → dist-lBA58Q6O.js} +1 -1
- package/dist/viewer/{dist-C12tszp1.js → dist-lONhpLQT.js} +1 -1
- package/dist/viewer/{dist-u48wpMGh.js → dist-v3HQ_tBw.js} +1 -1
- package/dist/viewer/{dist-DycRP_OX.js → dist-vk9ofs_t.js} +1 -1
- package/dist/viewer/{ebnfDiagram-PWID7BFC-BrG8iNXQ.js → ebnfDiagram-PWID7BFC-0s9Mm78H.js} +1 -1
- package/dist/viewer/{el-GR-BZB4AONW-DqICvPRG.js → el-GR-BZB4AONW-DFIcTo3i.js} +1 -1
- package/dist/viewer/{en-B4ZKOASM-dczwLo2Q.js → en-B4ZKOASM-BEswEOpC.js} +1 -1
- package/dist/viewer/{erDiagram-RLTQ6QDP-1lXVLQAr.js → erDiagram-RLTQ6QDP-A9ucHzt3.js} +1 -1
- package/dist/viewer/{es-ES-U4NZUMDT-B5LCvezC.js → es-ES-U4NZUMDT-Dsyjlq5a.js} +1 -1
- package/dist/viewer/{eu-ES-A7QVB2H4-AxW11Jr4.js → eu-ES-A7QVB2H4-BAIIFqxX.js} +1 -1
- package/dist/viewer/{fa-IR-HGAKTJCU-CrextBTW.js → fa-IR-HGAKTJCU-C3OpuRE4.js} +1 -1
- package/dist/viewer/{fi-FI-Z5N7JZ37-DW0oU7X0.js → fi-FI-Z5N7JZ37-CGZNrctb.js} +1 -1
- package/dist/viewer/flowDiagram-HODETNUW-D_xWrdzr.js +1 -0
- package/dist/viewer/{fr-FR-RHASNOE6-D1WTztbV.js → fr-FR-RHASNOE6-DABvCzvT.js} +1 -1
- package/dist/viewer/{ganttDiagram-EL5Y4UJY-OHjITozZ.js → ganttDiagram-EL5Y4UJY-DqLWQJWV.js} +1 -1
- package/dist/viewer/{gl-ES-HMX3MZ6V-Bz6k3trL.js → gl-ES-HMX3MZ6V-D-FsubUP.js} +1 -1
- package/dist/viewer/{he-IL-6SHJWFNN-BB9LB2-0.js → he-IL-6SHJWFNN-DKZYdZfW.js} +1 -1
- package/dist/viewer/{hi-IN-IWLTKZ5I-Dz-hDa8B.js → hi-IN-IWLTKZ5I-Dg6zlEAV.js} +1 -1
- package/dist/viewer/{hu-HU-A5ZG7DT2-Bty6njMB.js → hu-HU-A5ZG7DT2-N2pu49mS.js} +1 -1
- package/dist/viewer/{id-ID-SAP4L64H-C4usOGls.js → id-ID-SAP4L64H-L0ROzOqC.js} +1 -1
- package/dist/viewer/{image-GAAHSSAO-vAX85uOY.js → image-GAAHSSAO-CPsuFbpQ.js} +1 -1
- package/dist/viewer/index.html +6 -6
- package/dist/viewer/index.js +10 -10
- package/dist/viewer/index2.css +1 -1
- package/dist/viewer/{infoDiagram-27XIBGKW-BqzIrdk1.js → infoDiagram-27XIBGKW-DpFxmo2_.js} +1 -1
- package/dist/viewer/{ishikawaDiagram-5VMMS53U-Di-DEKXa.js → ishikawaDiagram-5VMMS53U-8EYGUU-2.js} +1 -1
- package/dist/viewer/{it-IT-JPQ66NNP-mzQckg9k.js → it-IT-JPQ66NNP-BV10T_YH.js} +1 -1
- package/dist/viewer/{ja-JP-DBVTYXUO-C7-H-cmZ.js → ja-JP-DBVTYXUO-BCaJwh3E.js} +1 -1
- package/dist/viewer/{journeyDiagram-3NMN7TZE-I0j1KMEL.js → journeyDiagram-3NMN7TZE-DaFiGmqB.js} +1 -1
- package/dist/viewer/{kaa-6HZHGXH3-CmNCMCJy.js → kaa-6HZHGXH3-B1skt76W.js} +1 -1
- package/dist/viewer/{kab-KAB-ZGHBKWFO-ItB_9BGI.js → kab-KAB-ZGHBKWFO-Cw1z7bNO.js} +1 -1
- package/dist/viewer/{kanban-definition-UXKFOSKX-DTBDnl3B.js → kanban-definition-UXKFOSKX-XFPAw_KL.js} +1 -1
- package/dist/viewer/{kk-KZ-P5N5QNE5-DFvprYF4.js → kk-KZ-P5N5QNE5-BPyIEorg.js} +1 -1
- package/dist/viewer/{km-KH-HSX4SM5Z-CYlJRLqM.js → km-KH-HSX4SM5Z-DuqV3Xms.js} +1 -1
- package/dist/viewer/{ko-KR-MTYHY66A-DdWMyWM6.js → ko-KR-MTYHY66A-C40qKz7C.js} +1 -1
- package/dist/viewer/{ku-TR-6OUDTVRD-BzvpGeMQ.js → ku-TR-6OUDTVRD-Bbrtxcjm.js} +1 -1
- package/dist/viewer/{lt-LT-XHIRWOB4-BYo85Qu7.js → lt-LT-XHIRWOB4-B_qXWIwM.js} +1 -1
- package/dist/viewer/{lv-LV-5QDEKY6T-CosJufMV.js → lv-LV-5QDEKY6T-8_k-NVNn.js} +1 -1
- package/dist/viewer/{mindmap-definition-YA3MSWOX-D8dIeGOr.js → mindmap-definition-YA3MSWOX-CJw_BzHI.js} +1 -1
- package/dist/viewer/{mr-IN-CRQNXWMA-DZw4xisJ.js → mr-IN-CRQNXWMA-Cr6mk0h0.js} +1 -1
- package/dist/viewer/{my-MM-5M5IBNSE-CJaPw4-2.js → my-MM-5M5IBNSE-zfvalQ4P.js} +1 -1
- package/dist/viewer/{nb-NO-T6EIAALU-7G70nMbl.js → nb-NO-T6EIAALU-B0R5LoPU.js} +1 -1
- package/dist/viewer/{nl-NL-IS3SIHDZ-C2N5LLwv.js → nl-NL-IS3SIHDZ-DByEOQ_2.js} +1 -1
- package/dist/viewer/{nn-NO-6E72VCQL-hN3Y-orF.js → nn-NO-6E72VCQL-DUupf9du.js} +1 -1
- package/dist/viewer/{oc-FR-POXYY2M6-C6zKnltp.js → oc-FR-POXYY2M6-C4GiSVlQ.js} +1 -1
- package/dist/viewer/{pa-IN-N4M65BXN-D9LFkWXb.js → pa-IN-N4M65BXN-BmpOpAle.js} +1 -1
- package/dist/viewer/{pegDiagram-XKGWAZYB-B0RvoMQk.js → pegDiagram-XKGWAZYB-DAjil8NL.js} +1 -1
- package/dist/viewer/percentages-BXMCSKIN-B-KINBvQ.js +1 -0
- package/dist/viewer/{pieDiagram-E7YTZNPT-ewOACQMR.js → pieDiagram-E7YTZNPT-CaXmRdry.js} +1 -1
- package/dist/viewer/{pl-PL-T2D74RX3-B7Srn8r-.js → pl-PL-T2D74RX3-DuE4eY9G.js} +1 -1
- package/dist/viewer/{prod-BrYSC5BZ.js → prod-CJIb7nxS.js} +8 -8
- package/dist/viewer/{pt-BR-5N22H2LF-DYyT3f2b.js → pt-BR-5N22H2LF-KH_3-_Pi.js} +1 -1
- package/dist/viewer/{pt-PT-UZXXM6DQ-rOtMHOEe.js → pt-PT-UZXXM6DQ-BF4pZvjU.js} +1 -1
- package/dist/viewer/{quadrantDiagram-AXDQQJYC-7uBvJywd.js → quadrantDiagram-AXDQQJYC-CttUyhBS.js} +1 -1
- package/dist/viewer/{railroadDiagram-O6MQD6OU-CjrkD1Sv.js → railroadDiagram-O6MQD6OU-CbnAU0MT.js} +1 -1
- package/dist/viewer/{requirementDiagram-BXWQKSXE-CtK-_ZfU.js → requirementDiagram-BXWQKSXE-DvKdUhZQ.js} +1 -1
- package/dist/viewer/{ro-RO-JPDTUUEW-DlX5UQ5g.js → ro-RO-JPDTUUEW-Brpa20Xr.js} +1 -1
- package/dist/viewer/{ru-RU-B4JR7IUQ-DMkmBI_w.js → ru-RU-B4JR7IUQ-PktJmPKO.js} +1 -1
- package/dist/viewer/{sequenceDiagram-WJ2MYXX4-FH_hVozp.js → sequenceDiagram-WJ2MYXX4-CJoSlXfo.js} +1 -1
- package/dist/viewer/{si-LK-N5RQ5JYF-syGIcUZu.js → si-LK-N5RQ5JYF-ChiCBRoh.js} +1 -1
- package/dist/viewer/{sk-SK-C5VTKIMK-DNPJXh_n.js → sk-SK-C5VTKIMK-CqJFB_HV.js} +1 -1
- package/dist/viewer/{sl-SI-NN7IZMDC-DRPcTij4.js → sl-SI-NN7IZMDC-DVLqmOJ1.js} +1 -1
- package/dist/viewer/{stateDiagram-D77RDMKH-l7B99Ka0.js → stateDiagram-D77RDMKH-DMn_ZLVi.js} +1 -1
- package/dist/viewer/{stateDiagram-v2-MP3YSRHH-C0UvR7x5.js → stateDiagram-v2-MP3YSRHH-CEKv_pDb.js} +1 -1
- package/dist/viewer/subset-shared.chunk-P48EEdkR.js +1 -0
- package/dist/viewer/{subset-worker.chunk-DlQBa_39.js → subset-worker.chunk-D7vPNmxj.js} +1 -1
- package/dist/viewer/{sv-SE-XGPEYMSR-S3tp2Wzl.js → sv-SE-XGPEYMSR-BE0Rox_P.js} +1 -1
- package/dist/viewer/{swimlanes-42K2YHIH-B13WRxod.js → swimlanes-42K2YHIH-Z13RXAJ2.js} +1 -1
- package/dist/viewer/{swimlanesDiagram-VR7AAH4N-D1UZKMPA.js → swimlanesDiagram-VR7AAH4N-2F-sMn5C.js} +1 -1
- package/dist/viewer/{ta-IN-2NMHFXQM-DZwig901.js → ta-IN-2NMHFXQM-BytzkZT9.js} +1 -1
- package/dist/viewer/{th-TH-HPSO5L25-C4AAMO23.js → th-TH-HPSO5L25-8djIgrrS.js} +1 -1
- package/dist/viewer/{timeline-definition-24CTP7MA-DIMtwmk3.js → timeline-definition-24CTP7MA-BBemmJjg.js} +1 -1
- package/dist/viewer/{tr-TR-DEFEU3FU-qZqNQn0v.js → tr-TR-DEFEU3FU-s5K56Q5P.js} +1 -1
- package/dist/viewer/{uk-UA-QMV73CPH-DCpn5eCj.js → uk-UA-QMV73CPH-BR4VH6DS.js} +1 -1
- package/dist/viewer/{vennDiagram-4TSXK5OY-Cm6chrYK.js → vennDiagram-4TSXK5OY-BF17eruu.js} +1 -1
- package/dist/viewer/{vi-VN-M7AON7JQ-Mx8GQ3WP.js → vi-VN-M7AON7JQ-B0ic3hAd.js} +1 -1
- package/dist/viewer/{wardleyDiagram-VM6X3IG4-BJBCh83b.js → wardleyDiagram-VM6X3IG4-D-8trXu4.js} +1 -1
- package/dist/viewer/{xychartDiagram-S5SC5T6Z-Dwt5Yi9Q.js → xychartDiagram-S5SC5T6Z-B596erre.js} +1 -1
- package/dist/viewer/{zh-CN-LNUGB5OW-uVvmbpx_.js → zh-CN-LNUGB5OW-CYANBkOM.js} +1 -1
- package/dist/viewer/{zh-HK-E62DVLB3-B10Y5kIG.js → zh-HK-E62DVLB3-BWpz93gC.js} +1 -1
- package/dist/viewer/{zh-TW-RAJ6MFWO-siER1xfy.js → zh-TW-RAJ6MFWO-CACFXFA3.js} +1 -1
- package/package.json +3 -1
- package/dist/viewer/CloudDocument-qU9Y5IS3.js +0 -1
- package/dist/viewer/CloudLiveDocument-BjQZue8V.js +0 -1
- package/dist/viewer/DocumentPage-BYXyKDdx.js +0 -1
- package/dist/viewer/RailSwitch-Dz65rESU.js +0 -58
- package/dist/viewer/flowDiagram-HODETNUW-BaTzUU_D.js +0 -1
- package/dist/viewer/percentages-BXMCSKIN-B8SN6v6b.js +0 -1
- package/dist/viewer/subset-shared.chunk-8gQsHXf4.js +0 -1
package/dist/server.cjs
CHANGED
|
@@ -5171,9 +5171,9 @@ var require_websocket_server = __commonJS({
|
|
|
5171
5171
|
|
|
5172
5172
|
// src/server/main.ts
|
|
5173
5173
|
var import_node_child_process2 = require("node:child_process");
|
|
5174
|
-
var
|
|
5175
|
-
var
|
|
5176
|
-
var
|
|
5174
|
+
var import_node_fs27 = __toESM(require("node:fs"), 1);
|
|
5175
|
+
var import_node_os2 = __toESM(require("node:os"), 1);
|
|
5176
|
+
var import_node_path23 = __toESM(require("node:path"), 1);
|
|
5177
5177
|
|
|
5178
5178
|
// src/server/app.ts
|
|
5179
5179
|
var import_node_fs24 = __toESM(require("node:fs"), 1);
|
|
@@ -19688,19 +19688,19 @@ var ElementDOMSlot = class _ElementDOMSlot extends DOMSlot {
|
|
|
19688
19688
|
}
|
|
19689
19689
|
};
|
|
19690
19690
|
function indexPath(root, child) {
|
|
19691
|
-
const
|
|
19691
|
+
const path24 = [];
|
|
19692
19692
|
let node = child;
|
|
19693
19693
|
for (; node !== root && node !== null; node = node.parentNode) {
|
|
19694
19694
|
let i6 = 0;
|
|
19695
19695
|
for (let sibling = node.previousSibling; sibling !== null; sibling = sibling.previousSibling) {
|
|
19696
19696
|
i6++;
|
|
19697
19697
|
}
|
|
19698
|
-
|
|
19698
|
+
path24.push(i6);
|
|
19699
19699
|
}
|
|
19700
19700
|
if (!(node === root)) {
|
|
19701
19701
|
formatDevErrorMessage(`indexPath: root is not a parent of child`);
|
|
19702
19702
|
}
|
|
19703
|
-
return
|
|
19703
|
+
return path24.reverse();
|
|
19704
19704
|
}
|
|
19705
19705
|
// @__NO_SIDE_EFFECTS__
|
|
19706
19706
|
function readLexicalVersion() {
|
|
@@ -34480,9 +34480,9 @@ function getActiveElementDeep(root) {
|
|
|
34480
34480
|
function getComposedEventTarget(event) {
|
|
34481
34481
|
const target = event.target;
|
|
34482
34482
|
if (target !== null && isHTMLElement(target) && target.shadowRoot !== null && typeof event.composedPath === "function") {
|
|
34483
|
-
const
|
|
34484
|
-
if (
|
|
34485
|
-
return
|
|
34483
|
+
const path24 = event.composedPath();
|
|
34484
|
+
if (path24.length > 0) {
|
|
34485
|
+
return path24[0];
|
|
34486
34486
|
}
|
|
34487
34487
|
}
|
|
34488
34488
|
return target;
|
|
@@ -44578,10 +44578,10 @@ function _loadWasmModule(sync, filepath, src, imports2) {
|
|
|
44578
44578
|
var buf = null;
|
|
44579
44579
|
var isNode2 = typeof process !== "undefined" && process.versions != null && process.versions.node != null;
|
|
44580
44580
|
if (filepath && isNode2) {
|
|
44581
|
-
var
|
|
44582
|
-
var
|
|
44581
|
+
var fs30 = null;
|
|
44582
|
+
var path24 = null;
|
|
44583
44583
|
return new Promise((resolve, reject) => {
|
|
44584
|
-
|
|
44584
|
+
fs30.readFile(path24.resolve(__dirname, filepath), (error, buffer) => {
|
|
44585
44585
|
if (error != null) {
|
|
44586
44586
|
reject(error);
|
|
44587
44587
|
} else {
|
|
@@ -45884,10 +45884,10 @@ var LoroDoc = class _LoroDoc {
|
|
|
45884
45884
|
* @param {string} path
|
|
45885
45885
|
* @returns {Value | Container | undefined}
|
|
45886
45886
|
*/
|
|
45887
|
-
getByPath(
|
|
45887
|
+
getByPath(path24) {
|
|
45888
45888
|
try {
|
|
45889
45889
|
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
45890
|
-
const ptr0 = passStringToWasm0(
|
|
45890
|
+
const ptr0 = passStringToWasm0(path24, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
|
45891
45891
|
const len0 = WASM_VECTOR_LEN;
|
|
45892
45892
|
wasm.lorodoc_getByPath(retptr, this.__wbg_ptr, ptr0, len0);
|
|
45893
45893
|
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
@@ -84900,10 +84900,10 @@ var CHAT_BLOCK_TRANSFORMER = {
|
|
|
84900
84900
|
export: (node) => {
|
|
84901
84901
|
if (node.getType() !== "chat") return null;
|
|
84902
84902
|
const j4 = node.exportJSON();
|
|
84903
|
-
const
|
|
84903
|
+
const lookup2 = new Map(j4.participants.map((p7) => [p7.id, p7]));
|
|
84904
84904
|
const lines = [];
|
|
84905
84905
|
j4.messages.forEach((m11, idx) => {
|
|
84906
|
-
const p7 =
|
|
84906
|
+
const p7 = lookup2.get(m11.participantId) ?? UNKNOWN_CHAT_PARTICIPANT;
|
|
84907
84907
|
const name = chatParticipantName(p7);
|
|
84908
84908
|
const block = j4.variant === "user-user" || j4.variant === "user-agent" && p7.kind === "user" ? m11.content.split("\n").map((line, i6) => i6 === 0 ? `> **${name}:** ${line}` : `> ${line}`).join("\n") : m11.content;
|
|
84909
84909
|
if (idx > 0) lines.push("");
|
|
@@ -89731,6 +89731,112 @@ var import_node_crypto8 = __toESM(require("node:crypto"), 1);
|
|
|
89731
89731
|
var RYUGI_MARK_VIEWBOX = "0 0 512 512";
|
|
89732
89732
|
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>';
|
|
89733
89733
|
|
|
89734
|
+
// src/shared/locale.ts
|
|
89735
|
+
var HTML_LANG = { en: "en", zh: "zh-CN" };
|
|
89736
|
+
function resolveLocale(preferences) {
|
|
89737
|
+
for (const preference of preferences) {
|
|
89738
|
+
const primary = preference.split("-")[0]?.trim().toLowerCase();
|
|
89739
|
+
if (primary === "zh") return "zh";
|
|
89740
|
+
if (primary === "en") return "en";
|
|
89741
|
+
}
|
|
89742
|
+
return "en";
|
|
89743
|
+
}
|
|
89744
|
+
function parseAcceptLanguage(header) {
|
|
89745
|
+
if (!header) return [];
|
|
89746
|
+
return header.split(",").map((part, index) => {
|
|
89747
|
+
const [tag = "", ...params] = part.trim().split(";");
|
|
89748
|
+
const q3 = params.map((param) => param.trim()).find((param) => param.startsWith("q="));
|
|
89749
|
+
return { tag: tag.trim(), q: q3 ? Number(q3.slice(2)) : 1, index };
|
|
89750
|
+
}).filter((entry) => entry.tag && !Number.isNaN(entry.q) && entry.q > 0).sort((a5, b6) => b6.q - a5.q || a5.index - b6.index).map((entry) => entry.tag);
|
|
89751
|
+
}
|
|
89752
|
+
|
|
89753
|
+
// src/shared/messages.ts
|
|
89754
|
+
function lookup(dictionary, key2) {
|
|
89755
|
+
let node = dictionary;
|
|
89756
|
+
for (const part of key2.split(".")) node = typeof node === "object" ? node[part] : void 0;
|
|
89757
|
+
return typeof node === "string" ? node : void 0;
|
|
89758
|
+
}
|
|
89759
|
+
function find3(dictionary, key2, locale, count) {
|
|
89760
|
+
if (typeof count === "number") {
|
|
89761
|
+
const form = lookup(dictionary, `${key2}_${new Intl.PluralRules(locale).select(count)}`) ?? lookup(dictionary, `${key2}_other`);
|
|
89762
|
+
if (form !== void 0) return form;
|
|
89763
|
+
}
|
|
89764
|
+
return lookup(dictionary, key2);
|
|
89765
|
+
}
|
|
89766
|
+
function translator(dictionaries, locale) {
|
|
89767
|
+
return (key2, values = {}) => {
|
|
89768
|
+
const message = find3(dictionaries[locale], key2, locale, values.count) ?? find3(dictionaries.en, key2, "en", values.count) ?? key2;
|
|
89769
|
+
return message.replace(/\{\{(\w+)\}\}/g, (match, name) => name in values ? String(values[name]) : match);
|
|
89770
|
+
};
|
|
89771
|
+
}
|
|
89772
|
+
|
|
89773
|
+
// src/server/locales/en.json
|
|
89774
|
+
var en_default = {
|
|
89775
|
+
callback: {
|
|
89776
|
+
titleOk: "Signed in to Ryugi Cloud",
|
|
89777
|
+
titleFailed: "Sign-in didn't finish",
|
|
89778
|
+
connected: "Connected to Ryugi Cloud",
|
|
89779
|
+
signedIn: "Signed in as",
|
|
89780
|
+
lead: "Ryugi on this computer can publish artifacts now.",
|
|
89781
|
+
fromPage: "Published from a Ryugi page?",
|
|
89782
|
+
fromPageDetail: "Go back to Ryugi; the share panel refreshes on its own.",
|
|
89783
|
+
fromAgent: "Asked the agent to publish?",
|
|
89784
|
+
fromAgentDetail: "Have it run the publish command again.",
|
|
89785
|
+
autoPublish: "Auto-publish is on",
|
|
89786
|
+
autoPublishDetail: "After each agent turn, changed artifacts sync privately to Ryugi Cloud. To turn it off, run <code>ryugi-artifacts config --auto-publish off</code>.",
|
|
89787
|
+
notConnected: "Not connected",
|
|
89788
|
+
retry: "Sign in again",
|
|
89789
|
+
retryDetail: "Go back to Ryugi and click Sign in in the share panel again.",
|
|
89790
|
+
description: "Result of signing in to Ryugi Cloud on this computer. Once connected, go back to Ryugi to publish and share artifacts.",
|
|
89791
|
+
closeOk: "You can close this page",
|
|
89792
|
+
closeFailed: "You can close this page and try again"
|
|
89793
|
+
},
|
|
89794
|
+
login: {
|
|
89795
|
+
expired: "This sign-in link has expired or was already used. Go back to Ryugi and sign in again.",
|
|
89796
|
+
unreachable: "Couldn't reach {{origin}} ({{message}}). Check your network, then go back to Ryugi and sign in again.",
|
|
89797
|
+
refused: "Ryugi Cloud didn't accept this sign-in ({{reason}}). Go back to Ryugi and sign in again."
|
|
89798
|
+
},
|
|
89799
|
+
meta: {
|
|
89800
|
+
artifact: "View {{title}} in the {{project}} project. This is a {{type}} artifact.",
|
|
89801
|
+
library: "Browse every artboard, document and HTML artifact in the {{project}} project, preview their content, and find them by type, name or update time."
|
|
89802
|
+
}
|
|
89803
|
+
};
|
|
89804
|
+
|
|
89805
|
+
// src/server/locales/zh.json
|
|
89806
|
+
var zh_default = {
|
|
89807
|
+
callback: {
|
|
89808
|
+
titleOk: "\u5DF2\u767B\u5F55 Ryugi Cloud",
|
|
89809
|
+
titleFailed: "\u767B\u5F55\u6CA1\u6709\u5B8C\u6210",
|
|
89810
|
+
connected: "\u5DF2\u8FDE\u63A5 Ryugi Cloud",
|
|
89811
|
+
signedIn: "\u5DF2\u767B\u5F55",
|
|
89812
|
+
lead: "\u8FD9\u53F0\u7535\u8111\u4E0A\u7684 Ryugi \u73B0\u5728\u53EF\u4EE5\u53D1\u5E03 artifact \u4E86\u3002",
|
|
89813
|
+
fromPage: "\u5728 Ryugi \u9875\u9762\u91CC\u53D1\u5E03\u7684\uFF1F",
|
|
89814
|
+
fromPageDetail: "\u56DE\u5230 Ryugi\uFF0C\u5206\u4EAB\u9762\u677F\u4F1A\u81EA\u52A8\u5237\u65B0\u3002",
|
|
89815
|
+
fromAgent: "\u8BA9 agent \u53D1\u5E03\u7684\uFF1F",
|
|
89816
|
+
fromAgentDetail: "\u8BA9\u5B83\u518D\u8FD0\u884C\u4E00\u6B21\u53D1\u5E03\u547D\u4EE4\u3002",
|
|
89817
|
+
autoPublish: "\u81EA\u52A8\u53D1\u5E03\u5DF2\u6253\u5F00",
|
|
89818
|
+
autoPublishDetail: "agent \u6BCF\u8F6E\u7ED3\u675F\u540E\uFF0C\u6539\u8FC7\u7684 artifact \u4F1A\u4EE5\u79C1\u5BC6\u65B9\u5F0F\u540C\u6B65\u5230 Ryugi Cloud\u3002\u5173\u95ED\uFF1A\u8FD0\u884C <code>ryugi-artifacts config --auto-publish off</code>\u3002",
|
|
89819
|
+
notConnected: "\u672A\u8FDE\u63A5",
|
|
89820
|
+
retry: "\u91CD\u65B0\u767B\u5F55",
|
|
89821
|
+
retryDetail: "\u56DE\u5230 Ryugi\uFF0C\u5728\u5206\u4EAB\u9762\u677F\u91CC\u518D\u70B9\u4E00\u6B21\u300C\u767B\u5F55\u300D\u3002",
|
|
89822
|
+
description: "Ryugi Cloud \u672C\u5730\u767B\u5F55\u7ED3\u679C\u3002\u5B8C\u6210\u8FDE\u63A5\u540E\uFF0C\u8FD4\u56DE Ryugi \u7EE7\u7EED\u53D1\u5E03\u548C\u5206\u4EAB Artifact\u3002",
|
|
89823
|
+
closeOk: "\u53EF\u4EE5\u5173\u95ED\u8FD9\u4E2A\u9875\u9762",
|
|
89824
|
+
closeFailed: "\u53EF\u4EE5\u5173\u95ED\u8FD9\u4E2A\u9875\u9762\u540E\u91CD\u8BD5"
|
|
89825
|
+
},
|
|
89826
|
+
login: {
|
|
89827
|
+
expired: "\u8FD9\u4E2A\u767B\u5F55\u94FE\u63A5\u5DF2\u8FC7\u671F\u6216\u5DF2\u7ECF\u7528\u8FC7\u3002\u56DE\u5230 Ryugi \u91CD\u65B0\u53D1\u8D77\u4E00\u6B21\u767B\u5F55\u3002",
|
|
89828
|
+
unreachable: "\u8FDE\u4E0D\u4E0A {{origin}}\uFF08{{message}}\uFF09\u3002\u68C0\u67E5\u7F51\u7EDC\u540E\u56DE\u5230 Ryugi \u91CD\u65B0\u53D1\u8D77\u767B\u5F55\u3002",
|
|
89829
|
+
refused: "Ryugi Cloud \u6CA1\u6709\u63A5\u53D7\u8FD9\u6B21\u767B\u5F55\uFF08{{reason}}\uFF09\u3002\u56DE\u5230 Ryugi \u91CD\u65B0\u53D1\u8D77\u767B\u5F55\u3002"
|
|
89830
|
+
},
|
|
89831
|
+
meta: {
|
|
89832
|
+
artifact: "\u5728 {{project}} \u9879\u76EE\u4E2D\u67E5\u770B {{title}}\uFF0C\u8FD9\u662F\u4E00\u4E2A {{type}} Artifact\u3002",
|
|
89833
|
+
library: "\u6D4F\u89C8 {{project}} \u9879\u76EE\u7684\u5168\u90E8 Artboard\u3001Document \u548C HTML Artifact\uFF0C\u9884\u89C8\u771F\u5B9E\u5185\u5BB9\uFF0C\u6309\u7C7B\u578B\u3001\u540D\u79F0\u548C\u66F4\u65B0\u65F6\u95F4\u67E5\u627E\u4F5C\u54C1\u3002"
|
|
89834
|
+
}
|
|
89835
|
+
};
|
|
89836
|
+
|
|
89837
|
+
// src/server/locales/index.ts
|
|
89838
|
+
var serverText = (locale) => translator({ en: en_default, zh: zh_default }, locale);
|
|
89839
|
+
|
|
89734
89840
|
// src/server/callback-page.ts
|
|
89735
89841
|
var CALLBACK_PAGE_CSP = "default-src 'none'; style-src 'unsafe-inline'; img-src data:; script-src 'none'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'";
|
|
89736
89842
|
var escapeHtml = (value) => value.replace(/[&<>"']/g, (ch) => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" })[ch]);
|
|
@@ -89802,24 +89908,25 @@ footer { display: flex; justify-content: space-between; gap: 16px; margin-top: 2
|
|
|
89802
89908
|
footer code { font: 12px var(--mono); }
|
|
89803
89909
|
`;
|
|
89804
89910
|
var row = (title, detail) => `<li><b>${title}</b><span>${detail}</span></li>`;
|
|
89805
|
-
function callbackPage(result) {
|
|
89911
|
+
function callbackPage(result, locale = "en") {
|
|
89912
|
+
const t7 = serverText(locale);
|
|
89806
89913
|
const host = escapeHtml(new URL(result.origin).host);
|
|
89807
|
-
const title = result.ok ? "
|
|
89808
|
-
const body = result.ok ? `<p class="status">${CIRCLE_CHECK}
|
|
89809
|
-
<h1
|
|
89810
|
-
<p class="lead"
|
|
89811
|
-
<ul class="rows">${row("
|
|
89812
|
-
<h1
|
|
89914
|
+
const title = result.ok ? t7("callback.titleOk") : t7("callback.titleFailed");
|
|
89915
|
+
const body = result.ok ? `<p class="status">${CIRCLE_CHECK}${t7("callback.connected")}</p>
|
|
89916
|
+
<h1>${t7("callback.signedIn")}<em>${escapeHtml(result.login)}</em></h1>
|
|
89917
|
+
<p class="lead">${t7("callback.lead")}</p>
|
|
89918
|
+
<ul class="rows">${row(t7("callback.fromPage"), t7("callback.fromPageDetail"))}${row(t7("callback.fromAgent"), t7("callback.fromAgentDetail"))}${result.autoPublish ? row(t7("callback.autoPublish"), t7("callback.autoPublishDetail")) : ""}</ul>` : `<p class="status">${CIRCLE_ALERT}${t7("callback.notConnected")}</p>
|
|
89919
|
+
<h1>${t7("callback.titleFailed")}</h1>
|
|
89813
89920
|
<p class="lead">${escapeHtml(result.detail)}</p>
|
|
89814
|
-
<ul class="rows">${row("
|
|
89921
|
+
<ul class="rows">${row(t7("callback.retry"), t7("callback.retryDetail"))}</ul>`;
|
|
89815
89922
|
return `<!doctype html>
|
|
89816
|
-
<html lang="
|
|
89923
|
+
<html lang="${HTML_LANG[locale]}">
|
|
89817
89924
|
<head>
|
|
89818
89925
|
<meta charset="utf-8">
|
|
89819
89926
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
89820
89927
|
<meta name="referrer" content="no-referrer">
|
|
89821
89928
|
<meta name="robots" content="noindex, nofollow">
|
|
89822
|
-
<meta name="description" content="
|
|
89929
|
+
<meta name="description" content="${t7("callback.description")}">
|
|
89823
89930
|
<title>${title}</title>
|
|
89824
89931
|
<style>${STYLE2}</style>
|
|
89825
89932
|
</head>
|
|
@@ -89827,7 +89934,7 @@ function callbackPage(result) {
|
|
|
89827
89934
|
<div class="mark">${MARK}ryugi</div>
|
|
89828
89935
|
<main class="${result.ok ? "signed-in" : "failed"}">
|
|
89829
89936
|
${body}
|
|
89830
|
-
<footer><span>${result.ok ? "
|
|
89937
|
+
<footer><span>${result.ok ? t7("callback.closeOk") : t7("callback.closeFailed")}</span><code>${host}</code></footer>
|
|
89831
89938
|
</main>
|
|
89832
89939
|
</body>
|
|
89833
89940
|
</html>
|
|
@@ -90043,7 +90150,7 @@ function createCloudRoutes(options) {
|
|
|
90043
90150
|
const challenge = import_node_crypto8.default.createHash("sha256").update(verifier).digest("base64url");
|
|
90044
90151
|
return `${origin}/auth/cli?port=${options.port()}&state=${state}&challenge=${challenge}`;
|
|
90045
90152
|
};
|
|
90046
|
-
const cloudFetch = async (method,
|
|
90153
|
+
const cloudFetch = async (method, path24, body) => {
|
|
90047
90154
|
const credentials = readCredentials(credentialsFile2, origin);
|
|
90048
90155
|
if (!credentials) throw new SignedOut();
|
|
90049
90156
|
const headers = { Authorization: `Bearer ${credentials.token}` };
|
|
@@ -90057,7 +90164,7 @@ function createCloudRoutes(options) {
|
|
|
90057
90164
|
}
|
|
90058
90165
|
let res;
|
|
90059
90166
|
try {
|
|
90060
|
-
res = await fetch(`${origin}${
|
|
90167
|
+
res = await fetch(`${origin}${path24}`, { method, headers, body: payload });
|
|
90061
90168
|
} catch (err) {
|
|
90062
90169
|
throw new CloudRefused(502, `could not reach ${origin}: ${err.message}`);
|
|
90063
90170
|
}
|
|
@@ -90114,7 +90221,7 @@ function createCloudRoutes(options) {
|
|
|
90114
90221
|
}
|
|
90115
90222
|
const sha = (data) => import_node_crypto8.default.createHash("sha256").update(data).digest("hex");
|
|
90116
90223
|
const hashed = withCloudRuntime(ref.type, packed).map((file) => ({ ...file, hash: sha(file.data) }));
|
|
90117
|
-
const content = { title: inspected.title, payload: inspected.payload, files: hashed.map(({ path:
|
|
90224
|
+
const content = { title: inspected.title, payload: inspected.payload, files: hashed.map(({ path: path24, hash }) => ({ path: path24, hash })) };
|
|
90118
90225
|
const fingerprint = sha(JSON.stringify({ title: inspected.title, payload: fingerprintPayload(inspected.payload), files: packed.map((file) => ({ path: file.path, hash: sha(file.data) })) }));
|
|
90119
90226
|
return { ready: true, hashed, content, fingerprint };
|
|
90120
90227
|
};
|
|
@@ -90129,7 +90236,7 @@ function createCloudRoutes(options) {
|
|
|
90129
90236
|
};
|
|
90130
90237
|
const publish = async (ref, requested, { recreate = true, skipUnchanged = false } = {}) => {
|
|
90131
90238
|
const prepared = await prepare(ref);
|
|
90132
|
-
if (!prepared.ready) return { status: 409, body: { error: "fix these before publishing", reasons: prepared.reasons } };
|
|
90239
|
+
if (!prepared.ready) return { status: 409, body: { error: "fix these before publishing", code: "publish_not_ready", reasons: prepared.reasons } };
|
|
90133
90240
|
const { hashed, content, fingerprint } = prepared;
|
|
90134
90241
|
const key2 = `${ref.type}/${ref.id}`;
|
|
90135
90242
|
const entry = artifactEntry(key2);
|
|
@@ -90308,8 +90415,9 @@ function createCloudRoutes(options) {
|
|
|
90308
90415
|
send(res, 404, "Not found");
|
|
90309
90416
|
};
|
|
90310
90417
|
return {
|
|
90311
|
-
async handleCallback(url, res) {
|
|
90312
|
-
const
|
|
90418
|
+
async handleCallback(url, res, locale = "en") {
|
|
90419
|
+
const t7 = serverText(locale);
|
|
90420
|
+
const page = (status, result) => send(res, status, callbackPage({ ...result, origin }, locale), {
|
|
90313
90421
|
"Content-Type": "text/html; charset=utf-8",
|
|
90314
90422
|
"Content-Security-Policy": CALLBACK_PAGE_CSP
|
|
90315
90423
|
});
|
|
@@ -90318,7 +90426,7 @@ function createCloudRoutes(options) {
|
|
|
90318
90426
|
pendingStates.delete(state);
|
|
90319
90427
|
const code = url.searchParams.get("code");
|
|
90320
90428
|
if (!pending || pending.expires < Date.now() || !code) {
|
|
90321
|
-
page(400, { ok: false, detail: "
|
|
90429
|
+
page(400, { ok: false, detail: t7("login.expired") });
|
|
90322
90430
|
return;
|
|
90323
90431
|
}
|
|
90324
90432
|
let swap;
|
|
@@ -90329,13 +90437,13 @@ function createCloudRoutes(options) {
|
|
|
90329
90437
|
body: JSON.stringify({ code, verifier: pending.verifier })
|
|
90330
90438
|
});
|
|
90331
90439
|
} catch (err) {
|
|
90332
|
-
page(502, { ok: false, detail:
|
|
90440
|
+
page(502, { ok: false, detail: t7("login.unreachable", { origin, message: err.message }) });
|
|
90333
90441
|
return;
|
|
90334
90442
|
}
|
|
90335
90443
|
const issued = await swap.json().catch(() => ({}));
|
|
90336
90444
|
if (!swap.ok || typeof issued.token !== "string" || typeof issued.login !== "string") {
|
|
90337
90445
|
const reason = typeof issued.error === "string" ? issued.error : `HTTP ${swap.status}`;
|
|
90338
|
-
page(400, { ok: false, detail:
|
|
90446
|
+
page(400, { ok: false, detail: t7("login.refused", { reason }) });
|
|
90339
90447
|
return;
|
|
90340
90448
|
}
|
|
90341
90449
|
writeCredentials(credentialsFile2, { origin, token: issued.token, login: issued.login });
|
|
@@ -90495,15 +90603,17 @@ function commentNames({ agentFile, projectDir, cloud }) {
|
|
|
90495
90603
|
var import_node_crypto9 = require("node:crypto");
|
|
90496
90604
|
var escapeHtml2 = (value) => value.replace(/[&<>"']/g, (ch) => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" })[ch]);
|
|
90497
90605
|
function viewerPage(template, page) {
|
|
90606
|
+
const locale = page.locale ?? "en";
|
|
90498
90607
|
const values = {
|
|
90499
90608
|
robots: "noindex, nofollow",
|
|
90609
|
+
"og:locale": locale === "zh" ? "zh_CN" : "en_US",
|
|
90500
90610
|
description: page.description,
|
|
90501
90611
|
"og:title": page.title,
|
|
90502
90612
|
"og:description": page.description,
|
|
90503
90613
|
"twitter:title": page.title,
|
|
90504
90614
|
"twitter:description": page.description
|
|
90505
90615
|
};
|
|
90506
|
-
return template.replace(/<html\b
|
|
90616
|
+
return template.replace(/<html\b([^>]*)>/i, (_tag, attributes) => `<html${attributes.replace(/\slang="[^"]*"/i, "")} lang="${HTML_LANG[locale]}"${page.artifactId ? ` data-ryugi-artifact-id="${escapeHtml2(page.artifactId)}"` : ""}>`).replace(/<title\b[^>]*>[\s\S]*?<\/title>/i, () => `<title>${escapeHtml2(page.title)}</title>`).replace(/(<link\b[^>]*\brel="icon"[^>]*\bhref=")[^"]*(")/i, (tag, prefix, suffix) => page.icon ? `${prefix}${escapeHtml2(page.icon)}${suffix}` : tag).replace(/(<meta\b[^>]*\b(?:name|property)="([^"]+)"[^>]*\bcontent=")([^"]*)("[^>]*>)/gi, (tag, prefix, name, value, suffix) => {
|
|
90507
90617
|
const content = values[name] ?? (name === "og:image" || name === "twitter:image" ? new URL(value, page.url).href : void 0);
|
|
90508
90618
|
return content === void 0 ? tag : `${prefix}${escapeHtml2(content)}${suffix}`;
|
|
90509
90619
|
}).replace(/<\/head>/i, () => `<link rel="canonical" href="${escapeHtml2(page.url)}">
|
|
@@ -90811,7 +90921,12 @@ async function startArtifactsServer(options) {
|
|
|
90811
90921
|
selections.clearAll();
|
|
90812
90922
|
const changeListeners = [];
|
|
90813
90923
|
const activityListeners = [];
|
|
90814
|
-
const
|
|
90924
|
+
const startedAt = Date.now();
|
|
90925
|
+
let lastActivity = startedAt;
|
|
90926
|
+
const touch = () => {
|
|
90927
|
+
lastActivity = Date.now();
|
|
90928
|
+
activityListeners.forEach((listener) => listener());
|
|
90929
|
+
};
|
|
90815
90930
|
let port = 0;
|
|
90816
90931
|
let cookieName = "";
|
|
90817
90932
|
let relay = null;
|
|
@@ -91179,9 +91294,14 @@ async function startArtifactsServer(options) {
|
|
|
91179
91294
|
for (const socket of clients) socket.write(frame);
|
|
91180
91295
|
}
|
|
91181
91296
|
const handleRequest = (req, res) => {
|
|
91182
|
-
touch();
|
|
91183
91297
|
res.setHeader("X-Robots-Tag", "noindex, nofollow");
|
|
91184
91298
|
const url2 = new URL(req.url ?? "/", "http://artifacts.local");
|
|
91299
|
+
if (url2.pathname === "/api/status") {
|
|
91300
|
+
if (!isAuthorized(req, url2.searchParams.get("key"))) send(res, 403, "Forbidden: agent calls need ?key=");
|
|
91301
|
+
else sendJson(res, 200, { pid: process.pid, startedAt, lastActivity, clients: clients.size });
|
|
91302
|
+
return;
|
|
91303
|
+
}
|
|
91304
|
+
touch();
|
|
91185
91305
|
let pathname;
|
|
91186
91306
|
try {
|
|
91187
91307
|
pathname = decodeURIComponent(url2.pathname);
|
|
@@ -91199,7 +91319,7 @@ async function startArtifactsServer(options) {
|
|
|
91199
91319
|
return;
|
|
91200
91320
|
}
|
|
91201
91321
|
if (cloud && pathname === "/api/cloud/callback") {
|
|
91202
|
-
void cloud.handleCallback(url2, res).catch((err) => {
|
|
91322
|
+
void cloud.handleCallback(url2, res, resolveLocale(parseAcceptLanguage(req.headers["accept-language"]))).catch((err) => {
|
|
91203
91323
|
if (!res.headersSent) send(res, 500, `Artifacts error: ${err.message}`);
|
|
91204
91324
|
});
|
|
91205
91325
|
return;
|
|
@@ -91320,7 +91440,9 @@ async function startArtifactsServer(options) {
|
|
|
91320
91440
|
const dir = resolved?.dir;
|
|
91321
91441
|
const project = import_node_path21.default.basename(import_node_path21.default.dirname(import_node_path21.default.dirname(root)));
|
|
91322
91442
|
const title = ref ? dir ? titleOf(readArtifact(dir, ref), ref) : ref.id : `${project} \xB7 Artifacts`;
|
|
91323
|
-
const
|
|
91443
|
+
const locale = resolveLocale(parseAcceptLanguage(req.headers["accept-language"]));
|
|
91444
|
+
const t7 = serverText(locale);
|
|
91445
|
+
const description = ref ? t7("meta.artifact", { project, title, type: ref.type === "artboard" ? "Artboard" : ref.type === "document" ? "Document" : "HTML" }) : t7("meta.library", { project });
|
|
91324
91446
|
const preview = PREVIEW_ROUTE.test(pathname);
|
|
91325
91447
|
const canonicalPath = ref ? dir ? artifactPath(root, ref.type, ref.id) : `/${ref.type}/${ref.id}` : "/";
|
|
91326
91448
|
const canonical = `http://${urlHostForHttp(options.urlHost)}:${port}${preview ? "/preview" : ""}${canonicalPath}`;
|
|
@@ -91328,7 +91450,7 @@ async function startArtifactsServer(options) {
|
|
|
91328
91450
|
const headers = { "Content-Type": "text/html; charset=utf-8" };
|
|
91329
91451
|
if (key2 !== null) headers["Set-Cookie"] = `${cookieName}=${token}; HttpOnly; SameSite=Strict; Path=/`;
|
|
91330
91452
|
void import_node_fs24.default.promises.readFile(import_node_path21.default.join(viewerDir, "index.html"), "utf8").then((template) => {
|
|
91331
|
-
const html = viewerPage(template, { title, description, url: canonical, icon: ref ? typeFaviconHref(ref.type) : void 0, artifactId: resolved?.id });
|
|
91453
|
+
const html = viewerPage(template, { title, description, locale, url: canonical, icon: ref ? typeFaviconHref(ref.type) : void 0, artifactId: resolved?.id });
|
|
91332
91454
|
send(res, 200, html, { ...headers, "Content-Security-Policy": allowInlineScripts(csp, html) });
|
|
91333
91455
|
}).catch((err) => send(res, err.code === "ENOENT" ? 404 : 500, "Viewer unavailable"));
|
|
91334
91456
|
return;
|
|
@@ -91688,22 +91810,76 @@ function openReady(payload) {
|
|
|
91688
91810
|
return pageBoards.filter(([id2]) => ready(id2)).length >= 2;
|
|
91689
91811
|
}
|
|
91690
91812
|
|
|
91813
|
+
// src/server/registry.ts
|
|
91814
|
+
var import_node_crypto11 = __toESM(require("node:crypto"), 1);
|
|
91815
|
+
var import_node_fs26 = __toESM(require("node:fs"), 1);
|
|
91816
|
+
var import_node_os = __toESM(require("node:os"), 1);
|
|
91817
|
+
var import_node_path22 = __toESM(require("node:path"), 1);
|
|
91818
|
+
function registryDir(env = process.env, platform = process.platform, uid = process.getuid?.() ?? -1, tmpdir = import_node_os.default.tmpdir()) {
|
|
91819
|
+
if (env.RYUGI_RUNTIME_DIR) return import_node_path22.default.join(env.RYUGI_RUNTIME_DIR, "servers");
|
|
91820
|
+
if (platform === "win32") return import_node_path22.default.join(tmpdir, "ryugi", "servers");
|
|
91821
|
+
return `/tmp/ryugi-${uid}/servers`;
|
|
91822
|
+
}
|
|
91823
|
+
var fileFor = (dir, project) => import_node_path22.default.join(dir, `${import_node_crypto11.default.createHash("sha256").update(project).digest("hex").slice(0, 16)}.json`);
|
|
91824
|
+
function verifyDir(dir) {
|
|
91825
|
+
if (process.platform === "win32") return;
|
|
91826
|
+
for (const target of [import_node_path22.default.dirname(dir), dir]) {
|
|
91827
|
+
const stat = import_node_fs26.default.lstatSync(target);
|
|
91828
|
+
if (!stat.isDirectory() || stat.uid !== process.getuid() || stat.mode & 18) throw new Error(`Unsafe registry directory: ${target}`);
|
|
91829
|
+
}
|
|
91830
|
+
}
|
|
91831
|
+
function ensureDir(dir) {
|
|
91832
|
+
import_node_fs26.default.mkdirSync(dir, { recursive: true, mode: 448 });
|
|
91833
|
+
verifyDir(dir);
|
|
91834
|
+
}
|
|
91835
|
+
function writeEntry(dir, entry) {
|
|
91836
|
+
ensureDir(dir);
|
|
91837
|
+
const file = fileFor(dir, entry.project);
|
|
91838
|
+
const tmp = `${file}.${process.pid}.tmp`;
|
|
91839
|
+
import_node_fs26.default.writeFileSync(tmp, `${JSON.stringify(entry)}
|
|
91840
|
+
`, { mode: 384 });
|
|
91841
|
+
import_node_fs26.default.renameSync(tmp, file);
|
|
91842
|
+
}
|
|
91843
|
+
function readEntry(file) {
|
|
91844
|
+
try {
|
|
91845
|
+
const value = JSON.parse(import_node_fs26.default.readFileSync(file, "utf8"));
|
|
91846
|
+
if (typeof value.project !== "string" || typeof value.root !== "string" || typeof value.serverId !== "string") return null;
|
|
91847
|
+
if (!Number.isInteger(value.pid) || !Number.isFinite(value.startedAt)) return null;
|
|
91848
|
+
if (value.root !== import_node_path22.default.join(value.project, ".ryugi", "artifacts")) return null;
|
|
91849
|
+
return value;
|
|
91850
|
+
} catch {
|
|
91851
|
+
return null;
|
|
91852
|
+
}
|
|
91853
|
+
}
|
|
91854
|
+
function removeEntry(dir, entry) {
|
|
91855
|
+
const file = fileFor(dir, entry.project);
|
|
91856
|
+
if (readEntry(file)?.serverId === entry.serverId) import_node_fs26.default.rmSync(file, { force: true });
|
|
91857
|
+
}
|
|
91858
|
+
function touchEntry(dir, entry) {
|
|
91859
|
+
const file = fileFor(dir, entry.project);
|
|
91860
|
+
const current = readEntry(file);
|
|
91861
|
+
if (!current) return writeEntry(dir, entry);
|
|
91862
|
+
if (current.serverId !== entry.serverId) return;
|
|
91863
|
+
const now = /* @__PURE__ */ new Date();
|
|
91864
|
+
import_node_fs26.default.utimesSync(file, now, now);
|
|
91865
|
+
}
|
|
91866
|
+
|
|
91691
91867
|
// package.json
|
|
91692
|
-
var version = "1.
|
|
91868
|
+
var version = "1.33.0";
|
|
91693
91869
|
|
|
91694
91870
|
// src/server/main.ts
|
|
91695
91871
|
async function main() {
|
|
91696
91872
|
const config = parseEnv(process.env, process.argv.slice(2));
|
|
91697
|
-
const root =
|
|
91698
|
-
const stateDir =
|
|
91873
|
+
const root = import_node_path23.default.resolve(config.root);
|
|
91874
|
+
const stateDir = import_node_path23.default.join(root, ".state");
|
|
91699
91875
|
const server = await startArtifactsServer({
|
|
91700
91876
|
root,
|
|
91701
|
-
viewerDir:
|
|
91702
|
-
runtimeDir:
|
|
91877
|
+
viewerDir: import_node_path23.default.join(__dirname, "viewer"),
|
|
91878
|
+
runtimeDir: import_node_path23.default.join(__dirname, "runtime"),
|
|
91703
91879
|
host: config.host,
|
|
91704
91880
|
urlHost: config.urlHost,
|
|
91705
|
-
configFile:
|
|
91706
|
-
cloud: { origin: config.cloudOrigin, credentialsFile: credentialsFile(process.env, process.platform,
|
|
91881
|
+
configFile: import_node_path23.default.join(import_node_path23.default.dirname(root), "config.json"),
|
|
91882
|
+
cloud: { origin: config.cloudOrigin, credentialsFile: credentialsFile(process.env, process.platform, import_node_os2.default.homedir()) },
|
|
91707
91883
|
relay: { url: `${config.cloudOrigin.replace(/^http/, "ws")}/api/relay/host`, version }
|
|
91708
91884
|
});
|
|
91709
91885
|
let lastActivity = Date.now();
|
|
@@ -91727,17 +91903,26 @@ async function main() {
|
|
|
91727
91903
|
if (launcher) (0, import_node_child_process2.execFile)(launcher.bin, launcher.args, () => {
|
|
91728
91904
|
});
|
|
91729
91905
|
});
|
|
91906
|
+
const registry2 = registryDir();
|
|
91907
|
+
const entry = config.serverId ? { project: import_node_path23.default.dirname(import_node_path23.default.dirname(root)), root, pid: process.pid, serverId: config.serverId, startedAt: Date.now() } : null;
|
|
91908
|
+
const quietly = (fn5) => {
|
|
91909
|
+
try {
|
|
91910
|
+
fn5();
|
|
91911
|
+
} catch {
|
|
91912
|
+
}
|
|
91913
|
+
};
|
|
91730
91914
|
let stopping = false;
|
|
91731
91915
|
const shutdown = async (reason) => {
|
|
91732
91916
|
if (stopping) return;
|
|
91733
91917
|
stopping = true;
|
|
91734
91918
|
console.log(JSON.stringify({ type: "server-stopped", reason }));
|
|
91735
|
-
|
|
91736
|
-
writeJsonAtomic(
|
|
91919
|
+
import_node_fs27.default.rmSync(import_node_path23.default.join(stateDir, "server-info"), { force: true });
|
|
91920
|
+
writeJsonAtomic(import_node_path23.default.join(stateDir, "server-stopped"), { reason, timestamp: Date.now() });
|
|
91921
|
+
if (entry) quietly(() => removeEntry(registry2, entry));
|
|
91737
91922
|
await server.close();
|
|
91738
91923
|
process.exit(0);
|
|
91739
91924
|
};
|
|
91740
|
-
const ownersFile =
|
|
91925
|
+
const ownersFile = import_node_path23.default.join(stateDir, "owners");
|
|
91741
91926
|
const timer = setInterval(() => {
|
|
91742
91927
|
const owners = readOwners(ownersFile);
|
|
91743
91928
|
const reason = shutdownReason({
|
|
@@ -91747,11 +91932,14 @@ async function main() {
|
|
|
91747
91932
|
ownersAlive: owners.length === 0 || liveOwners(owners, processAlive).length > 0
|
|
91748
91933
|
});
|
|
91749
91934
|
if (reason) void shutdown(reason);
|
|
91935
|
+
else if (entry) quietly(() => touchEntry(registry2, entry));
|
|
91750
91936
|
}, config.lifecycleCheckMs);
|
|
91751
91937
|
timer.unref();
|
|
91752
91938
|
process.on("SIGTERM", () => void shutdown("SIGTERM"));
|
|
91753
91939
|
process.on("SIGINT", () => void shutdown("SIGINT"));
|
|
91754
|
-
|
|
91940
|
+
process.on("SIGHUP", () => void shutdown("SIGHUP"));
|
|
91941
|
+
import_node_fs27.default.rmSync(import_node_path23.default.join(stateDir, "server-stopped"), { force: true });
|
|
91942
|
+
if (entry) quietly(() => writeEntry(registry2, entry));
|
|
91755
91943
|
console.log(JSON.stringify({ type: "server-started", url: server.url, port: server.port, root }));
|
|
91756
91944
|
}
|
|
91757
91945
|
main().catch((err) => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{n as t,t as n}from"./jsx-runtime-CldxteV5.js";import{S as r,T as i,o as a,t as o}from"./RailSwitch-B8Aht-FG.js";import{E as s,T as c,d as l,f as u,k as d,t as f,y as p}from"./DocumentLayout-DUPesXt0.js";var m=e(t(),1),h=n();function g(){let e=(0,m.useMemo)(()=>window.matchMedia(`(prefers-color-scheme: dark)`),[]),[t,n]=(0,m.useState)(e.matches);return(0,m.useEffect)(()=>{let t=()=>n(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[e]),t}function _({id:e,state:t,contentBase:n,comments:_=r(),offline:v=!1}){let y=g(),[b,x]=(0,m.useState)(null),S=(0,m.useMemo)(()=>({artifact:`cloud/${e}`,contentBase:n,channel:c(),send:()=>void 0}),[e,n]),C=_.threads.filter(e=>e.status===`open`).length,w=a(e,{comments:C,activity:null,retrying:!1,reason:null,history:!1,historyOpen:!1});return(0,m.useEffect)(()=>{let e=document.createElement(`base`);return e.href=n,document.head.prepend(e),()=>e.remove()},[n]),(0,h.jsxs)(`div`,{className:`x1us19tq x1rozbrz xo2rkog`,className:`ryugi-doc ${{className:`x1us19tq x1rozbrz xo2rkog`}.className??``}`,children:[w?null:(0,h.jsxs)(`div`,{className:`x78zum5 x6s0dn4 x17d4w8g x1vqgdyp x4l9tsp x1bo0w0s xqfszdh xfifm61`,children:[(0,h.jsx)(o,{comments:C,open:!1,available:!1,onComments:()=>{},onHistory:()=>{}}),(0,h.jsx)(`span`,{children:i(`document.historyOffline`)})]}),v?(0,h.jsxs)(`div`,{...{0:{className:`x78zum5 x6s0dn4 x17d4w8g x1vqgdyp x4l9tsp x1bo0w0s xqfszdh xfifm61`},1:{className:`x6s0dn4 x17d4w8g x1vqgdyp x4l9tsp x1bo0w0s xqfszdh xfifm61 x1s85apg x1ux6vrq`}}[!!w|0],children:[(0,h.jsx)(`i`,{className:`xci0xqf x1hagigm x16rqkct xxwmxtg`}),i(`document.offlineNoComments`)]}):null,(0,h.jsx)(f,{editor:b,threads:_.threads,children:(0,h.jsx)(p.Provider,{value:S,children:(0,h.jsx)(d,{variant:`article`,theme:y?`dark`:`light`,initialValue:t,extraNodes:l,rendererConfig:u,onEditorReady:e=>{e?.setEditable(!1),x(e??null)},children:(0,h.jsx)(s,{})})})})]})}export{_ as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{n as t,t as n}from"./jsx-runtime-CldxteV5.js";import{T as r,o as i,w as a}from"./RailSwitch-B8Aht-FG.js";import{t as o}from"./index.js";import s from"./CloudDocument-DBhwAPZX.js";import{DocumentView as c,t as l}from"./DocumentPage-p78IN0UO.js";var u=e(t(),1),d=`1.33.0`,f=e=>/^(\d+)\.(\d+)\./.exec(e??``)?.slice(1,3).join(`.`)??null;function p(e,t){let n=f(e);return n!==null&&n===f(t)}var m=(e,t)=>a.t(`document.versionReason`,{host:t??a.t(`document.unknownVersion`),viewer:e}),h=n();function g({id:e,state:t,contentBase:n,liveContentBase:a,comments:f}){let{transport:g,presence:_}=l(e,a??n??``),v=_?.online??!1;i(e,{online:_?.online??null});let[y,b]=(0,u.useState)(!1);(0,u.useEffect)(()=>{v&&b(!0)},[v]);let x=t&&n?(0,h.jsx)(s,{id:e,state:t,contentBase:n,comments:f,offline:_!==null&&!v}):null;if(!g||!(y||v))return x??(0,h.jsx)(o,{children:r(_===null?`common.connecting`:`document.notPublished`)});let S=v&&p(d,_?.version??null),C=v&&!S?m(d,_?.version??null):null;return(0,h.jsx)(c,{id:e,transport:g,live:v,cloud:{online:v,canEdit:S,reason:C},fallback:x})}export{g as default};
|