Skip to content

Commit 9a751d5

Browse files
committed
d2js: support unicode characters
1 parent 80f560a commit 9a751d5

File tree

4 files changed

+20
-2
lines changed

4 files changed

+20
-2
lines changed

ci/release/changelogs/next.md

+1
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,4 @@
2727
- fixes panic when comment lines appear in arrays [#2378](https://github.com/terrastruct/d2/pull/2378)
2828
- fixes inconsistencies when objects were double quoted [#2390](https://github.com/terrastruct/d2/pull/2390)
2929
- CLI: fetch and render remote images of mimetype octet-stream correctly [#2370](https://github.com/terrastruct/d2/pull/2370)
30+
- d2js: handle unicode characters (PR pending)

d2js/js/src/worker.browser.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ export function setupMessageHandler(isNode, port, initWasm) {
5454
const result = await d2.render(JSON.stringify(data));
5555
const response = JSON.parse(result);
5656
if (response.error) throw new Error(response.error.message);
57-
currentPort.postMessage({ type: "result", data: atob(response.data) });
57+
const decoded = new TextDecoder().decode(
58+
Uint8Array.from(atob(response.data), (c) => c.charCodeAt(0))
59+
);
60+
currentPort.postMessage({ type: "result", data: decoded });
5861
} catch (err) {
5962
currentPort.postMessage({ type: "error", error: err.message });
6063
}

d2js/js/src/worker.node.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,10 @@ export function setupMessageHandler(isNode, port, initWasm) {
4949
const result = await d2.render(JSON.stringify(data));
5050
const response = JSON.parse(result);
5151
if (response.error) throw new Error(response.error.message);
52-
currentPort.postMessage({ type: "result", data: atob(response.data) });
52+
const decoded = new TextDecoder().decode(
53+
Uint8Array.from(atob(response.data), (c) => c.charCodeAt(0))
54+
);
55+
currentPort.postMessage({ type: "result", data: decoded });
5356
} catch (err) {
5457
currentPort.postMessage({ type: "error", error: err.message });
5558
}

d2js/js/test/unit/basic.test.js

+11
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,17 @@ layers: {
171171
await d2.worker.terminate();
172172
}, 20000);
173173

174+
test("unicode characters work", async () => {
175+
const d2 = new D2();
176+
const result = await d2.compile("こんにちは -> ♒️");
177+
const svg = await d2.render(result.diagram);
178+
expect(svg).toContain("<svg");
179+
expect(svg).toContain("</svg>");
180+
expect(svg).toContain("こんにちは");
181+
expect(svg).toContain("♒️");
182+
await d2.worker.terminate();
183+
}, 20000);
184+
174185
test("handles syntax errors correctly", async () => {
175186
const d2 = new D2();
176187
try {

0 commit comments

Comments
 (0)