Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,19 @@
[shadow-cljs](https://github.com/thheller/shadow-cljs) template.
Supports Om, Reagent and Rum.

Build tools supported are lein, deps.edn and native shadow-cljs.

## Usage
Give it a UI framework and a build tool. Defaults to native shadow-cljs and reagent.

``` shell
lein new shadow-cljs your-project +reagent
lein new shadow-cljs your-project +om
lein new shadow-cljs your-project +rum
lein new shadow-cljs your-project +lein +om
lein new shadow-cljs your-project +depsedn +om
lein new shadow-cljs your-project +native +om
...
```

## License
Expand Down
19 changes: 19 additions & 0 deletions resources/leiningen/new/shadow_cljs/deps/deps.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{:deps {
binaryage/devtools {:mvn/version "0.9.10"}
thheller/shadow-cljs {:mvn/version "2.5.1"}
{{#om}}
com.tiensonqin/om {:mvn/version "1.0.0-beta2-SNAPSHOT"}
{{/om}}
{{#rum}}
ua.modnakasta/rum {:mvn/version "0.11.0-2"}
org.roman01la/citrus {:mvn/version "3.0.0" :exclusions [rum]}
{{/rum}}
{{#reagent}}
reagent {:mvn/version "0.8.0-alpha2"}
{{/reagent}}}

:source-paths
["src"]

:aliases {:outdated {:extra-deps {olical/depot {:mvn/version "1.2.0"}}
:main-opts ["-m" "depot.outdated.main"]}}}
21 changes: 21 additions & 0 deletions resources/leiningen/new/shadow_cljs/lein/project.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
(defproject
{{name}} "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}

:dependencies [[binaryage/devtools "0.9.10"]
[thheller/shadow-cljs "2.5.1"]
{{#om}}
[com.tiensonqin/om "1.0.0-beta2-SNAPSHOT"]
{{/om}}
{{#rum}}
[ua.modnakasta/rum "0.11.0-2"]
[org.roman01la/citrus "3.0.0"
:exclusions [rum]]
{{/rum}}
{{#reagent}}
[reagent "0.8.0-alpha2"]
{{/reagent}}]
:source-paths ["src"])
Original file line number Diff line number Diff line change
@@ -1,11 +1,26 @@
;; shadow-cljs configuration
{:source-paths
{
{{#native}}
:source-paths
["src"]

:dependencies [[binaryage/devtools "0.9.7"]
;; fork to support react 16
:dependencies [[binaryage/devtools "0.9.10"]
{{#om}}
[com.tiensonqin/om "1.0.0-beta2-SNAPSHOT"]
{{/om}}
{{#rum}}
[ua.modnakasta/rum "0.11.0-2"]
[org.roman01la/citrus "3.0.0" :exclusions [rum]]]
[org.roman01la/citrus "3.0.0" :exclusions [rum]]
{{/rum}}
{{#reagent}}
[reagent "0.8.0-alpha2"]
{{/reagent}}]
{{/native}}
{{#depsedn}}
:deps true
{{/depsedn}}
{{#lein}}
:lein true
{{/lein}}

;; set an nrepl port for connection to a REPL.
:nrepl {:port 8777}
Expand All @@ -27,5 +42,4 @@
;; serve the public directory over http at port 8700
:http-root "public"
:http-port 8700
:preloads [devtools.preload]}
}}}
:preloads [devtools.preload]}}}}
30 changes: 0 additions & 30 deletions resources/leiningen/new/shadow_cljs/om/shadow-cljs.edn

This file was deleted.

29 changes: 0 additions & 29 deletions resources/leiningen/new/shadow_cljs/reagent/shadow-cljs.edn

This file was deleted.

51 changes: 37 additions & 14 deletions src/leiningen/new/shadow_cljs.clj
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,51 @@
(defn templates-by-lib
[lib data]
(get
{:om [["src/{{sanitized}}/core.cljs" (render "om/core.cljs" data)]
["shadow-cljs.edn" (render "om/shadow-cljs.edn" data)]]
:reagent [["src/{{sanitized}}/core.cljs" (render "reagent/core.cljs" data)]
["shadow-cljs.edn" (render "reagent/shadow-cljs.edn" data)]]
:rum [["src/{{sanitized}}/core.cljs" (render "rum/core.cljs" data)]
["shadow-cljs.edn" (render "rum/shadow-cljs.edn" data)]]}
{:om [["src/{{sanitized}}/core.cljs" (render "om/core.cljs" data)]]
:reagent [["src/{{sanitized}}/core.cljs" (render "reagent/core.cljs" data)]]
:rum [["src/{{sanitized}}/core.cljs" (render "rum/core.cljs" data)]]}
lib))

(defn templates-by-tool
[tool data]
(get
{:native [["shadow-cljs.edn" (render "native/shadow-cljs.edn" data)]]
:depsedn [["shadow-cljs.edn" (render "native/shadow-cljs.edn" data)]
["deps.edn" (render "deps/deps.edn" data)]]
:lein [["shadow-cljs.edn" (render "native/shadow-cljs.edn" data)]
["project.clj" (render "lein/project.clj" data)]]}
tool))

(def supported-libs
#{:om :reagent :rum})

(def supported-build-tools
#{:native :lein :depsedn})

(defn keywordize
[option]
(keyword (clojure.string/replace option "+" "")))

(defn shadow-cljs
[name & lib]
[name & opts]
(main/info "Generating fresh shadow-cljs project.")
(let [lib (if-let [lib (first lib)]
(let [v (keyword (clojure.string/replace lib "+" ""))]
v)
:reagent)
(let [opts (map keywordize opts)
lib (if-let [lib (first (remove supported-build-tools opts))]
lib
:reagent)
tool (if-let [tool (first (remove supported-libs opts))]
tool
:native)
data {:name name
:sanitized (name-to-path name)}]
:sanitized (name-to-path name)
tool true
lib true}]
(main/info data)
(->>
[["package.json" (raw "package.json")]
["README.md" (raw "README.md")]
["public/index.html" (render "index.html" data)]
["public/css/style.css" (raw "style.css")]
]
["public/css/style.css" (raw "style.css")]]
(concat (templates-by-lib lib data))
(concat (templates-by-tool tool data))
(apply ->files data))))