/
prepl.clj
44 lines (35 loc) · 1.37 KB
/
prepl.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
(ns kaocha.cljs.prepl
(:require [cljs.env :as env]
[kaocha.cljs.queue-eval-loop :as qel])
(:import [java.util.concurrent BlockingQueue LinkedBlockingQueue]))
(defn prepl [repl-env compiler-env compiler-opts ^BlockingQueue queue]
(let [eval-queue (LinkedBlockingQueue.)
eval (fn [form] (.add eval-queue form))
out-fn #(.add queue (let [tag (:tag %)]
(assoc (dissoc % :tag) :type (keyword "cljs" (name tag)))))]
(future
(try
(env/with-compiler-env compiler-env
(qel/start! repl-env compiler-opts eval-queue out-fn))
(.add queue {:type ::exit})
(catch Exception e
(.add queue {:type ::exit})
(println "Exception in queue-eval-loop" e))))
eval))
(comment
(require 'cljs.repl.node)
(let [chan (LinkedBlockingQueue.)
eval (prepl (cljs.repl.node/repl-env) chan)]
(def eval-cljs eval)
(def res-chan chan))
(eval-cljs '(require 'kaocha.cljs.websocket-client :reload))
(eval-cljs 'kaocha.cljs.websocket-client/socket)
(eval-cljs '(kaocha.cljs.websocket-client/connect!))
(eval-cljs '(require 'ktest.first-test))
(eval-cljs '(ktest.first-test/regular-fail))
(eval-cljs ':cljs/quit)
(eval-cljs '(xxx))
(eval-cljs '(+ 1 1))
(take-while identity (repeatedly #(.poll res-chan)))
(cljs.util/ns->source 'ktest.first-test)
)