-
Notifications
You must be signed in to change notification settings - Fork 3
/
re_frame_template.clj
109 lines (80 loc) · 2.98 KB
/
re_frame_template.clj
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
(ns clj.new.re-frame-template
(:require [clj.new.templates :refer [renderer project-data name-to-path sanitize-ns ->files]]
[clj.new.re-frame-template.options.base :as base]
[clj.new.re-frame-template.options.kondo :as kondo]
[clj.new.re-frame-template.options.re-com :as re-com]
[clj.new.re-frame-template.options.test :as test]
[clj.new.re-frame-template.options.views :as views]
[clj.new.re-frame-template.options.helpers :as helpers]
[clj.new.re-frame-template.options.cider :as cider]
[clojure.set :as set]))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Files & Data for Template
(defn app-files [data options]
(concat
(base/files data)
(views/view-cljs options data)
;; debug
;;
;; development
(when (helpers/option? kondo/option options) (kondo/files data))
(when (helpers/option? test/option options) (test/files data))
;; full-stack
(when (helpers/option? cider/option options) (cider/files data))
;; misc.
(when (helpers/option? re-com/option options) (re-com/assets data))))
(defn template-data [name options]
(let [data (merge {;; :ns-name (sanitize-ns name)
;; :sanitized (name-to-path name)
;; debug
:re-frisk? (helpers/option? "+re-frisk" options)
:10x? (helpers/option? "+10x" options)
;; development
:cider? (helpers/option? cider/option options)
:kondo? (helpers/option? kondo/option options)
:test? (helpers/option? test/option options)
;; full-stack
;; misc.
:re-com? (helpers/option? re-com/option options)
:re-pressed? (helpers/option? "+re-pressed" options)
:breaking-point? (helpers/option? "+breaking-point" options)}
(project-data name))]
;; (clojure.pprint/pprint data)
data)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Check Options
(def available-set
#{;; debug
"+re-frisk"
"+10x"
;; development
cider/option
kondo/option
test/option
;; misc.
re-com/option
"+re-pressed"
"+breaking-point"})
(defn check-available [options]
(let [options-set (into #{} options)
abort? (not (set/superset? available-set
options-set))]
(when abort?
(println "\nError: invalid profile(s)\n")
(System/exit 1))))
(defn check-options
"Check the user-provided options"
[options]
(doto options
check-available))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Main
(defn re-frame-template
"Generate Scaffold for re-frame using tools.deps chain"
[name & options]
(let [data (template-data name options)]
(check-options options)
(println "Generating fresh 'clj new' re-frame-template project.")
(apply ->files data
(app-files data options))))