|
763 | 763 | (javascript-file foreign url provides requires)
|
764 | 764 | js-map)))
|
765 | 765 | required-js)
|
766 |
| - [(when (-> @env/*compiler* :options :emit-constants) |
767 |
| - (let [url (deps/to-url (str (util/output-directory opts) "/constants_table.js"))] |
768 |
| - (javascript-file nil url url ["constants-table"] ["cljs.core"] nil nil)))] |
| 766 | + (when (-> @env/*compiler* :options :emit-constants) |
| 767 | + (let [url (deps/to-url (str (util/output-directory opts) "/constants_table.js"))] |
| 768 | + [(javascript-file nil url url ["constants-table"] ["cljs.core"] nil nil)])) |
769 | 769 | required-cljs
|
770 | 770 | inputs)))))
|
771 | 771 |
|
|
878 | 878 | inputs))
|
879 | 879 |
|
880 | 880 | (defn add-js-sources
|
881 |
| - "Given list of IJavaScript objects, add foreign-deps, constants-table, and |
882 |
| - preloads IJavaScript objects to the list." |
| 881 | + "Given list of IJavaScript objects, add foreign-deps, constants-table |
| 882 | + IJavaScript objects to the list." |
883 | 883 | [inputs opts]
|
884 | 884 | (let [requires (set (mapcat deps/-requires inputs))
|
885 |
| - required-js (js-dependencies opts requires) |
886 |
| - cenv @env/*compiler*] |
| 885 | + required-js (js-dependencies opts requires)] |
887 | 886 | (concat
|
888 | 887 | (map
|
889 | 888 | (fn [{:keys [foreign url file provides requires] :as js-map}]
|
|
892 | 891 | (javascript-file foreign url provides requires)
|
893 | 892 | js-map)))
|
894 | 893 | required-js)
|
895 |
| - [(when (-> cenv :options :emit-constants) |
896 |
| - (let [url (deps/to-url (str (util/output-directory opts) "/constants_table.js"))] |
897 |
| - (javascript-file nil url url ["constants-table"] ["cljs.core"] nil nil)))] |
898 |
| - (remove nil? |
899 |
| - (map (fn [preload] |
900 |
| - (if-let [uri (:uri (source-for-namespace preload cenv))] |
901 |
| - (-compile uri opts) |
902 |
| - (util/debug-prn "WARNING: preloads namespace" preload "does not exist"))) |
903 |
| - (:preloads opts))) |
| 894 | + (when (-> @env/*compiler* :options :emit-constants) |
| 895 | + (let [url (deps/to-url (str (util/output-directory opts) "/constants_table.js"))] |
| 896 | + [(javascript-file nil url url ["constants-table"] ["cljs.core"] nil nil)])) |
904 | 897 | inputs)))
|
905 | 898 |
|
| 899 | +(defn distinct-by |
| 900 | + ([k coll] |
| 901 | + (let [step (fn step [xs seen] |
| 902 | + (lazy-seq |
| 903 | + ((fn [[f :as xs] seen] |
| 904 | + (when-let [s (seq xs)] |
| 905 | + (let [v (get f k)] |
| 906 | + (if (contains? seen v) |
| 907 | + (recur (rest s) seen) |
| 908 | + (cons f (step (rest s) (conj seen v))))))) |
| 909 | + xs seen)))] |
| 910 | + (step coll #{})))) |
| 911 | + |
| 912 | +(defn add-preloads |
| 913 | + "Add :preloads to a given set of inputs (IJavaScript). Returns a new |
| 914 | + list of inputs where the preloaded namespaces and their deps come immediately after |
| 915 | + cljs.core or the constants table depending on the optimization setting. Any |
| 916 | + files needing copying or compilation will be compiled and/or copied to the |
| 917 | + appropiate location." |
| 918 | + [inputs opts] |
| 919 | + (let [pred (fn [x] |
| 920 | + (if (:emit-constants opts) |
| 921 | + (not= ["constants-table"] (:provides x)) |
| 922 | + (not= ["cljs.core"] (:provides x)))) |
| 923 | + pre (take-while pred inputs) |
| 924 | + post (drop-while pred inputs) |
| 925 | + preloads (remove nil? |
| 926 | + (map |
| 927 | + (fn [preload] |
| 928 | + (try |
| 929 | + (comp/find-source preload) |
| 930 | + (catch Throwable t |
| 931 | + (util/debug-prn "WARNING: preload namespace" preload "does not exist")))) |
| 932 | + (:preloads opts)))] |
| 933 | + (distinct-by :provides |
| 934 | + (concat pre [(first post)] |
| 935 | + (-> (add-dependency-sources preloads opts) |
| 936 | + deps/dependency-order |
| 937 | + (compile-sources opts) |
| 938 | + (add-js-sources opts)) |
| 939 | + (next post))))) |
| 940 | + |
906 | 941 | (comment
|
907 | 942 | (comp/find-sources-root "samples/hello/src")
|
908 | 943 | (find-dependency-sources (find-sources-root "samples/hello/src"))
|
|
1965 | 2000 | (add-js-sources all-opts)
|
1966 | 2001 | (cond-> (= :nodejs (:target all-opts)) (concat [(-compile (io/resource "cljs/nodejs.cljs") all-opts)]))
|
1967 | 2002 | deps/dependency-order
|
| 2003 | + (add-preloads all-opts) |
1968 | 2004 | add-goog-base
|
1969 | 2005 | (cond-> (= :nodejs (:target all-opts)) (concat [(-compile (io/resource "cljs/nodejscli.cljs") all-opts)])))
|
1970 | 2006 | _ (when (:emit-constants all-opts)
|
|
0 commit comments