From b7652fded1c168425febcded54b41c2a30307b36 Mon Sep 17 00:00:00 2001 From: davidnolen Date: Fri, 10 Oct 2025 20:45:30 -0400 Subject: [PATCH] runtime existence check for :require-global libs under :optimizations :none --- src/main/clojure/cljs/compiler.cljc | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/main/clojure/cljs/compiler.cljc b/src/main/clojure/cljs/compiler.cljc index 3e0d42480..8a17d17d2 100644 --- a/src/main/clojure/cljs/compiler.cljc +++ b/src/main/clojure/cljs/compiler.cljc @@ -1312,19 +1312,24 @@ (apply str (map #(str "['" % "']") xs))))) -(defn emit-global-export [ns-name global-exports lib] - (let [[lib' sublib] (ana/lib&sublib lib)] +(defn emit-global-export [ns-name global-exports lib opts] + (let [[lib' sublib] (ana/lib&sublib lib) + ref (str "goog.global" + ;; Convert object dot access to bracket access + (->> (string/split (name (or (get global-exports (symbol lib')) + (get global-exports (name lib')))) + #"\.") + (map (fn [prop] (str "[\"" prop "\"]"))) + (apply str)))] + (when (and (ana/external-dep? lib') + (= :none (:optimizations opts))) + (emitln + "if(!" ref ") throw new Error(\"External library, " lib' ", never provided\");")) (emitln (munge ns-name) "." (ana/munge-global-export lib) - " = goog.global" - ;; Convert object dot access to bracket access - (->> (string/split (name (or (get global-exports (symbol lib')) - (get global-exports (name lib')))) - #"\.") - (map (fn [prop] - (str "[\"" prop "\"]"))) - (apply str)) + " = " + ref (sublib-select sublib) ";"))) @@ -1409,7 +1414,7 @@ ;; Global Exports (doseq [lib global-exports-libs] (let [{:keys [global-exports]} (get js-dependency-index (name (-> lib ana/lib&sublib first)))] - (emit-global-export ns-name global-exports lib))) + (emit-global-export ns-name global-exports lib options))) (when (-> libs meta :reload-all) (emitln "if(!COMPILED) " loaded-libs " = cljs.core.into(" loaded-libs-temp ", " loaded-libs ");"))))