Skip to content

Commit ff3854d

Browse files
author
dnolen
committed
Browser REPL can now handle absolute path :output-dir, enables
-d `mktemp -d` usage
1 parent 9eae9ca commit ff3854d

File tree

1 file changed

+48
-46
lines changed

1 file changed

+48
-46
lines changed

src/main/clojure/cljs/repl/browser.clj

Lines changed: 48 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -135,54 +135,56 @@
135135
(defn send-static
136136
[{path :path :as request} conn
137137
{:keys [static-dir output-to output-dir host port gzip?] :or {output-dir "out"} :as opts}]
138-
(if (and static-dir (not= "/favicon.ico" path))
139-
(let [path (if (= "/" path) "/index.html" path)
138+
(let [output-dir (when-not (.isAbsolute (io/file output-dir)) output-dir)]
139+
(if (and static-dir (not= "/favicon.ico" path))
140+
(let [path (if (= "/" path) "/index.html" path)
141+
local-path
142+
(cond->
143+
(seq (for [x (if (string? static-dir) [static-dir] static-dir)
144+
:when (.exists (io/file (str x path)))]
145+
(str x path)))
146+
(complement nil?) first)
147+
local-path
148+
(if (nil? local-path)
149+
(cond
150+
(re-find #".jar" path)
151+
(io/resource (second (string/split path #".jar!/")))
152+
(string/includes? path (System/getProperty "user.dir"))
153+
(io/file (string/replace path (str (System/getProperty "user.dir") "/") ""))
154+
(#{"/cljs-logo-icon-32.png" "/cljs-logo.svg"} path)
155+
(io/resource (subs path 1))
156+
:else nil)
157+
local-path)]
158+
(cond
140159
local-path
141-
(cond->
142-
(seq (for [x (if (string? static-dir) [static-dir] static-dir)
143-
:when (.exists (io/file (str x path)))]
144-
(str x path)))
145-
(complement nil?) first)
146-
local-path
147-
(if (nil? local-path)
148-
(cond
149-
(re-find #".jar" path)
150-
(io/resource (second (string/split path #".jar!/")))
151-
(string/includes? path (System/getProperty "user.dir"))
152-
(io/file (string/replace path (str (System/getProperty "user.dir") "/") ""))
153-
(#{"/cljs-logo-icon-32.png" "/cljs-logo.svg"} path)
154-
(io/resource (subs path 1))
155-
:else nil)
156-
local-path)]
157-
(cond
158-
local-path
159-
(if-let [ext (some #(if (.endsWith path %) %) (keys ext->mime-type))]
160-
(let [mime-type (ext->mime-type ext "text/plain")
161-
encoding (mime-type->encoding mime-type "UTF-8")]
162-
(server/send-and-close conn 200 (slurp local-path :encoding encoding)
163-
mime-type encoding (and gzip? (= "text/javascript" mime-type))))
164-
(server/send-and-close conn 200 (slurp local-path) "text/plain"))
165-
;; "/index.html" doesn't exist, provide our own
166-
(= path "/index.html")
167-
(server/send-and-close conn 200
168-
(default-index (or output-to (str output-dir "/main.js"))) "text/html" "UTF-8")
169-
(= path (str "/" output-dir "/main.js") )
170-
(let [closure-defines (-> `{clojure.browser.repl/HOST ~host
171-
clojure.browser.repl/PORT ~port}
172-
cljsc/normalize-closure-defines
173-
json/write-str)]
160+
(if-let [ext (some #(if (.endsWith path %) %) (keys ext->mime-type))]
161+
(let [mime-type (ext->mime-type ext "text/plain")
162+
encoding (mime-type->encoding mime-type "UTF-8")]
163+
(server/send-and-close conn 200 (slurp local-path :encoding encoding)
164+
mime-type encoding (and gzip? (= "text/javascript" mime-type))))
165+
(server/send-and-close conn 200 (slurp local-path) "text/plain"))
166+
;; "/index.html" doesn't exist, provide our own
167+
(= path "/index.html")
174168
(server/send-and-close conn 200
175-
(str "var CLOSURE_UNCOMPILED_DEFINES = " closure-defines ";\n"
176-
"var CLOSURE_NO_DEPS = true;\n"
177-
"document.write('<script src=\"" output-dir "/goog/base.js\"></script>');\n"
178-
"document.write('<script src=\"" output-dir "/goog/deps.js\"></script>');\n"
179-
(when (.exists (io/file output-dir "cljs_deps.js"))
180-
"document.write('<script src=\"" output-dir "/cljs_deps.js\"></script>');\n")
181-
"document.write('<script src=\"" output-dir "/brepl_deps.js\"></script>');\n"
182-
"document.write('<script>goog.require(\"clojure.browser.repl.preload\");</script>');\n")
183-
"text/javascript" "UTF-8"))
184-
:else (server/send-404 conn path)))
185-
(server/send-404 conn path)))
169+
(default-index (or output-to (str output-dir "/main.js")))
170+
"text/html" "UTF-8")
171+
(= path (cond->> "/main.js" output-dir (str "/" output-dir )))
172+
(let [closure-defines (-> `{clojure.browser.repl/HOST ~host
173+
clojure.browser.repl/PORT ~port}
174+
cljsc/normalize-closure-defines
175+
json/write-str)]
176+
(server/send-and-close conn 200
177+
(str "var CLOSURE_UNCOMPILED_DEFINES = " closure-defines ";\n"
178+
"var CLOSURE_NO_DEPS = true;\n"
179+
"document.write('<script src=\"" output-dir "/goog/base.js\"></script>');\n"
180+
"document.write('<script src=\"" output-dir "/goog/deps.js\"></script>');\n"
181+
(when (.exists (io/file output-dir "cljs_deps.js"))
182+
"document.write('<script src=\"" output-dir "/cljs_deps.js\"></script>');\n")
183+
"document.write('<script src=\"" output-dir "/brepl_deps.js\"></script>');\n"
184+
"document.write('<script>goog.require(\"clojure.browser.repl.preload\");</script>');\n")
185+
"text/javascript" "UTF-8"))
186+
:else (server/send-404 conn path)))
187+
(server/send-404 conn path))))
186188

187189
(server/dispatch-on :get
188190
(fn [{:keys [path]} _ _]

0 commit comments

Comments
 (0)