From 4576d15beae2e760c9932b3feb8fa5dd1024be4a Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Mon, 13 Jan 2025 23:00:37 -0700 Subject: [PATCH] cleanup --- d2js/js/Makefile | 2 +- d2js/js/build.js | 11 ++++++----- d2js/js/package.json | 2 +- d2js/js/src/index.js | 5 +---- d2js/js/src/platform.browser.js | 28 +++------------------------- d2js/js/src/worker.browser.js | 2 +- d2js/js/src/worker.js | 2 +- d2js/js/src/worker.node.js | 2 +- d2js/js/src/worker.shared.js | 7 +++++-- 9 files changed, 20 insertions(+), 41 deletions(-) diff --git a/d2js/js/Makefile b/d2js/js/Makefile index cc098c626..1b81115e5 100644 --- a/d2js/js/Makefile +++ b/d2js/js/Makefile @@ -21,4 +21,4 @@ node_modules: .PHONY: cleanup cleanup: test - prefix "$@" git checkout -- src/platform.js + prefix "$@" git checkout -- src/platform.js src/worker.js diff --git a/d2js/js/build.js b/d2js/js/build.js index 9f0c11227..a3d3a145f 100644 --- a/d2js/js/build.js +++ b/d2js/js/build.js @@ -36,13 +36,14 @@ async function buildDynamicFiles(platform) { const platformPath = join(SRC_DIR, "platform.js"); await writeFile(platformPath, platformContent); - const workerContent = + const workerSource = platform === "node" - ? `export * from "./worker.node.js";` - : `export * from "./worker.browser.js";`; + ? join(SRC_DIR, "worker.node.js") + : join(SRC_DIR, "worker.browser.js"); - const workerPath = join(SRC_DIR, "worker.js"); - await writeFile(workerPath, workerContent); + const workerTarget = join(SRC_DIR, "worker.js"); + const workerContent = await readFile(workerSource, "utf8"); + await writeFile(workerTarget, workerContent); } async function buildAndCopy(buildType) { diff --git a/d2js/js/package.json b/d2js/js/package.json index 1212c5ff6..535b1c938 100644 --- a/d2js/js/package.json +++ b/d2js/js/package.json @@ -2,7 +2,7 @@ "name": "@terrastruct/d2", "author": "Terrastruct, Inc.", "description": "D2.js is a wrapper around the WASM build of D2, the modern text-to-diagram language.", - "version": "0.1.17", + "version": "0.1.19", "repository": { "type": "git", "url": "git+https://github.com/terrastruct/d2.git", diff --git a/d2js/js/src/index.js b/d2js/js/src/index.js index a0be58a00..880e48295 100644 --- a/d2js/js/src/index.js +++ b/d2js/js/src/index.js @@ -54,10 +54,7 @@ export class D2 { }); } else { this.worker.onerror = (error) => { - console.error("Worker detailed error:", error); - console.error("Error message:", error.message); - console.error("Error filename:", error.filename); - console.error("Error lineno:", error.lineno); + console.error("Worker encountered an error:", error.message || error); }; } diff --git a/d2js/js/src/platform.browser.js b/d2js/js/src/platform.browser.js index 1909b2d0a..052149742 100644 --- a/d2js/js/src/platform.browser.js +++ b/d2js/js/src/platform.browser.js @@ -18,34 +18,12 @@ export async function createWorker() { ); let workerScript = await response.text(); - // Create global Go without IIFE in module context - let blob = new Blob( - [ - // First establish Go in global scope - wasmExecJs, - // Then the module code - workerScript, - ], - { - type: "text/javascript;charset=utf-8", - } - ); + let blob = new Blob([wasmExecJs, workerScript], { + type: "text/javascript;charset=utf-8", + }); - console.log("about to create worker"); const worker = new Worker(URL.createObjectURL(blob), { type: "module", }); - console.log("worker", worker); - - // Add error handler to see initialization errors - worker.onerror = (error) => { - console.error("Worker initialization error:", { - message: error.message, - filename: error.filename, - lineno: error.lineno, - error: error.error, - }); - }; - return worker; } diff --git a/d2js/js/src/worker.browser.js b/d2js/js/src/worker.browser.js index 2eaed3ff0..361432b0d 100644 --- a/d2js/js/src/worker.browser.js +++ b/d2js/js/src/worker.browser.js @@ -7,4 +7,4 @@ async function initWasmBrowser(wasmBinary) { return self.d2; } -setupMessageHandler(self, initWasmBrowser); +setupMessageHandler(false, self, initWasmBrowser); diff --git a/d2js/js/src/worker.js b/d2js/js/src/worker.js index 769950402..3e2e2def0 100644 --- a/d2js/js/src/worker.js +++ b/d2js/js/src/worker.js @@ -1 +1 @@ -export * from "./worker.node.js"; \ No newline at end of file +// Replaced at build time diff --git a/d2js/js/src/worker.node.js b/d2js/js/src/worker.node.js index b9d9bc6f6..0f65334ef 100644 --- a/d2js/js/src/worker.node.js +++ b/d2js/js/src/worker.node.js @@ -8,4 +8,4 @@ async function initWasmNode(wasmBinary) { return global.d2; } -setupMessageHandler(parentPort, initWasmNode); +setupMessageHandler(true, parentPort, initWasmNode); diff --git a/d2js/js/src/worker.shared.js b/d2js/js/src/worker.shared.js index e98bf9e1e..bbd1293e8 100644 --- a/d2js/js/src/worker.shared.js +++ b/d2js/js/src/worker.shared.js @@ -1,7 +1,7 @@ let currentPort; let d2; -export function setupMessageHandler(port, initWasm) { +export function setupMessageHandler(isNode, port, initWasm) { currentPort = port; const handleMessage = async (e) => { @@ -10,6 +10,9 @@ export function setupMessageHandler(port, initWasm) { switch (type) { case "init": try { + if (isNode) { + eval(data.wasmExecContent); + } d2 = await initWasm(data.wasm); currentPort.postMessage({ type: "ready" }); } catch (err) { @@ -41,7 +44,7 @@ export function setupMessageHandler(port, initWasm) { } }; - if (typeof process !== "undefined" && process.release?.name === "node") { + if (isNode) { port.on("message", handleMessage); } else { port.onmessage = (e) => handleMessage(e.data);