|
2781 | 2781 | (if (and (.exists cljcf) (.isFile cljcf)) |
2782 | 2782 | cljcf)))))) |
2783 | 2783 |
|
| 2784 | +(defn external-dep? |
| 2785 | + "Returns true if the library is an :external? foreign dep. This means no source is provided |
| 2786 | + for the library, i.e. it will be provided by some script tag on the page, or loaded by some |
| 2787 | + other means into the JS execution environment." |
| 2788 | + #?(:cljs {:tag boolean}) |
| 2789 | + [dep] |
| 2790 | + (let [js-index (:js-dependency-index @env/*compiler*)] |
| 2791 | + (if-some [[_ {:keys [foreign external?]}] (find js-index (name (-> dep lib&sublib first)))] |
| 2792 | + (and foreign external?) |
| 2793 | + false))) |
| 2794 | + |
2784 | 2795 | (defn foreign-dep? |
2785 | 2796 | #?(:cljs {:tag boolean}) |
2786 | 2797 | [dep] |
|
3083 | 3094 | [new-name (symbol "js" (str orig))])) |
3084 | 3095 | rename)})))) |
3085 | 3096 |
|
3086 | | -(defn global-lib [lib] |
3087 | | - (symbol "js" (str lib))) |
3088 | | - |
3089 | 3097 | (defn parse-global-require-spec |
3090 | | - [env aliases spec] |
| 3098 | + [env cenv deps aliases spec] |
3091 | 3099 | (if (or (symbol? spec) (string? spec)) |
3092 | | - (recur env aliases [spec]) |
| 3100 | + (recur env cenv deps aliases [spec]) |
3093 | 3101 | (do |
3094 | 3102 | (basic-validate-ns-spec env false spec) |
3095 | 3103 | (let [[lib & opts] spec |
|
3120 | 3128 | (error env |
3121 | 3129 | (parse-ns-error-msg spec |
3122 | 3130 | ":refer must be followed by a sequence of symbols in :require / :require-macros")))) |
3123 | | - (merge |
3124 | | - (when (some? alias) |
3125 | | - {rk (merge {alias (global-lib lib)} {lib (global-lib lib)})}) |
3126 | | - (when (some? referred-without-renamed) |
3127 | | - {uk (apply hash-map (interleave referred-without-renamed (repeat (global-lib lib))))}) |
3128 | | - (when (some? renamed) |
3129 | | - {renk (reduce (fn [m [original renamed]] |
3130 | | - (when-not (some #{original} referred) |
3131 | | - (throw (error env |
3132 | | - (str "Renamed symbol " original " not referred")))) |
3133 | | - (assoc m renamed (symbol "js" (str (str lib) "." (str original))))) |
3134 | | - {} renamed)})))))) |
| 3131 | + (swap! deps conj lib) |
| 3132 | + (let [ret (merge |
| 3133 | + (when (some? alias) |
| 3134 | + {rk (merge {alias lib} {lib lib})}) |
| 3135 | + (when (some? referred-without-renamed) |
| 3136 | + {uk (apply hash-map (interleave referred-without-renamed (repeat lib)))}) |
| 3137 | + (when (some? renamed) |
| 3138 | + {renk (reduce (fn [m [original renamed]] |
| 3139 | + (when-not (some #{original} referred) |
| 3140 | + (throw (error env |
| 3141 | + (str "Renamed symbol " original " not referred")))) |
| 3142 | + (assoc m renamed (symbol (str lib) (str original)))) |
| 3143 | + {} renamed)}))] |
| 3144 | + (swap! cenv assoc-in [:js-dependency-index (str lib)] |
| 3145 | + {:external? true |
| 3146 | + :foreign true |
| 3147 | + :provides [(str lib)] |
| 3148 | + :global-exports {lib lib}}) |
| 3149 | + ret))))) |
3135 | 3150 |
|
3136 | 3151 | (defn parse-require-spec [env macros? deps aliases spec] |
3137 | 3152 | (if (or (symbol? spec) (string? spec)) |
|
3435 | 3450 | :use-macros (comp (partial parse-require-spec env true deps aliases) |
3436 | 3451 | (partial use->require env)) |
3437 | 3452 | :import (partial parse-import-spec env deps) |
3438 | | - :require-global #(parse-global-require-spec env aliases %)} |
| 3453 | + :require-global #(parse-global-require-spec env env/*compiler* deps aliases %)} |
3439 | 3454 | valid-forms (atom #{:use :use-macros :require :require-macros :require-global :import}) |
3440 | 3455 | reload (atom {:use nil :require nil :use-macros nil :require-macros nil}) |
3441 | 3456 | reloads (atom {}) |
|
0 commit comments