Fork me on GitHub
#malli
<
2022-03-28
>
Carlo13:03:48

the new pretty explainer seems to break cljs instrumentation, because of not found variables.

rovanion16:03:14

I am either missing something or I've found a bug. It seems like updating a key in a map-spec makes the the optional property have no effect, even though it is still there:

;;; Specification registry

(def registry
  (atom {}))

(defn register! [type ?schema]
  (swap! registry assoc type ?schema))

;; Combine the default registry with our own mutable registry.
(mreg/set-default-registry!
 (mreg/composite-registry
    (mreg/fast-registry (malli/default-schemas))
    (mreg/mutable-registry registry)))

(register! :db/f
   [:map
    [:key   {:optional true} [:double]]])

(register! :user/f
   (-> (malli/deref :db/f)
       (mutil/update :key #(mutil/update-properties % assoc :disabled true))))

(malli/deref :db/f)
;; => [:map [:key {:optional true} :double]]

(malli/deref :user/f)
;; => [:map [:key {:optional true} [:double {:disabled true}]]]

(malli/explain :db/f {})
;; => nil

(malli/explain :user/f {})
;; => {:schema :user/f, :value {}, :errors ({:path [0 :key], :in [:key], :schema [:map [:key {:optional true} [:double {:disabled true}]]], :value nil, :type :malli.core/missing-key})}

(mgen/sample :db/f)
;; => ({} {} {} {} {:key -1.5} {} {} {:key -1.09375} {:key -2.0} {:key 4.625})

(mgen/sample :user/f)
;; => ({:key -2.0} {:key -0.5} {:key 2.0} {:key -0.75} {:key -1.5} {:key 1.75} {:key 3.53125} {:key 1.25} {:key -0.25} {:key 0.271484375})
Yup, another user already found it: https://github.com/metosin/malli/issues/645