Skip to content

Instantly share code, notes, and snippets.

@grzm
Last active January 6, 2021 03:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save grzm/5cc47bbe645651c70fa4bcdad02e6f52 to your computer and use it in GitHub Desktop.
Save grzm/5cc47bbe645651c70fa4bcdad02e6f52 to your computer and use it in GitHub Desktop.
Pathom defresolver explorations
(ns com.grzm.mum.viz.client.app.mock-remote-x
(:require
[cljs.core.async :as async]
[com.wsscode.pathom.connect :as pc :refer [defresolver]]
[com.wsscode.pathom.core :as p]))
(defonce tasks
[{:mum.task/id "0", :mum.task/deps [{:mum.task/id "2"}]}
{:mum.task/id "1", :mum.task/deps [{:mum.task/id "3"}]}
{:mum.task/id "2"}
{:mum.task/id "3"}])
(def tasks-table (reduce (fn [m {:mum.task/keys [id] :as task}]
(assoc m id task)) {} tasks))
(defresolver const-resolver [{:keys [tasks-table]} {id :mum.task/id}]
{::pc/input #{:mum.task/id}
::pc/ouput [:mum.task/id :mum.task/deps]}
{:mum.task/id "6" :mum.task/deps :x :task (get tasks-table id)})
(defresolver identity-resolver [{:keys [tasks-table]} {:mum.task/keys [id]}]
{::pc/input #{:mum.task/id}
::pc/ouput [:mum.task/id :mum.task/deps]}
(identity {:mum.task/id "6" :mum.task/deps :x :task (get tasks-table id)}))
(defresolver look-up-resolver [{:keys [tasks-table]} {:mum.task/keys [id]}]
{::pc/input #{:mum.task/id}
::pc/ouput [:mum.task/id :mum.task/deps]}
(get tasks-table id))
(defn pathom-parser [resolvers]
(p/parallel-parser
{::p/env {::p/reader [p/map-reader
pc/reader2
pc/open-ident-reader
p/env-placeholder-reader]
::p/placeholder-prefixes #{">"}}
::p/mutate pc/mutate
::p/plugins [(pc/connect-plugin {::pc/register resolvers})
p/error-handler-plugin
p/trace-plugin]}))
(def const-parser (pathom-parser [const-resolver]))
(def identity-parser (pathom-parser [identity-resolver]))
(def look-up-parser (pathom-parser [look-up-resolver]))
(comment
(def env {:tasks-table tasks-table})
(-> (const-parser
env [{[:mum.task/id "0"] [:mum.task/id :mum.task/deps :task]}])
(async/take! #(prn {:const-parser %})))
;; {:const-parser {[:mum.task/id "0"] {:mum.task/id "0", :task {:mum.task/id "0", :mum.task/deps [{:mum.task/id "8"}]}, :mum.task/deps :x}}}
(-> (identity-parser
env [{[:mum.task/id "0"] [:mum.task/id :mum.task/deps :task]}])
(async/take! #(prn {:identity-parser %})))
;; {:identity-parser {[:mum.task/id "0"] {:mum.task/id "0", :task :com.wsscode.pathom.core/not-found, :mum.task/deps :com.wsscode.pathom.core/not-found}}}
(-> (look-up-parser
env [{[:mum.task/id "0"] [:mum.task/id :mum.task/deps]}])
(async/take! #(prn {:look-up-parser %})))
;; {:look-up-parser {[:mum.task/id "0"] {:mum.task/id "0", :mum.task/deps :com.wsscode.pathom.core/not-found}}}
:end)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment