diff --git a/resources/public/dev.html b/resources/public/dev.html new file mode 100644 index 0000000..a16a0b5 --- /dev/null +++ b/resources/public/dev.html @@ -0,0 +1,12 @@ + + + + + + + + +

Scittle

+

What is this?

+ + diff --git a/shadow-cljs.edn b/shadow-cljs.edn index ff3946c..fe96550 100644 --- a/shadow-cljs.edn +++ b/shadow-cljs.edn @@ -14,6 +14,8 @@ :global "ReactDOM"}}} :modules {:scittle {:entries [scittle.core]} + :scittle.nrepl {:entries [scittle.nrepl] + :depends-on #{:scittle}} :scittle.reagent {:entries [scittle.reagent] :depends-on #{:scittle}} :scittle.cljs-ajax {:entries [scittle.cljs-ajax] diff --git a/src/scittle/core.cljs b/src/scittle/core.cljs index 8afbaec..12c3afa 100644 --- a/src/scittle/core.cljs +++ b/src/scittle/core.cljs @@ -1,11 +1,9 @@ (ns scittle.core (:refer-clojure :exclude [time]) (:require [cljs.reader :refer [read-string]] - [clojure.edn :as edn] [goog.object :as gobject] [goog.string] [sci.core :as sci] - [sci.nrepl.completions :refer [completions]] [scittle.impl.common :refer [cljns]] [scittle.impl.error :as error])) @@ -106,37 +104,3 @@ (enable-console-print!) (sci/alter-var-root sci/print-fn (constantly *print-fn*)) -(defn nrepl-websocket [] - (.-ws_nrepl js/window)) - -(defn nrepl-reply [{:keys [id session]} payload] - (.send (nrepl-websocket) - (str (assoc payload :id id :session session :ns (str @!last-ns))))) - -(defn handle-nrepl-eval [{:keys [code] :as msg}] - (let [[kind val] (try [::success (eval-string code)] - (catch :default e - [::error (str e)]))] - (case kind - ::success - (do (nrepl-reply msg {:value (pr-str val)}) - (nrepl-reply msg {:status ["done"]})) - ::error - (do - (nrepl-reply msg {:err (pr-str val)}) - (nrepl-reply msg {:ex (pr-str val) - :status ["error" "done"]}))))) - -(defn handle-nrepl-message [msg] - (case (:op msg) - :eval (handle-nrepl-eval msg) - :complete (nrepl-reply msg (completions (assoc msg :ctx @!sci-ctx))))) - -(defn ^:export init-nrepl [] - (let [ws (nrepl-websocket)] - (set! (.-onmessage ws) - (fn [event] - (handle-nrepl-message (edn/read-string (.-data event))))) - (set! (.-onerror ws) - (fn [event] - (js/console.log event))))) diff --git a/src/scittle/nrepl.cljs b/src/scittle/nrepl.cljs new file mode 100644 index 0000000..a0aa38a --- /dev/null +++ b/src/scittle/nrepl.cljs @@ -0,0 +1,40 @@ +(ns scittle.nrepl + (:require + [clojure.edn :as edn] + [sci.nrepl.completions :refer [completions]] + [scittle.core :refer [!last-ns eval-string !sci-ctx]])) + +(defn nrepl-websocket [] + (.-ws_nrepl js/window)) + +(defn nrepl-reply [{:keys [id session]} payload] + (.send (nrepl-websocket) + (str (assoc payload :id id :session session :ns (str @!last-ns))))) + +(defn handle-nrepl-eval [{:keys [code] :as msg}] + (let [[kind val] (try [::success (eval-string code)] + (catch :default e + [::error (str e)]))] + (case kind + ::success + (do (nrepl-reply msg {:value (pr-str val)}) + (nrepl-reply msg {:status ["done"]})) + ::error + (do + (nrepl-reply msg {:err (pr-str val)}) + (nrepl-reply msg {:ex (pr-str val) + :status ["error" "done"]}))))) + +(defn handle-nrepl-message [msg] + (case (:op msg) + :eval (handle-nrepl-eval msg) + :complete (nrepl-reply msg (completions (assoc msg :ctx @!sci-ctx))))) + +(defn ^:export init-nrepl [] + (let [ws (nrepl-websocket)] + (set! (.-onmessage ws) + (fn [event] + (handle-nrepl-message (edn/read-string (.-data event))))) + (set! (.-onerror ws) + (fn [event] + (js/console.log event)))))