From b03cfffb9e630e2ffaed3fc0d1d5600b2885bccf Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 21 Nov 2025 11:42:40 +0100 Subject: [PATCH] :rewind: Restore the dashboard thumbnail rendering using wasm (#7796) * Revert ":bug: Rollback esm worker (#7792)" This reverts commit 0120a5335bb5823cd84670d4aba30f4dbb74312b. * :bug: Fix incorrect manifest reading on building worker --- frontend/scripts/_helpers.js | 16 +++-------- frontend/shadow-cljs.edn | 2 +- frontend/src/app/main/ui/dashboard/grid.cljs | 28 ++++++++++++-------- frontend/src/app/util/worker.cljs | 2 +- 4 files changed, 23 insertions(+), 25 deletions(-) diff --git a/frontend/scripts/_helpers.js b/frontend/scripts/_helpers.js index 323da942b0..3183d060c3 100644 --- a/frontend/scripts/_helpers.js +++ b/frontend/scripts/_helpers.js @@ -180,7 +180,7 @@ export async function watch(baseDir, predicate, callback) { }); } -async function readManifestFile(path) { +async function readManifestFile() { const manifestPath = "resources/public/js/manifest.json"; let content = await fs.readFile(manifestPath, { encoding: "utf8" }); return JSON.parse(content); @@ -189,27 +189,19 @@ async function readManifestFile(path) { async function readShadowManifest() { const ts = Date.now(); try { - const content1 = await readManifestFile( - "resources/public/js/manifest.json", - ); - const content2 = await readManifestFile( - "resources/public/js/worker/manifest.json", - ); + const content = await readManifestFile(); const index = { ts: ts, config: "js/config.js?ts=" + ts, polyfills: "js/polyfills.js?ts=" + ts, + worker_main: "js/worker/main.js?ts=" + ts, }; - for (let item of content1) { + for (let item of content) { index[item.name] = "js/" + item["output-name"]; } - for (let item of content2) { - index["worker_" + item.name] = "js/worker/" + item["output-name"]; - } - return index; } catch (cause) { return { diff --git a/frontend/shadow-cljs.edn b/frontend/shadow-cljs.edn index f80bdc098a..dab57241a8 100644 --- a/frontend/shadow-cljs.edn +++ b/frontend/shadow-cljs.edn @@ -83,7 +83,7 @@ :source-map-detail-level :all}}} :worker - {:target :browser + {:target :esm :output-dir "resources/public/js/worker/" :asset-path "/js/worker" :devtools {:browser-inject :main diff --git a/frontend/src/app/main/ui/dashboard/grid.cljs b/frontend/src/app/main/ui/dashboard/grid.cljs index d60d0a9483..695e9fb44e 100644 --- a/frontend/src/app/main/ui/dashboard/grid.cljs +++ b/frontend/src/app/main/ui/dashboard/grid.cljs @@ -18,6 +18,7 @@ [app.main.data.notifications :as ntf] [app.main.data.project :as dpj] [app.main.data.team :as dtm] + [app.main.features :as features] [app.main.fonts :as fonts] [app.main.rasterizer :as thr] [app.main.refs :as refs] @@ -58,17 +59,22 @@ (defn render-thumbnail [file-id revn] - (->> (mw/ask! {:cmd :thumbnails/generate-for-file - :revn revn - :file-id file-id - :width thumbnail-width}) - (rx/mapcat - (fn [{:keys [fonts] :as result}] - (->> (fonts/render-font-styles fonts) - (rx/map (fn [styles] - (-> result - (assoc :styles styles - :width thumbnail-width))))))))) + (if (features/active-feature? @st/state "render-wasm/v1") + (->> (mw/ask! {:cmd :thumbnails/generate-for-file-wasm + :revn revn + :file-id file-id + :width thumbnail-width})) + (->> (mw/ask! {:cmd :thumbnails/generate-for-file + :revn revn + :file-id file-id + :width thumbnail-width}) + (rx/mapcat + (fn [{:keys [fonts] :as result}] + (->> (fonts/render-font-styles fonts) + (rx/map (fn [styles] + (-> result + (assoc :styles styles + :width thumbnail-width)))))))))) (defn- ask-for-thumbnail "Creates some hooks to handle the files thumbnails cache" diff --git a/frontend/src/app/util/worker.cljs b/frontend/src/app/util/worker.cljs index bf1b44c30b..cf3260ad30 100644 --- a/frontend/src/app/util/worker.cljs +++ b/frontend/src/app/util/worker.cljs @@ -89,7 +89,7 @@ (defn init "Return a initialized webworker instance." [path on-error] - (let [instance (js/Worker. path) + (let [instance (js/Worker. path #js {:type "module"}) bus (rx/subject) worker (Worker. instance (rx/to-observable bus))