~subsetpark/bagatto

ref: a2831049b80eb871c4e6d6538c1de54648766965 bagatto/main.janet -rw-r--r-- 1.5 KiB
a2831049 — Zach Smith Ignore jpm-managed deps 8 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
(import temple)
(import argparse :prefix "")

(import src/core)
(import src/error)
(import src/env)

(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}])

(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.
        (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))))))