├── .gitignore
├── license.txt
├── project.clj
├── readme.md
├── resources
└── public
│ ├── demo.html
│ ├── index.html
│ ├── inline_breakpoints.html
│ ├── issue_53.html
│ ├── issue_7.html
│ ├── playground.html
│ ├── styles
│ └── default.css
│ └── tests.html
├── scripts
├── dev-server.sh
├── reveal.cljs
├── reveal.sh
├── run-demo-node-source-maps-server.sh
└── run-node-demo.sh
└── src
├── demo-node
└── dirac_sample
│ └── demo.cljs
├── demo
└── dirac_sample
│ └── demo.cljs
├── shared
└── dirac_sample
│ └── logging.clj
└── tests
└── dirac_sample
├── inline_breakpoints.cljs
├── issue_53.cljs
├── issue_7.cljs
├── main.cljs
└── playground.cljs
/.gitignore:
--------------------------------------------------------------------------------
1 | /.cljs_rhino_repl
2 | /.lein-env
3 | pom.xml
4 | *jar
5 | /lib/
6 | /classes/
7 | /out/
8 | /target/
9 | .lein-deps-sum
10 | .lein-repl-history
11 | .lein-plugins/
12 | .repl*
13 | /checkouts*
14 | /resources/public/.compiled
15 | /resources/demo-node/.compiled
16 | .idea
17 | *.iml
18 | .nrepl-port
19 | .test-dirac-chrome-profile
20 | .figwheel*
21 | .tmp
22 | figwheel_server.log
23 |
--------------------------------------------------------------------------------
/license.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) BinaryAge Limited and contributors:
2 | https://github.com/binaryage/dirac-sample/graphs/contributors
3 |
4 | MIT License
5 |
6 | Permission is hereby granted, free of charge, to any person obtaining
7 | a copy of this software and associated documentation files (the
8 | "Software"), to deal in the Software without restriction, including
9 | without limitation the rights to use, copy, modify, merge, publish,
10 | distribute, sublicense, and/or sell copies of the Software, and to
11 | permit persons to whom the Software is furnished to do so, subject to
12 | the following conditions:
13 |
14 | The above copyright notice and this permission notice shall be
15 | included in all copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 |
--------------------------------------------------------------------------------
/project.clj:
--------------------------------------------------------------------------------
1 | (def devtools-version "0.9.10")
2 | (def dirac-version "1.3.11")
3 | (def figwheel-version "0.5.19")
4 | (defproject binaryage/dirac-sample "0.1.0-SNAPSHOT"
5 | :description "An example integration of Dirac DevTools"
6 | :url "https://github.com/binaryage/dirac-sample"
7 |
8 | :dependencies [[org.clojure/clojure "1.10.1"]
9 | [org.clojure/clojurescript "1.10.520"]
10 | [nrepl/nrepl "0.6.0"]
11 | [clojure-complete "0.2.5" :exclusions [org.clojure/clojure]]
12 | [binaryage/devtools ~devtools-version]
13 | [binaryage/dirac ~dirac-version]
14 | [figwheel ~figwheel-version]]
15 |
16 | :plugins [[lein-cljsbuild "1.1.7"]
17 | [lein-shell "0.5.0"]
18 | [lein-cooper "1.2.2"]
19 | [lein-figwheel ~figwheel-version]]
20 |
21 | ; =========================================================================================================================
22 |
23 | :source-paths ["src/shared"
24 | "scripts" ; just for IntelliJ
25 | "src/demo"
26 | "src/demo-node"
27 | "src/tests"]
28 |
29 | :clean-targets ^{:protect false} ["target"
30 | "resources/public/.compiled"
31 | "resources/demo-node/.compiled"]
32 |
33 | ; this effectively disables checkouts and gives us a chance to re-enable them on per-profile basis, see :checkouts profile
34 | ; http://jakemccrary.com/blog/2015/03/24/advanced-leiningen-checkouts-configuring-what-ends-up-on-your-classpath/
35 | :checkout-deps-shares ^:replace []
36 |
37 | ; =========================================================================================================================
38 |
39 | :cljsbuild {:builds {}} ; prevent https://github.com/emezeske/lein-cljsbuild/issues/413
40 |
41 | :profiles {; --------------------------------------------------------------------------------------------------------------
42 | :clojure17
43 | {:dependencies ^:replace [[org.clojure/clojure "1.7.0" :upgrade false]
44 | [org.clojure/clojurescript "1.7.228" :upgrade false]
45 | [binaryage/devtools ~devtools-version]
46 | [binaryage/dirac ~dirac-version]]}
47 |
48 | :clojure18
49 | {:dependencies ^:replace [[org.clojure/clojure "1.8.0" :upgrade false]
50 | [org.clojure/clojurescript "1.9.908" :upgrade false]
51 | [binaryage/devtools ~devtools-version]
52 | [binaryage/dirac ~dirac-version]]}
53 |
54 | :clojure19
55 | {:dependencies ^:replace [[org.clojure/clojure "1.9.0" :upgrade false]
56 | [org.clojure/clojurescript "1.10.339" :upgrade false]
57 | [binaryage/devtools ~devtools-version]
58 | [binaryage/dirac ~dirac-version]]}
59 |
60 | :clojure110
61 | {:dependencies []}
62 |
63 | :clojure-current
64 | [:clojure110]
65 |
66 | ; --------------------------------------------------------------------------------------------------------------
67 | :demo
68 | {:cljsbuild {:builds {:demo
69 | {:source-paths ["src/shared"
70 | "src/demo"]
71 | :compiler {:output-to "resources/public/.compiled/demo/demo.js"
72 | :output-dir "resources/public/.compiled/demo"
73 | :asset-path ".compiled/demo"
74 | :preloads [devtools.preload dirac.runtime.preload]
75 | :main dirac-sample.demo
76 | :external-config {:dirac.runtime/config {:nrepl-config {:reveal-url-script-path "scripts/reveal.sh"
77 | ;:reveal-url-request-handler (fn [config url line column]
78 | ; (str "ERR REPLY>" url))
79 | }}}
80 | :optimizations :none
81 | :source-map true}}}}}
82 |
83 | ; --------------------------------------------------------------------------------------------------------------
84 | :demo-advanced
85 | {:cljsbuild {:builds {:demo-advanced
86 | {:source-paths ["src/shared"
87 | "src/demo"]
88 | :compiler {:output-to "resources/public/.compiled/demo_advanced/dirac_sample.js"
89 | :output-dir "resources/public/.compiled/demo_advanced"
90 | :asset-path ".compiled/demo_advanced"
91 | :pseudo-names true
92 | :preloads [dirac.runtime.preload]
93 | :main dirac-sample.demo
94 | :optimizations :advanced}}}}}
95 |
96 | ; --------------------------------------------------------------------------------------------------------------
97 | :demo-node
98 | {:cljsbuild {:builds {:demo
99 | {:source-paths ["src/shared"
100 | "src/demo-node"]
101 | :compiler {:output-to "resources/demo-node/.compiled/demo.js"
102 | :output-dir "resources/demo-node/.compiled"
103 | :asset-path ".compiled"
104 | :source-map-asset-path "http://localhost:9988/.compiled" ; see run-demo-node-source-maps-server.sh, CLJS-1075
105 | :preloads [devtools.preload dirac.runtime.preload]
106 | :main dirac-sample.demo
107 | :target :nodejs
108 | :optimizations :none}}}}}
109 |
110 | ; --------------------------------------------------------------------------------------------------------------
111 | :demo-node-inline-sm
112 | {:cljsbuild {:builds {:demo {:compiler {:inline-source-maps true}}}}}
113 |
114 | ; --------------------------------------------------------------------------------------------------------------
115 | :tests
116 | {:cljsbuild {:builds {:tests
117 | {:source-paths ["src/shared"
118 | "src/tests"]
119 | :compiler {:output-to "resources/public/.compiled/tests/tests.js"
120 | :output-dir "resources/public/.compiled/tests"
121 | :asset-path ".compiled/tests"
122 | :preloads [devtools.preload dirac.runtime.preload]
123 | :main dirac-sample.main
124 | :optimizations :none
125 | :source-map true}}}}}
126 |
127 | ; --------------------------------------------------------------------------------------------------------------
128 | :cider
129 | {:dependencies [[cider/cider-nrepl "0.15.1"]]
130 | :repl-options {:nrepl-middleware [cider.nrepl.middleware.apropos/wrap-apropos
131 | cider.nrepl.middleware.classpath/wrap-classpath
132 | cider.nrepl.middleware.complete/wrap-complete
133 | cider.nrepl.middleware.debug/wrap-debug
134 | cider.nrepl.middleware.format/wrap-format
135 | cider.nrepl.middleware.info/wrap-info
136 | cider.nrepl.middleware.inspect/wrap-inspect
137 | cider.nrepl.middleware.macroexpand/wrap-macroexpand
138 | cider.nrepl.middleware.ns/wrap-ns
139 | cider.nrepl.middleware.pprint/wrap-pprint
140 | cider.nrepl.middleware.pprint/wrap-pprint-fn
141 | cider.nrepl.middleware.refresh/wrap-refresh
142 | cider.nrepl.middleware.resource/wrap-resource
143 | cider.nrepl.middleware.stacktrace/wrap-stacktrace
144 | cider.nrepl.middleware.test/wrap-test
145 | cider.nrepl.middleware.trace/wrap-trace
146 | cider.nrepl.middleware.out/wrap-out
147 | cider.nrepl.middleware.undef/wrap-undef
148 | cider.nrepl.middleware.version/wrap-version]}
149 | }
150 |
151 | :dirac-logging
152 | {:dependencies [[clj-logging-config "1.9.12"]]
153 | :repl-options {:init ^:replace (do
154 | (require 'dirac.agent)
155 | (require 'dirac.logging)
156 | (dirac.logging/setup! {:log-out :console
157 | :log-level "TRACE"})
158 | (dirac.agent/boot!))}}
159 |
160 | ; --------------------------------------------------------------------------------------------------------------
161 | :repl
162 | {:repl-options {:port 8230
163 | :nrepl-middleware [dirac.nrepl/middleware]
164 | :init (do
165 | (require 'dirac.agent)
166 | (dirac.agent/boot!))}}
167 |
168 | ; --------------------------------------------------------------------------------------------------------------
169 | :figwheel-config
170 | {:figwheel {:server-port 7111
171 | :server-logfile ".figwheel/demo.log"
172 | :repl false}
173 | :cljsbuild {:builds
174 | {:demo
175 | {:figwheel true}}}}
176 |
177 | :figwheel-repl
178 | {:figwheel {:repl true}}
179 |
180 | :figwheel-nrepl
181 | [:figwheel-config
182 | ; following https://github.com/bhauman/lein-figwheel/wiki/Using-the-Figwheel-REPL-within-NRepl
183 | {:dependencies [[figwheel-sidecar ~figwheel-version]]
184 | :repl-options {:init ^:replace (do
185 | (require 'dirac.agent)
186 | (use 'figwheel-sidecar.repl-api)
187 | (start-figwheel!
188 | {:figwheel-options {:server-port 7111} ;; <-- figwheel server config goes here
189 | :build-ids ["demo"] ;; <-- a vector of build ids to start autobuilding
190 | :all-builds ;; <-- supply your build configs here
191 | [{:id "demo"
192 | :figwheel true
193 | :source-paths ["src/shared"
194 | "src/demo"]
195 | :compiler {:output-to "resources/public/.compiled/demo/demo.js"
196 | :output-dir "resources/public/.compiled/demo"
197 | :asset-path ".compiled/demo"
198 | :preloads ['devtools.preload 'dirac.runtime.preload]
199 | :main 'dirac-sample.demo
200 | :optimizations :none
201 | :source-map true}}]})
202 | (dirac.agent/boot!)
203 | #_(cljs-repl))
204 |
205 | }
206 | }]
207 |
208 | ; --------------------------------------------------------------------------------------------------------------
209 | :checkouts
210 | {:checkout-deps-shares ^:replace [:source-paths
211 | :test-paths
212 | :resource-paths
213 | :compile-path
214 | #=(eval leiningen.core.classpath/checkout-deps-paths)]
215 | :cljsbuild {:builds
216 | {:demo
217 | {:source-paths ["checkouts/cljs-devtools/src/lib"
218 | "checkouts/dirac/src/runtime"]}
219 | :tests
220 | {:source-paths ["checkouts/cljs-devtools/src/lib"
221 | "checkouts/dirac/src/runtime"]}}}}
222 |
223 | ; --------------------------------------------------------------------------------------------------------------
224 | :debugger-5005
225 | {:jvm-opts ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"]}
226 |
227 | :suspended-debugger-5005
228 | {:jvm-opts ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"]}
229 |
230 | :debugger-5006
231 | {:jvm-opts ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5006"]}
232 |
233 | :suspended-debugger-5006
234 | {:jvm-opts ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5006"]}
235 |
236 | :debugger-5007
237 | {:jvm-opts ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5007"]}
238 |
239 | :suspended-debugger-5007
240 | {:jvm-opts ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5007"]}
241 |
242 | ; --------------------------------------------------------------------------------------------------------------
243 | :cooper-config
244 | {:cooper {"figwheel" ["lein" "dev-fig"]
245 | "server" ["lein" "dev-server"]}}}
246 |
247 | ; =========================================================================================================================
248 |
249 | :aliases {"demo" "demo110"
250 |
251 | "demo110" ["with-profile" "+demo,+clojure110" "do"
252 | ["clean"]
253 | ["cljsbuild" "once"]
254 | ["shell" "scripts/dev-server.sh"]]
255 | "demo19" ["with-profile" "+demo,+clojure19" "do"
256 | ["clean"]
257 | ["cljsbuild" "once"]
258 | ["shell" "scripts/dev-server.sh"]]
259 | "demo18" ["with-profile" "+demo,+clojure18" "do"
260 | ["clean"]
261 | ["cljsbuild" "once"]
262 | ["shell" "scripts/dev-server.sh"]]
263 | "demo17" ["with-profile" "+demo,+clojure17" "do"
264 | ["clean"]
265 | ["cljsbuild" "once"]
266 | ["shell" "scripts/dev-server.sh"]]
267 | "demo-advanced" ["with-profile" "+demo-advanced" "do"
268 | ["cljsbuild" "once"]
269 | ["shell" "scripts/dev-server.sh"]]
270 |
271 | "demo-node" "demo-node110"
272 | "demo-node110" ["with-profile" "+demo-node,+clojure110" "do"
273 | ["clean"]
274 | ["cljsbuild" "once"]
275 | ["shell" "scripts/run-node-demo.sh"]]
276 | "demo-node19" ["with-profile" "+demo-node,+clojure19" "do"
277 | ["clean"]
278 | ["cljsbuild" "once"]
279 | ["shell" "scripts/run-node-demo.sh"]]
280 | "demo-node18" ["with-profile" "+demo-node,+clojure18" "do"
281 | ["clean"]
282 | ["cljsbuild" "once"]
283 | ["shell" "scripts/run-node-demo.sh"]]
284 | "demo-node17" ["with-profile" "+demo-node,+clojure17" "do"
285 | ["clean"]
286 | ["cljsbuild" "once"]
287 | ["shell" "scripts/run-node-demo.sh"]]
288 | "demo-node-dev" ["with-profile" "+demo-node,+clojure-current,+checkouts" "do"
289 | ["cljsbuild" "once" "demo"]
290 | ["shell" "scripts/run-node-demo.sh"]]
291 | "demo-node-dev-inlined-sm" ["with-profile" "+demo-node,+demo-node-inline-sm,+clojure-current,+checkouts" "do"
292 | ["cljsbuild" "once" "demo"]
293 | ["shell" "scripts/run-node-demo.sh" "1"]]
294 |
295 | "repl17" ["with-profile" "+repl,+clojure17" "repl"]
296 | "repl18" ["with-profile" "+repl,+clojure18" "repl"]
297 | "repl19" ["with-profile" "+repl,+clojure19" "repl"]
298 | "repl110" ["with-profile" "+repl,+clojure110" "repl"]
299 | "repl-dev" ["with-profile" "+repl,+clojure-current,+checkouts,+dirac-logging,+debugger-5005" "repl"]
300 | "repl-cider" ["with-profile" "+repl,+clojure-current,+cider" "repl"]
301 | "repl-figwheel" ["with-profile" "+repl,+clojure-current,+checkouts,+figwheel-nrepl" "repl"]
302 |
303 | "fig-repl" ["with-profile" "+repl,+clojure-current,+figwheel-config,+figwheel-repl" "figwheel"]
304 | "auto-compile-tests" ["with-profile" "+tests,+checkouts" "cljsbuild" "auto"]
305 | "auto-compile-demo" ["with-profile" "+demo,+checkouts" "cljsbuild" "auto"]
306 | "dev-fig" ["with-profile" "+demo,+tests,+checkouts,+figwheel-config" "figwheel" "demo" "tests"]
307 | "dev-server" ["shell" "scripts/dev-server.sh"]
308 | "dev" ["with-profile" "+cooper-config" "do"
309 | ["clean"]
310 | ["cooper"]]})
311 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # This project is deprecated since Dirac v1.4.0
2 |
3 | Please use Dirac integration examples in
4 |
5 | [https://github.com/binaryage/dirac/tree/master/examples](https://github.com/binaryage/dirac/tree/master/examples)
6 |
7 | ---
8 | ---
9 | ---
10 |
11 | # dirac-sample [](license.txt)
12 |
13 | This project is an example of integration of [**Dirac DevTools**](https://github.com/binaryage/dirac) into a
14 | Leiningen-based ClojureScript project.
15 |
16 | 
17 |
18 | ## Local setup
19 |
20 | git clone https://github.com/binaryage/dirac-sample.git
21 | cd dirac-sample
22 |
23 | ## Demo time!
24 |
25 | ### Installation
26 |
27 | Launch latest [Chrome Canary](https://www.google.com/chrome/browser/canary.html) from command-line.
28 | I recommend to run it with a dedicated user profile, because you will install there a helper [Chrome Extension](https://chrome.google.com/webstore/detail/dirac-devtools/kbkdngfljkchidcjpnfcgcokkbhlkogi).
29 | Also you have to run it with [remote debugging](https://developer.chrome.com/devtools/docs/debugger-protocol) enabled on port 9222 (better make an alias of this command):
30 |
31 | /Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary \
32 | --remote-debugging-port=9222 \
33 | --no-first-run \
34 | --user-data-dir=.test-dirac-chrome-profile
35 |
36 | Now you can install the [Dirac DevTools Chrome extension](https://chrome.google.com/webstore/detail/dirac-devtools/kbkdngfljkchidcjpnfcgcokkbhlkogi).
37 |
38 | After installation, should see a new extension icon next to your address bar .
39 |
40 | Now you can launch the demo project from terminal:
41 |
42 | lein demo
43 |
44 | At this point you should have a demo website running at [http://localhost:9977](http://localhost:9977).
45 |
46 | Please navigate there, do not open internal DevTools and click Dirac icon while on the `http://localhost:9977/demo.html` page.
47 | It should open you a new window with Dirac DevTools app.
48 | It will look almost the same as internal DevTools, but you can tell the difference at first glance: active tab highlight
49 | will be green instead of blue (see the screenshots above).
50 |
51 | Ok, now you can switch to Javascript Console in Dirac DevTools. Focus prompt field and press `CTRL+,` or `CTRL+.`.
52 | This will cycle between Javascript to ClojureScript REPL prompts.
53 |
54 | You should see a red message on a green background: `Dirac Agent is not listening at ws://localhost:8231 (need help?).`
55 |
56 | That's correct. Dirac REPL uses nREPL protocol so we have to provide it with some nREPL server.
57 | Luckily enough leiningen offers nREPL server by simply running (in a new terminal session):
58 |
59 | lein repl
60 |
61 | The terminal should print something similar to this:
62 |
63 | Compiling ClojureScript...
64 | nREPL server started on port 8230 on host 127.0.0.1 - nrepl://127.0.0.1:8230
65 | REPL-y 0.3.7, nREPL 0.2.12
66 | Clojure 1.8.0
67 | Java HotSpot(TM) 64-Bit Server VM 1.8.0_60-b27
68 | Docs: (doc function-name-here)
69 | (find-doc "part-of-name-here")
70 | Source: (source function-name-here)
71 | Javadoc: (javadoc java-object-or-class-here)
72 | Exit: Control+D or (exit) or (quit)
73 | Results: Stored in vars *1, *2, *3, an exception in *e
74 |
75 | user=>
76 | Dirac Agent v0.5.0
77 | Connected to nREPL server at nrepl://localhost:8230.
78 | Agent is accepting connections at ws://localhost:8231.
79 |
80 | Last three lines ensure you that Dirac Agent was launched alongside your nREPL server. It connected to it and is accepting
81 | DevTools connections on the websocket port 8231.
82 |
83 | After your Dirac Agent is up your Dirac DevTools should eventually reconnect.
84 |
85 | Connected? The red message should go away and you should see `cljs.user` indicating your
86 | current namespace. REPL is ready for your input at this point. You can try:
87 |
88 | (+ 1 2)
89 | js/window
90 | (doc filter)
91 | (filter odd? (range 42))
92 |
93 | If you see something very similar to the first screenshot at the top, you have Dirac running properly.
94 |
95 | **Congratulations!**
96 |
97 | ### Hello, World!
98 |
99 | Let's try to call `hello!` function from our namespace `dirac-sample.demo`.
100 |
101 | (dirac-sample.demo/hello! "World")
102 |
103 | It worked `"Hello, World!"` was logged into the console (white background means that the logging output originated in Javascript land).
104 |
105 | As you probably know you should first require (or eval) namespace in the REPL context to make it aware of namespace content.
106 |
107 | (require 'dirac-sample.demo)
108 |
109 | But still you have to type fully qualified name because currently you are in `cljs.user` namespace. To switch you can use `in-ns` special function.
110 |
111 | Let's try it:
112 |
113 | (in-ns)
114 |
115 | You get an error `java.lang.IllegalArgumentException: Argument to in-ns must be a symbol.`. This is a Java exception from nREPL side.
116 | Execute `(doc in-ns)` to see the documentation for this special REPL function. It expects namespace name as the first argument.
117 |
118 | (in-ns 'dirac-sample.demo)
119 | (hello! "Dirac")
120 |
121 | Should log `Hello, Dirac!` into the console without warnings.
122 |
123 | ### Breakpoints
124 |
125 | You can also test evaluation of ClojureScript in the context of selected stack frame when paused on a breakpoint:
126 |
127 | 1. click the "demo a breakpoint" button on the page
128 | 2. debugger should pause on the `(js-debugger)` line in the breakpoint-demo function
129 |
130 | Custom formatters should be presented as inlined values in the source code.
131 | Also property names in the scope panel are sorted and displayed in a more friendly way.
132 |
133 | Now hit ESC to bring up console drawer. Make sure you are switched to Dirac REPL and then enter:
134 |
135 | numbers
136 |
137 | You should see actual value `(0 1 2)` of the `numbers` variable from local scope (formatted by custom formatters from cljs-devtools).
138 | Same way as you would expect when evaluating a Javascript command in a breakpoint context. Actually you can try it.
139 | Hit `CTRL+.` to switch to Javascript console prompt (white background) and enter:
140 |
141 | numbers
142 |
143 | This should return the same output.
144 |
145 | And now return back to Dirac REPL by pressing `CTRL+.` again and enter:
146 |
147 | (str (map inc numbers))
148 |
149 | You should get back a string `"(1 2 3)"`.
150 |
151 | This is a proof that Dirac REPL can execute arbitrary ClojureScript code in the context of a selected stack frame.
152 |
--------------------------------------------------------------------------------
/resources/public/demo.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 | Dirac DevTools provides a custom DevTools frontend packaged in a Chrome Extension.
13 | To use REPL from Dirac you also need to start an nREPL server and a Dirac Agent server.
14 | Please follow the setup steps on the homepage to exercise it.
15 |
note: you have run `lein dev` instead of `lein demo` to have these tests compiled:
11 |