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,29 +125,17 @@
[: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")
(sm/pretty-explain schema:render-objects params)
nil)
(do
(st/emit! (fetch-objects-bundle :file-id file-id :page-id page-id :share-id share-id :object-id object-id)) (st/emit! (fetch-objects-bundle :file-id file-id :page-id page-id :share-id share-id :object-id object-id))
(if (uuid? object-id) (if (uuid? object-id)
(mf/html (mf/html
[:& object-svg [:& object-svg
@@ -165,7 +153,12 @@
:share-id share-id :share-id share-id
:object-ids (into #{} object-id) :object-ids (into #{} object-id)
:embed embed :embed embed
:skip-children skip-children}])))))) :skip-children skip-children}])))
(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)]))))
;; ---- COMPONENTS SPRITE ;; ---- COMPONENTS SPRITE
@@ -242,23 +235,15 @@
[: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]
@@ -274,7 +259,13 @@
(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