Skip to content

Commit a1dca29

Browse files
author
dnolen
committed
CLJS-1375: cljs.js/require does not conj to *loaded*
Use Mike Fikes changes which highlighted some broken thigns. require did not invoke the callback if library was already loaded. Macro namespaces need to be renamed, otherwise unintuitively prevents loads.
1 parent 083f043 commit a1dca29

File tree

1 file changed

+59
-54
lines changed

1 file changed

+59
-54
lines changed

src/main/cljs/cljs/js.cljs

Lines changed: 59 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -171,56 +171,62 @@
171171
([bound-vars name opts cb]
172172
(require bound-vars name nil opts cb))
173173
([bound-vars name reload opts cb]
174-
(when (= :reload reload)
175-
(swap! *loaded* disj name))
176-
(when (= :reload-all reload)
177-
(reset! *loaded* #{}))
178-
(when (:verbose opts)
179-
(debug-prn (str "Loading " name (when (:macros-ns opts) " macros") " namespace")))
180-
(when-not (contains? @*loaded* name)
181-
(let [env (:*env* bound-vars)]
182-
(try
183-
((:*load-fn* bound-vars)
184-
{:name name
185-
:macros (:macros-ns opts)
186-
:path (ns->relpath name)}
187-
(fn [resource]
188-
(assert (or (map? resource) (nil? resource))
189-
"*load-fn* may only return a map or nil")
190-
(if resource
191-
(let [{:keys [lang source cache source-map]} resource]
192-
(condp = lang
193-
:clj (eval-str* bound-vars source name opts
194-
(fn [res]
195-
(if (:error res)
196-
(cb res)
197-
(cb {:value true}))))
198-
:js (let [res (try
199-
((:*eval-fn* bound-vars) resource)
200-
(when cache
201-
(load-analysis-cache!
202-
(:*compiler* bound-vars) name cache))
203-
(when source-map
204-
(load-source-map!
205-
(:*compiler* bound-vars) name source-map))
206-
(catch :default cause
207-
(wrap-error
208-
(ana/error env
209-
(str "Could not require " name) cause))))]
210-
(if (:error res)
211-
(cb res)
212-
(cb {:value true})))
213-
(cb (wrap-error
214-
(ana/error env
215-
(str "Invalid :lang specified " lang ", only :clj or :js allowed"))))))
216-
(cb (wrap-error
217-
(ana/error env
218-
(ana/error-message :undeclared-ns
219-
{:ns-sym name :js-provide (cljs.core/name name)})))))))
220-
(catch :default cause
221-
(cb (wrap-error
222-
(ana/error env
223-
(str "Could not require " name) cause)))))))))
174+
(let [name (cond-> name (:macro-ns opts) ana/macro-ns-name)]
175+
(when (= :reload reload)
176+
(swap! *loaded* disj name))
177+
(when (= :reload-all reload)
178+
(reset! *loaded* #{}))
179+
(when (:verbose opts)
180+
(debug-prn (str "Loading " name (when (:macros-ns opts) " macros") " namespace")))
181+
(if-not (contains? @*loaded* name)
182+
(let [env (:*env* bound-vars)]
183+
(try
184+
((:*load-fn* bound-vars)
185+
{:name name
186+
:macros (:macros-ns opts)
187+
:path (ns->relpath name)}
188+
(fn [resource]
189+
(assert (or (map? resource) (nil? resource))
190+
"*load-fn* may only return a map or nil")
191+
(if resource
192+
(let [{:keys [lang source cache source-map]} resource]
193+
(condp = lang
194+
:clj (eval-str* bound-vars source name opts
195+
(fn [res]
196+
(if (:error res)
197+
(cb res)
198+
(do
199+
(swap! *loaded* conj name)
200+
(cb {:value true})))))
201+
:js (let [res (try
202+
((:*eval-fn* bound-vars) resource)
203+
(when cache
204+
(load-analysis-cache!
205+
(:*compiler* bound-vars) name cache))
206+
(when source-map
207+
(load-source-map!
208+
(:*compiler* bound-vars) name source-map))
209+
(catch :default cause
210+
(wrap-error
211+
(ana/error env
212+
(str "Could not require " name) cause))))]
213+
(if (:error res)
214+
(cb res)
215+
(do
216+
(swap! *loaded* conj name)
217+
(cb {:value true}))))
218+
(cb (wrap-error
219+
(ana/error env
220+
(str "Invalid :lang specified " lang ", only :clj or :js allowed"))))))
221+
(cb (wrap-error
222+
(ana/error env
223+
(ana/error-message :undeclared-ns
224+
{:ns-sym name :js-provide (cljs.core/name name)})))))))
225+
(catch :default cause
226+
(cb (wrap-error
227+
(ana/error env
228+
(str "Could not require " name) cause))))))
229+
(cb {:value true})))))
224230

225231
(declare ns-side-effects analyze-deps)
226232

@@ -822,9 +828,9 @@
822828
(fn [{:keys [error] :as res}]
823829
(if error
824830
(do
825-
(println error)
831+
(println "Error:" error)
826832
(println (.. error -cause -stack)))
827-
(println res))))
833+
(println "Result:" res))))
828834

829835
(cljs/eval-str st
830836
"(ns foo.bar)\n(first [1 2 3])"
@@ -854,12 +860,11 @@
854860
(println (.. error -cause -stack)))
855861
(println res))))
856862

857-
;; inline source maps work under Node.js
858863
(cljs/eval-str st
859864
"(ns foo.bar)\n(ffirst [1 2 3])"
860865
'foo.bar
861866
{:verbose true
862-
:source-map false
867+
:source-map true
863868
:eval node-eval
864869
:load node-load}
865870
(fn [{:keys [error] :as res}]

0 commit comments

Comments
 (0)