Skip to content

Instantly share code, notes, and snippets.

@souenzzo
Created October 18, 2019 18:03
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 souenzzo/b394ee85932d8246b0a465a42635f9a5 to your computer and use it in GitHub Desktop.
Save souenzzo/b394ee85932d8246b0a465a42635f9a5 to your computer and use it in GitHub Desktop.
(let [keep-keys-on-join (fn [ks]
{::p/wrap-read (fn [reader]
(fn [env]
(let [result (reader env)
join? (-> env :ast :type (= :join))
base-map (when join?
(select-keys (p/entity env) ks))
merge-with-base (fn [e]
(if (map? e)
(merge-with p/entity-value-merge base-map e)
e))
join-many? (and join?
(not (empty? base-map))
(vector? result))]
(cond
join-many? (mapv merge-with-base result)
join? (merge-with-base result)
:default result))))})
register [(pc/resolver `friends {::pc/input #{:root}
::pc/output [:friends]}
(fn [_ _]
{:friends [{:id 2}]}))]
parser (p/parser {::p/plugins [(keep-keys-on-join [:root])
(pc/connect-plugin {::pc/register register})]})]
(parser {::p/reader [p/map-reader
pc/reader2
pc/ident-reader
p/env-placeholder-reader]
::p/placeholder-prefixes #{">"}}
[{[:root 5555] [:root
{:friends [:root]}]}]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment