|
1 | | -export default {} |
2 | | -// import { exec } from "child_process"; |
3 | | -// // import { randomUUID } from "crypto" |
4 | | -// import { unlinkSync, writeFileSync } from "fs"; |
| 1 | +import { IHttp } from "@rocket.chat/apps-engine/definition/accessors"; |
5 | 2 |
|
6 | | -// export async function renderDiagramToBase64URI( |
7 | | -// diagram: string |
8 | | -// ): Promise<string> { |
9 | | -// const diagramID = "diagram"; |
10 | | -// // ?? randomUUID() |
11 | | -// const diagramSourceFileName = `${diagramID}.txt`; |
12 | | -// const diagramSVGFileName = `${diagramID}.svg`; |
| 3 | +export async function renderDiagramToBase64URI( |
| 4 | + http: IHttp, |
| 5 | + source: string |
| 6 | +): Promise<string> { |
| 7 | + source = source.trim(); |
13 | 8 |
|
14 | | -// writeFileSync(diagramSourceFileName, diagram); |
| 9 | + let svgContent = ""; |
| 10 | + try { |
| 11 | + const response = await http.post("https://kroki.io", { |
| 12 | + headers: { |
| 13 | + Accept: "image/svg+xml", |
| 14 | + "Content-Type": "text/json", |
| 15 | + }, |
| 16 | + content: JSON.stringify({ |
| 17 | + diagram_source: source, |
| 18 | + diagram_type: "mermaid", |
| 19 | + output_format: "svg", |
| 20 | + }), |
| 21 | + }); |
| 22 | + svgContent = response.content as string; |
| 23 | + } catch (error) { |
| 24 | + console.error("Error while rendering diagram", error); |
| 25 | + return ""; |
| 26 | + } |
15 | 27 |
|
16 | | -// await new Promise<void>((resolve, reject) => { |
17 | | -// const diagram = exec( |
18 | | -// `npx mmdc -i ${diagramSourceFileName} -o ${diagramSVGFileName}`, |
19 | | -// { |
20 | | -// cwd: process.cwd(), |
21 | | -// timeout: 10000, |
22 | | -// } |
23 | | -// ); |
| 28 | + console.log(svgContent); |
24 | 29 |
|
25 | | -// diagram.on("exit", async (code) => { |
26 | | -// // unlinkSync(diagramSourceFileName) |
27 | | -// if (code === 0) { |
28 | | -// resolve(); |
29 | | -// } else { |
30 | | -// console.log(`Error: ${code}`); |
31 | | -// reject(); |
32 | | -// } |
33 | | -// }); |
34 | | -// }); |
35 | | - |
36 | | -// const base64 = await new Promise<string>((resolve, reject) => { |
37 | | -// exec(`base64 ${diagramSVGFileName}`, async (err, stdout) => { |
38 | | -// unlinkSync(diagramSVGFileName); |
39 | | -// if (err) reject(err); |
40 | | -// resolve(stdout); |
41 | | -// }); |
42 | | -// }); |
43 | | - |
44 | | -// const uri = `data:image/svg+xml;base64,${base64.trim()}`; |
45 | | - |
46 | | -// return uri; |
47 | | -// } |
| 30 | + const svgContentBase64 = Buffer.from(svgContent).toString("base64"); |
| 31 | + const uri = `data:image/svg+xml;base64,${svgContentBase64}`; |
| 32 | + return uri; |
| 33 | +} |
0 commit comments