Skip to content

Commit ae71683

Browse files
author
clyfe
committed
Add ClojureScript support
1 parent ba016c0 commit ae71683

File tree

4 files changed

+123
-102
lines changed

4 files changed

+123
-102
lines changed

src/integrant/repl.clj

Lines changed: 0 additions & 94 deletions
This file was deleted.

src/integrant/repl.cljc

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
(ns integrant.repl
2+
(:require [integrant.core :as ig]
3+
[integrant.repl.state :as state]
4+
#?(:clj [clojure.tools.namespace.repl :as repl])))
5+
6+
#?(:clj (repl/disable-reload! (find-ns 'integrant.core)))
7+
8+
(defn set-prep! [prep]
9+
#?(:clj (alter-var-root #'state/preparer (constantly prep))
10+
:cljs (set! state/preparer prep)))
11+
12+
#?(:clj (defn error [s] (Error. s))
13+
:cljs (defn error [s] (js/Error. s)) )
14+
15+
(defn- prep-error []
16+
(error "No system preparer function found."))
17+
18+
(defn prep []
19+
(if-let [prep state/preparer]
20+
(do #?(:clj (alter-var-root #'state/config (fn [_] (prep)))
21+
:cljs (set! state/config (prep)))
22+
:prepped)
23+
(throw (prep-error))))
24+
25+
(defn- halt-system [system]
26+
(when system (ig/halt! system)))
27+
28+
(defn- build-system [build wrap-ex]
29+
(try
30+
(build)
31+
(catch #?(:clj clojure.lang.ExceptionInfo
32+
:cljs ExceptionInfo) ex
33+
(if-let [system (:system (ex-data ex))]
34+
(try
35+
(ig/halt! system)
36+
(catch #?(:clj clojure.lang.ExceptionInfo
37+
:cljs ExceptionInfo)
38+
halt-ex
39+
(throw (wrap-ex ex halt-ex)))))
40+
(throw ex))))
41+
42+
(defn- init-system [config keys]
43+
(build-system
44+
(if keys
45+
#(ig/init config keys)
46+
#(ig/init config))
47+
#(ex-info "Config failed to init; also failed to halt failed system"
48+
{:init-exception %1}
49+
%2)))
50+
51+
(defn- resume-system [config system]
52+
(build-system
53+
#(ig/resume config system)
54+
#(ex-info "Config failed to resume; also failed to halt failed system"
55+
{:resume-exception %1}
56+
%2)))
57+
58+
(defn init
59+
([] (init nil))
60+
([keys]
61+
#?(:clj (alter-var-root #'state/system (fn [sys]
62+
(halt-system sys)
63+
(init-system state/config keys)))
64+
:cljs (set! state/system (do (halt-system state/system)
65+
(init-system state/config keys))))
66+
:initiated))
67+
68+
(defn go
69+
([] (go nil))
70+
([keys]
71+
(prep)
72+
(init keys)))
73+
74+
(defn clear []
75+
#?(:clj (do (alter-var-root #'state/system (fn [sys] (halt-system sys) nil))
76+
(alter-var-root #'state/config (constantly nil)))
77+
:cljs (do (set! state/system (do (halt-system state/system) nil))
78+
(set! state/config nil)))
79+
:cleared)
80+
81+
(defn halt []
82+
(halt-system state/system)
83+
#?(:clj (alter-var-root #'state/system (constantly nil))
84+
:cljs (set! state/system nil))
85+
:halted)
86+
87+
(defn suspend []
88+
(when state/system (ig/suspend! state/system))
89+
:suspended)
90+
91+
(defn resume []
92+
(if-let [prep state/preparer]
93+
(let [cfg (prep)]
94+
#?(:clj (do (alter-var-root #'state/config (constantly cfg))
95+
(alter-var-root #'state/system (fn [sys]
96+
(if sys
97+
(resume-system cfg sys)
98+
(init-system cfg nil)))))
99+
:cljs (do (set! state/config cfg)
100+
(set! state/system (if state/system
101+
(resume-system cfg state/system)
102+
(init-system cfg nil)))))
103+
:resumed)
104+
(throw (prep-error))))
105+
106+
(defn reset []
107+
(suspend)
108+
#?(:clj (repl/refresh :after 'integrant.repl/resume)
109+
:cljs (integrant.repl/resume)))
110+
111+
112+
(defn reset-all []
113+
(suspend)
114+
#?(:clj (repl/refresh-all :after 'integrant.repl/resume)
115+
:cljs (integrant.repl/resume)))

src/integrant/repl/state.clj

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/integrant/repl/state.cljc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
(ns integrant.repl.state
2+
#?(:clj (:require [clojure.tools.namespace.repl :as repl])))
3+
4+
#?(:clj (repl/disable-reload!))
5+
6+
(def config nil)
7+
(def system nil)
8+
(def preparer nil)

0 commit comments

Comments
 (0)