Last active
January 6, 2021 03:46
-
-
Save grzm/5cc47bbe645651c70fa4bcdad02e6f52 to your computer and use it in GitHub Desktop.
Pathom defresolver explorations
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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