Преглед на файлове

enhance(dev): cli validation includes dispatch key

use dispatch-key to immediately find invalid schema
Gabriel Horner преди 9 месеца
родител
ревизия
b113967c9c
променени са 2 файла, в които са добавени 41 реда и са изтрити 37 реда
  1. 4 1
      deps/db/script/validate_client_db.cljs
  2. 37 36
      deps/db/src/logseq/db/frontend/malli_schema.cljs

+ 4 - 1
deps/db/script/validate_client_db.cljs

@@ -23,7 +23,10 @@
                            (->> (map (fn [e] (dissoc e :db/id)) ent-maps) explainer not-empty))]
       (do
         (if group-errors
-          (let [ent-errors (db-validate/group-errors-by-entity db ent-maps (:errors explanation))]
+          (let [ent-errors (->> (db-validate/group-errors-by-entity db ent-maps (:errors explanation))
+                                (map #(assoc %
+                                             :dispatch-key
+                                             (->> (dissoc (:entity %) :db/id) (db-malli-schema/entity-dispatch-key db)))))]
             (println "Found" (count ent-errors) "entities in errors:")
             (cond
               verbose

+ 37 - 36
deps/db/src/logseq/db/frontend/malli_schema.cljs

@@ -481,44 +481,45 @@
    [:db/ident [:= :logseq.property/empty-placeholder]]
    [:block/tx-id {:optional true} :int]])
 
+(defn entity-dispatch-key [db ent]
+  (let [d (if (:block/uuid ent) (d/entity db [:block/uuid (:block/uuid ent)]) ent)
+        ;; order matters as some block types are a subset of others e.g. :whiteboard
+        dispatch-key (cond
+                       (entity-util/property? d)
+                       :property
+                       (entity-util/class? d)
+                       :class
+                       (entity-util/hidden? (:block/title d))
+                       :hidden
+                       (entity-util/whiteboard? d)
+                       :normal-page
+                       (entity-util/page? d)
+                       :normal-page
+                       (entity-util/asset? d)
+                       :asset-block
+                       (:file/path d)
+                       :file-block
+                       (:logseq.property.history/block d)
+                       :property-history-block
+
+                       (:block/closed-value-property d)
+                       :closed-value-block
+
+                       (and (:logseq.property/created-from-property d)
+                            (:property.value/content d))
+                       :property-value-block
+
+                       (:block/uuid d)
+                       :block
+                       (= (:db/ident d) :logseq.property/empty-placeholder)
+                       :property-value-placeholder
+                       (:db/ident d)
+                       :db-ident-key-value)]
+    dispatch-key))
+
 (def Data
   (into
-   [:multi {:dispatch (fn [d]
-                        ;; order matters as some block types are a subset of others e.g. :whiteboard
-                        (let [db *db-for-validate-fns*
-                              d (if (:block/uuid d) (d/entity db [:block/uuid (:block/uuid d)]) d)
-                              dispatch-key (cond
-                                             (entity-util/property? d)
-                                             :property
-                                             (entity-util/class? d)
-                                             :class
-                                             (entity-util/hidden? (:block/title d))
-                                             :hidden
-                                             (entity-util/whiteboard? d)
-                                             :normal-page
-                                             (entity-util/page? d)
-                                             :normal-page
-                                             (entity-util/asset? d)
-                                             :asset-block
-                                             (:file/path d)
-                                             :file-block
-                                             (:logseq.property.history/block d)
-                                             :property-history-block
-
-                                             (:block/closed-value-property d)
-                                             :closed-value-block
-
-                                             (and (:logseq.property/created-from-property d)
-                                                  (:property.value/content d))
-                                             :property-value-block
-
-                                             (:block/uuid d)
-                                             :block
-                                             (= (:db/ident d) :logseq.property/empty-placeholder)
-                                             :property-value-placeholder
-                                             (:db/ident d)
-                                             :db-ident-key-value)]
-                          dispatch-key))}]
+   [:multi {:dispatch (fn [d] (entity-dispatch-key *db-for-validate-fns* d))}]
    {:property property-page
     :class class-page
     :hidden hidden-page