diff --git a/.gitignore b/.gitignore index e86df66..35a2e79 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,8 @@ pom.xml pom.xml.asc .repl* -dev-resources/ +/dev-resources +/resources/public figwheel_server.log *.jar *.class diff --git a/project.clj b/project.clj index 451b12e..6f646e7 100644 --- a/project.clj +++ b/project.clj @@ -6,13 +6,36 @@ :source-paths ["src"] - :dependencies [[org.clojure/clojure "1.7.0"]] + :dependencies [[org.clojure/clojure "1.7.0"] + [org.clojure/clojurescript "1.7.170"]] :profiles {:dev {:source-paths ["dev" "test/app"] - :dependencies [[yesql "0.5.1"] - [ch.qos.logback/logback-classic "1.1.3"] + :dependencies [[ch.qos.logback/logback-classic "1.1.3"] [org.clojure/tools.logging "0.3.1"] [robert/hooke "1.3.0"] [org.clojure/tools.namespace "0.2.11"] [org.clojure/tools.nrepl "0.2.11"] - [com.datomic/datomic-free "0.9.5327" :exclusions [joda-time]]]}}) + [com.datomic/datomic-free "0.9.5327" :exclusions [joda-time]]] + + :plugins [[lein-cljsbuild "1.1.1"] + [lein-figwheel "0.5.0-2"]] + + :cljsbuild { + :builds [{:id "dev" + :source-paths ["src" "test"] + :figwheel {:on-jsload "mount.example.cljs/on-js-reload" } + + :compiler {:main mount.example.cljs + :asset-path "js/compiled/out" + :output-to "test/resources/public/js/compiled/mount.js" + :output-dir "test/resources/public/js/compiled/out" + :optimizations :none + :source-map true + :source-map-timestamp true + :cache-analysis true }} + {:id "prod" + :source-paths ["src" "test"] + :compiler {:output-to "test/resources/public/js/compiled/mount.js" + :main mount.example.cljs + :optimizations :advanced + :pretty-print false}}]}}}) diff --git a/src/mount/core.cljc b/src/mount/core.cljc index 9a4cf22..4e60235 100644 --- a/src/mount/core.cljc +++ b/src/mount/core.cljc @@ -1,6 +1,9 @@ -(ns mount.core - (:require [mount.tools.macro :refer [on-error throw-runtime] :as macro]) - #?(:cljs [mount.tools.cljs :as cljs])) +(ns #?(:clj mount.core + :cljs ^:figwheel-no-load mount.core) + #?(:clj (:require [mount.tools.macro :refer [on-error throw-runtime] :as macro]) + :cljs (:require [mount.tools.macro :as macro] + [mount.tools.cljs :as cljs])) + #?(:cljs (:require-macros [mount.tools.macro :refer [on-error throw-runtime]]))) (defonce ^:private -args (atom :no-args)) ;; mostly for command line args and external files (defonce ^:private state-seq (atom 0)) @@ -114,8 +117,11 @@ (update-meta! [state :status] #{:started})))) (deftype DerefableState [name] - clojure.lang.IDeref - (deref [this] + #?(:clj clojure.lang.IDeref + :cljs IDeref) + (#?(:clj deref + :cljs -deref) + [_] (let [{:keys [status inst] :as state} (@meta-state name)] (when-not (:started status) (up name state (atom #{}))) diff --git a/test/mount/example/cljs.cljs b/test/mount/example/cljs.cljs new file mode 100644 index 0000000..25361ea --- /dev/null +++ b/test/mount/example/cljs.cljs @@ -0,0 +1,10 @@ +(ns mount.example.cljs + (:require [mount.core :as mount]) + (:require-macros [mount.core :refer [defstate]])) + +(enable-console-print!) + +(println "hi from mount!") + +(defn on-js-reload [] + "reloading js..") diff --git a/test/resources/public/index.html b/test/resources/public/index.html new file mode 100644 index 0000000..f7ca4d9 --- /dev/null +++ b/test/resources/public/index.html @@ -0,0 +1,6 @@ + + +
+ + +