~subsetpark/bagatto

ref: 22683bebdf00ea054405e41739fc0ef5fdeb7666 bagatto/main.janet -rw-r--r-- 1.5 KiB
22683beb — Zach Smith Demand pool management: wait for all threads to exit before main thread exits 10 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
49
50
51
(import temple)
(import argparse :prefix "")

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

(def bagatto
  ```
  An environment populated by the "stdlib" we want to expose to
  template and index module authors.
  ```
  (require "bagatto-require"))

(defn- index-value
  [env sym index]
  (try ((env sym) :value)
    ([err fib] (error/eval-error sym index))))

(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]
  (env/prepare-env-with-bagatto! bagatto)

  (let [args (argparse ;argparse-params)
        index (args :default)
        env (dofile index)]

    (env/prepare-env-with-index! 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)))

        (def writer-specs (let [site-spec (index-value env 'site index)]
                            (core/produce-writer-specs site-spec data env bagatto)))

        (core/evaluate-writer-specs env writer-specs)))))