diff --git a/backend/src/app/http/sse.clj b/backend/src/app/http/sse.clj index fdeda6736..7459d9224 100644 --- a/backend/src/app/http/sse.clj +++ b/backend/src/app/http/sse.clj @@ -9,7 +9,6 @@ (:refer-clojure :exclude [tap]) (:require [app.common.data :as d] - [app.common.exceptions :as ex] [app.common.logging :as l] [app.common.transit :as t] [app.http.errors :as errors] @@ -54,18 +53,20 @@ ::yres/status 200 ::yres/body (yres/stream-body (fn [_ output] - (binding [events/*channel* (sp/chan :buf buf :xf (keep encode))] - (let [listener (events/start-listener - (partial write! output) - (partial pu/close! output))] - (try + (let [channel (sp/chan :buf buf :xf (keep encode)) + listener (events/start-listener + channel + (partial write! output) + (partial pu/close! output))] + (try + (binding [events/*channel* channel] (let [result (handler)] - (events/tap :end result)) - (catch Throwable cause - (events/tap :error (errors/handle' cause request)) - (when-not (ex/instance? java.io.EOFException cause) - (binding [l/*context* (errors/request->context request)] - (l/err :hint "unexpected error on processing sse response" :cause cause)))) - (finally - (sp/close! events/*channel*) - (px/await! listener)))))))})) + (events/tap :end result))) + + (catch Throwable cause + (let [result (errors/handle' cause request)] + (events/tap channel :error result))) + + (finally + (sp/close! channel) + (px/await! listener))))))})) diff --git a/backend/src/app/rpc/commands/binfile.clj b/backend/src/app/rpc/commands/binfile.clj index 04f550676..60b524ee3 100644 --- a/backend/src/app/rpc/commands/binfile.clj +++ b/backend/src/app/rpc/commands/binfile.clj @@ -115,7 +115,8 @@ (db/update! pool :project {:modified-at (dt/now)} - {:id project-id}) + {:id project-id} + {::db/return-keys false}) result)) diff --git a/backend/src/app/util/events.clj b/backend/src/app/util/events.clj index a41843c6b..b26810cb0 100644 --- a/backend/src/app/util/events.clj +++ b/backend/src/app/util/events.clj @@ -10,7 +10,6 @@ to them. Mainly used in http.sse for progress reporting." (:refer-clojure :exclude [tap run!]) (:require - [app.common.data.macros :as dm] [app.common.exceptions :as ex] [app.common.logging :as l] [promesa.exec :as px] @@ -18,33 +17,30 @@ (def ^:dynamic *channel* nil) -(defn channel - [] - (sp/chan :buf 32)) - (defn tap - [type data] - (when-let [channel *channel*] - (sp/put! channel [type data]) - nil)) + ([type data] + (when-let [channel *channel*] + (sp/put! channel [type data]) + nil)) + ([channel type data] + (when channel + (sp/put! channel [type data]) + nil))) (defn start-listener - [on-event on-close] - - (dm/assert! - "expected active events channel" - (sp/chan? *channel*)) + [channel on-event on-close] + (assert (sp/chan? channel) "expected active events channel") (px/thread {:virtual true} (try (loop [] - (when-let [event (sp/take! *channel*)] + (when-let [event (sp/take! channel)] (let [result (ex/try! (on-event event))] (if (ex/exception? result) (do (l/wrn :hint "unexpected exception" :cause result) - (sp/close! *channel*)) + (sp/close! channel)) (recur))))) (finally (on-close))))) @@ -55,7 +51,7 @@ [f on-event] (binding [*channel* (sp/chan :buf 32)] - (let [listener (start-listener on-event (constantly nil))] + (let [listener (start-listener *channel* on-event (constantly nil))] (try (f) (finally diff --git a/common/src/app/common/types/container.cljc b/common/src/app/common/types/container.cljc index bfb6d09e2..bab2105f5 100644 --- a/common/src/app/common/types/container.cljc +++ b/common/src/app/common/types/container.cljc @@ -41,7 +41,7 @@ [:map-of {:gen/max 10} ::sm/uuid :map]] [:plugin-data {:optional true} ::ctpg/plugin-data]]) -(def check-container! +(def check-container (sm/check-fn ::container)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -74,13 +74,9 @@ (defn get-shape [container shape-id] - (dm/assert! - "expected valid container" - (check-container! container)) - - (dm/assert! - "expected valid uuid for `shape-id`" - (uuid? shape-id)) + (assert (check-container container)) + (assert (uuid? shape-id) + "expected valid uuid for `shape-id`") (-> container (get :objects) diff --git a/frontend/scripts/build b/frontend/scripts/build index b29801545..46b5985fa 100755 --- a/frontend/scripts/build +++ b/frontend/scripts/build @@ -5,6 +5,7 @@ set -ex export INCLUDE_STORYBOOK=${BUILD_STORYBOOK:-no}; +export INCLUDE_WASM=${BUILD_WASM:-yes}; export CURRENT_VERSION=$1; export BUILD_DATE=$(date -R); @@ -17,14 +18,18 @@ export TS=$(date +%s); export NODE_ENV=production; corepack enable; -corepack up || exit 1; +corepack install || exit 1; yarn install || exit 1; rm -rf resources/public; rm -rf target/dist; yarn run build:app:main --config-merge "{:release-version \"${CURRENT_HASH}-${TS}\"}" $EXTRA_PARAMS || exit 1 -yarn run build:wasm || exit 1; + +if [ "$INCLUDE_WASM" = "yes" ]; then + yarn run build:wasm || exit 1; +fi + yarn run build:app:libs || exit 1; yarn run build:app:assets || exit 1; @@ -36,7 +41,10 @@ sed -i -re "s/\%version\%/$CURRENT_VERSION/g" ./target/dist/render.html; sed -i -re "s/\%version\%/$CURRENT_VERSION/g" ./target/dist/rasterizer.html; sed -i -re "s/\%buildDate\%/$BUILD_DATE/g" ./target/dist/index.html; sed -i -re "s/\%buildDate\%/$BUILD_DATE/g" ./target/dist/rasterizer.html; -sed -i "s/version=develop/version=$CURRENT_VERSION/g" ./target/dist/js/render_wasm.js; + +if [ "$INCLUDE_WASM" = "yes" ]; then + sed -i "s/version=develop/version=$CURRENT_VERSION/g" ./target/dist/js/render_wasm.js; +fi if [ "$INCLUDE_STORYBOOK" = "yes" ]; then # build storybook diff --git a/manage.sh b/manage.sh index 5af31dd05..afd3fd201 100755 --- a/manage.sh +++ b/manage.sh @@ -115,6 +115,7 @@ function build { --mount source=`pwd`,type=bind,target=/home/penpot/penpot \ -e EXTERNAL_UID=$CURRENT_USER_ID \ -e BUILD_STORYBOOK=$BUILD_STORYBOOK \ + -e BUILD_WASM=$BUILD_WASM \ -e SHADOWCLJS_EXTRA_PARAMS=$SHADOWCLJS_EXTRA_PARAMS \ -e JAVA_OPTS="$JAVA_OPTS" \ -w /home/penpot/penpot/$1 \