Skip to content

Commit

Permalink
Fix dependency-order to work with JavaScript strings
Browse files Browse the repository at this point in the history
This allows running dependency-order once on all sources even when
some of the sources are JavaScript strings.
  • Loading branch information
Brenton Ashworth committed Apr 1, 2012
1 parent 69e8f4f commit 7472ab9
Showing 1 changed file with 25 additions and 12 deletions.
37 changes: 25 additions & 12 deletions src/clj/cljs/closure.clj
Original file line number Diff line number Diff line change
Expand Up @@ -292,11 +292,24 @@
state (reduce dependency-order-visit state deps)]
(assoc state :order (conj (:order state) file))))))

(defn- pack-string [s]
(if (string? s)
{:provides (-provides s)
:requires (-requires s)
:file (str "from_source_" (gensym) ".clj")
::original s}
s))

(defn- unpack-string [m]
(or (::original m) m))

(defn dependency-order
"Topologically sort a collection of dependencies."
[coll]
(let [state (build-index coll)]
(distinct (:order (reduce dependency-order-visit (assoc state :order []) (keys state))))))
(let [state (build-index (map pack-string coll))]
(map unpack-string
(distinct
(:order (reduce dependency-order-visit (assoc state :order []) (keys state)))))))

;; Compile
;; =======
Expand Down Expand Up @@ -591,13 +604,15 @@
(let [requires (mapcat -requires inputs)
required-cljs (remove (set inputs) (cljs-dependencies opts requires))
required-js (js-dependencies opts (set (concat (mapcat -requires required-cljs) requires)))]
(concat (map #(-> (javascript-file (:foreign %)
(or (:url %) (io/resource (:file %)))
(:provides %)
(:requires %))
(assoc :group (:group %))) required-js)
required-cljs
inputs)))
(cons (javascript-file nil (io/resource "goog/base.js") ["goog"] nil)
(dependency-order
(concat (map #(-> (javascript-file (:foreign %)
(or (:url %) (io/resource (:file %)))
(:provides %)
(:requires %))
(assoc :group (:group %))) required-js)
required-cljs
inputs)))))

(comment
;; add dependencies to literal js
Expand Down Expand Up @@ -861,9 +876,7 @@
[(-compile (io/resource "cljs/nodejscli.cljs") all-opts)]))
js-sources (if (coll? compiled)
(apply add-dependencies all-opts compiled)
(add-dependencies all-opts compiled))
js-sources (cons (javascript-file nil (io/resource "goog/base.js") ["goog"] nil)
(dependency-order js-sources))]
(add-dependencies all-opts compiled))]
(if (:optimizations all-opts)
(->> js-sources
(apply optimize all-opts)
Expand Down

0 comments on commit 7472ab9

Please sign in to comment.