|
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