Skip to content

Commit 071988f

Browse files
committed
CLJS-2676: Bad cljs.loader behavior for modules with multiple provides
Make the type of :out-file consistent - should be string When computing orphans we need to dissoc all the :provided names of the module, not just the canonical one. Update tests
1 parent 625c437 commit 071988f

File tree

4 files changed

+15
-9
lines changed

4 files changed

+15
-9
lines changed

src/main/clojure/cljs/closure.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,7 @@
541541
IJavaScript."
542542
[^File file {:keys [output-file] :as opts}]
543543
(if output-file
544-
(let [out-file (io/file (util/output-directory opts) output-file)]
544+
(let [out-file (.toString (io/file (util/output-directory opts) output-file))]
545545
(compiled-file (comp/compile-file file out-file opts)))
546546
(let [path (.getPath ^File file)]
547547
(binding [ana/*cljs-file* path]

src/main/clojure/cljs/compiler.cljc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1423,7 +1423,7 @@
14231423
(get-in @env/*compiler* [:options :emit-constants])
14241424
(conj ana/constants-ns-sym)))
14251425
:file dest
1426-
:out-file dest
1426+
:out-file (.toString dest)
14271427
:source-file src}
14281428
(when sm-data
14291429
{:source-map (:source-map sm-data)}))]
@@ -1557,7 +1557,7 @@
15571557
(and (true? (:optimize-constants opts))
15581558
(nil? (get-in nses [ns :defs]))))
15591559
(with-core-cljs opts (fn [] (ana/analyze-file src-file opts))))
1560-
(assoc ns-info :out-file dest-file))))
1560+
(assoc ns-info :out-file (.toString dest-file)))))
15611561
(catch Exception e
15621562
(throw (ex-info (str "failed compiling file:" src) {:file src} e))))
15631563
(throw (java.io.FileNotFoundException. (str "The file " src " does not exist.")))))))))

src/main/clojure/cljs/module_graph.cljc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,10 @@
231231
(into {} (map assign1) e->ms))
232232
orphans (zipmap
233233
(map (comp str comp/munge first :provides)
234-
(-> (reduce-kv (fn [m k _] (dissoc m k)) index assigned)
234+
(-> (reduce-kv
235+
(fn [m k _]
236+
(reduce dissoc m (get-in m [k :provides])))
237+
index assigned)
235238
vals set))
236239
(repeat :cljs-base))]
237240
(merge assigned orphans)))

src/test/clojure/cljs/module_graph_tests.clj

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,10 @@
115115
(is (every?
116116
(fn [[e m]]
117117
(= m (get assigns e)))
118-
assigns'))))
118+
assigns'))
119+
;; events should not have been moved to :cljs-base as an orphan even though
120+
;; it provides multiple nses
121+
(is (= (get assigns "events") :shared))))
119122

120123
(def bad-modules
121124
{:page1 {:entries '[page1.a page1.b events]
@@ -139,10 +142,10 @@
139142
{:output-dir (:output-dir opts)
140143
:asset-path "/asset/js"
141144
:optimizations :none})
142-
{:shared ["/asset/js/shared/a.js" "/asset/js/shared/b.js"]
143-
:page1 ["/asset/js/cljs/reader.js" "/asset/js/page1/a.js" "/asset/js/page1/b.js"]
144-
:page2 ["/asset/js/page2/a.js" "/asset/js/page2/b.js"]
145-
:cljs-base ["/asset/js/goog/base.js" "/asset/js/cljs/core.js" "/asset/js/events.js"]}))
145+
{:shared ["/asset/js/events.js" "/asset/js/shared/a.js" "/asset/js/shared/b.js"],
146+
:page1 ["/asset/js/cljs/reader.js" "/asset/js/page1/a.js" "/asset/js/page1/b.js"],
147+
:page2 ["/asset/js/page2/a.js" "/asset/js/page2/b.js"],
148+
:cljs-base ["/asset/js/goog/base.js" "/asset/js/cljs/core.js"]}))
146149
(is (= (module-graph/modules->module-uris (modules opts) (inputs opts)
147150
{:output-dir (:output-dir opts)
148151
:asset-path "/asset/js"

0 commit comments

Comments
 (0)