ソースを参照

enhance: add malli schema for outliner ops

Tienson Qin 2 年 前
コミット
8c4d8644e6
1 ファイル変更39 行追加1 行削除
  1. 39 1
      src/main/frontend/worker/outliner_op.cljs

+ 39 - 1
src/main/frontend/worker/outliner_op.cljs

@@ -4,10 +4,48 @@
             [logseq.outliner.core :as outliner-core]
             [frontend.worker.state :as worker-state]
             [datascript.core :as d]
-            [promesa.core :as p]))
+            [promesa.core :as p]
+            [malli.core :as m]))
+
+(def op-schema
+  [:multi {:dispatch first}
+   [:save-block
+    [:catn
+     [:op :keyword]
+     [:args [:tuple ::block]]]]
+   [:insert-blocks
+    [:catn
+     [:op :keyword]
+     [:args [:tuple ::blocks ::id ::option]]]]
+   [:delete-blocks
+    [:catn
+     [:op :keyword]
+     [:args [:tuple ::ids ::option]]]]
+   [:move-blocks
+    [:catn
+     [:op :keyword]
+     [:args [:tuple ::ids ::id :boolean]]]]
+   [:move-blocks-up-down
+    [:catn
+     [:op :keyword]
+     [:args [:tuple ::ids :boolean]]]]
+   [:indent-outdent-blocks
+    [:catn
+     [:op :keyword]
+     [:args [:tuple ::ids :boolean ::option]]]]])
+
+(def ops-schema [:schema {:registry {::id int?
+                                     ::block map?
+                                     ::option [:maybe map?]
+                                     ::blocks [:sequential ::block]
+                                     ::ids [:sequential ::id]}}
+                 [:sequential op-schema]])
+
+(def ops-validator (m/validator ops-schema))
 
 (defn apply-ops!
   [repo conn ops opts]
+  (assert (ops-validator ops) ops)
   (let [opts' (assoc opts
                      :transact-opts {:repo repo :conn conn}
                      :local-tx? true)