Use sm/coercer on app.render entry point

This commit is contained in:
Andrey Antukh
2025-11-26 13:04:28 +01:00
parent 2f1b99fa53
commit adaf8be56d
2 changed files with 61 additions and 63 deletions

View File

@@ -299,6 +299,13 @@
::explain explain})))) ::explain explain}))))
value)))) value))))
(defn coercer
[schema & {:as opts}]
(let [decode-fn (decoder schema json-transformer)
check-fn (check-fn schema opts)]
(fn [data]
(-> data decode-fn check-fn))))
(defn check (defn check
"A helper intended to be used on assertions for validate/check the "A helper intended to be used on assertions for validate/check the
schema over provided data. Raises an assertion exception. schema over provided data. Raises an assertion exception.

View File

@@ -125,47 +125,40 @@
[:embed {:optional true} :boolean] [:embed {:optional true} :boolean]
[:skip-children {:optional true} :boolean] [:skip-children {:optional true} :boolean]
[:object-id [:object-id
[:or [:or [::sm/set ::sm/uuid] ::sm/uuid]]])
::sm/uuid
::sm/coll-of-uuid]]])
(def ^:private render-objects-decoder (def ^:private coerce-render-objects-params
(sm/lazy-decoder schema:render-objects (sm/coercer schema:render-objects))
sm/string-transformer))
(def ^:private render-objects-validator
(sm/lazy-validator schema:render-objects))
(defn- render-objects (defn- render-objects
[params] [params]
(let [{:keys [file-id page-id embed share-id object-id skip-children] :as params} (render-objects-decoder params)] (try
(if-not (render-objects-validator params) (let [{:keys [file-id page-id embed share-id object-id skip-children] :as params}
(do (coerce-render-objects-params params)]
(js/console.error "invalid arguments") (st/emit! (fetch-objects-bundle :file-id file-id :page-id page-id :share-id share-id :object-id object-id))
(sm/pretty-explain schema:render-objects params) (if (uuid? object-id)
nil) (mf/html
[:& object-svg
{:file-id file-id
:page-id page-id
:share-id share-id
:object-id object-id
:embed embed
:skip-children skip-children}])
(do (mf/html
(st/emit! (fetch-objects-bundle :file-id file-id :page-id page-id :share-id share-id :object-id object-id)) [:& objects-svg
{:file-id file-id
(if (uuid? object-id) :page-id page-id
(mf/html :share-id share-id
[:& object-svg :object-ids (into #{} object-id)
{:file-id file-id :embed embed
:page-id page-id :skip-children skip-children}])))
:share-id share-id (catch :default cause
:object-id object-id (when-let [explain (-> cause ex-data ::sm/explain)]
:embed embed (js/console.log "Unexpected error")
:skip-children skip-children}]) (js/console.log (sm/humanize-explain explain)))
(mf/html [:span "Unexpected error:" (ex-message cause)]))))
(mf/html
[:& objects-svg
{:file-id file-id
:page-id page-id
:share-id share-id
:object-ids (into #{} object-id)
:embed embed
:skip-children skip-children}]))))))
;; ---- COMPONENTS SPRITE ;; ---- COMPONENTS SPRITE
@@ -242,39 +235,37 @@
[:embed {:optional true} :boolean] [:embed {:optional true} :boolean]
[:component-id {:optional true} ::sm/uuid]]) [:component-id {:optional true} ::sm/uuid]])
(def ^:private render-components-decoder (def ^:private coerce-render-components-params
(sm/lazy-decoder schema:render-components (sm/coercer schema:render-components))
sm/string-transformer))
(def ^:private render-components-validator
(sm/lazy-validator schema:render-components))
(defn render-components (defn render-components
[params] [params]
(let [{:keys [file-id component-id embed] :as params} (render-components-decoder params)] (try
(if-not (render-components-validator params) (let [{:keys [file-id component-id embed] :as params}
(do (coerce-render-components-params params)]
(js/console.error "invalid arguments")
(sm/pretty-explain schema:render-components params)
nil)
(do (st/emit! (ptk/reify ::initialize-render-components
(st/emit! (ptk/reify ::initialize-render-components ptk/WatchEvent
ptk/WatchEvent (watch [_ _ stream]
(watch [_ _ stream] (rx/merge
(rx/merge (rx/of (fetch-team :file-id file-id))
(rx/of (fetch-team :file-id file-id))
(->> stream (->> stream
(rx/filter (ptk/type? ::team-fetched)) (rx/filter (ptk/type? ::team-fetched))
(rx/observe-on :async) (rx/observe-on :async)
(rx/map (constantly params)) (rx/map (constantly params))
(rx/map fetch-components-bundle)))))) (rx/map fetch-components-bundle))))))
(mf/html (mf/html
[:& components-svg [:& components-svg
{:component-id component-id {:component-id component-id
:embed embed}]))))) :embed embed}]))
(catch :default cause
(when-let [explain (-> cause ex-data ::sm/explain)]
(js/console.log "Unexpected error")
(js/console.log (sm/humanize-explain explain)))
(mf/html [:span "Unexpected error:" (ex-message cause)]))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SETUP ;; SETUP