(ns com.wsscode.pathom3.demos.recursive
(:require
[clojure.java.io :as io]
[com.wsscode.pathom3.connect.indexes :as pci]
[com.wsscode.pathom3.connect.operation :as pco]
[com.wsscode.pathom3.interface.eql :as p.eql])
(:import
(java.io
File)))
(pco/defresolver file-resolver
[{:file/keys [path]}]
{::pco/output [:file/dir?]}
(let [f (io/file path)
dir? (.isDirectory f)]
{:file/dir? dir?}))
(pco/defresolver directory-files-resolver
[env {:file/keys [path dir?]}]
{::pco/output [{:dir/files [:file/path]}]}
(if dir?
{:dir/files
(mapv (fn [^File f0] {:file/path (.getPath f0)})
(.listFiles (io/file path)))}))
(def env
(pci/register
[file-resolver
directory-files-resolver]))
(comment
(p.eql/process env
{:file/path "src/demos"}
'[:file/path
{:dir/files ...}]))