(import temple)
(import argparse :prefix "")
(import /src/core)
(import /src/error)
(import /src/env)
(import /repl)
(defn- index-value
[env sym index]
(try ((env sym) :value)
([err fib] (propagate (error/eval-error sym index) fib))))
(defn- prepare-env [index]
(-> index
(dofile)))
(def argparse-params ["A transparent, extensible static site generator."
"repl" {:kind :flag
:help "Compile your index module and enter the REPL."}
:default {:kind
:option
:help "The index module to evaluate."
:required true}])
(def repl-env
```
An environment including the `repl` module, for interactive development.
```
(require "/repl"))
(defn main [& args]
(merge-into root-env core/bagatto)
(env/prepare-root-env!)
(when-let [args (argparse ;argparse-params)]
(let [index (args :default)
env (prepare-env index)]
(merge-into temple/base-env env)
(if (args "repl")
# REPL mode: Enter a REPL to experiment with the contents of the
# index module.
(do
(merge-into env repl-env)
(repl nil nil env))
# Normal mode: evaluate index module and write site.
(do (setdyn :bagatto-defaults (env :bagatto-defaults))
(def data (let [data-spec (index-value env 'data index)]
(core/load-data data-spec env)))
(def writer-specs (let [site-spec (index-value env 'site index)]
(core/produce-writer-specs site-spec data env)))
(core/evaluate-writer-specs env writer-specs))))))