Skip to content

Commit b31a9a9

Browse files
mfikesdnolen
authored andcommitted
CLJS-2702: Accomodate new Closure Library dependency loading strategy
1 parent e4e4a29 commit b31a9a9

File tree

8 files changed

+45
-13
lines changed

8 files changed

+45
-13
lines changed

src/main/cljs/cljs/bootstrap_nodejs.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,15 @@ global.CLOSURE_IMPORT_SCRIPT = function(src, opt_sourceText) {
7373
// Sources are always expressed relative to closure's base.js, but
7474
// require() is always relative to the current source.
7575
if (opt_sourceText === undefined) {
76-
var flags = goog.dependencies_.loadFlags[src];
76+
var flags = null;
77+
if (goog.debugLoader_) {
78+
var dep = goog.debugLoader_.dependencies_[src];
79+
if (dep) {
80+
flags = dep.loadFlags;
81+
}
82+
} else {
83+
flags = goog.dependencies_.loadFlags[src];
84+
}
7785
if (flags && flags["foreign-lib"]) {
7886
nodeGlobalRequire(path.resolve(__dirname, "..", src));
7987
} else {

src/main/cljs/clojure/browser/repl.cljs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,12 @@
199199
(do
200200
(set! load-queue #js [])
201201
(js/goog.writeScriptTag__ src opt_sourceText)))))
202+
;; In the latest Closure library implementation, there is no goog.writeScriptTag_,
203+
;; to monkey-patch. The behavior of interest is instead in goog.Dependency.prototype.load,
204+
;; which first checks and uses CLOSURE_IMPORT_SCRIPT if defined. So we hook our desired
205+
;; behavior here.
206+
(when goog/debugLoader_
207+
(set! js/CLOSURE_IMPORT_SCRIPT (.-writeScriptTag_ js/goog)))
202208
;; we must reuse Closure library dev time dependency management, under namespace
203209
;; reload scenarios we simply delete entries from the correct private locations
204210
(set! (.-require js/goog)
@@ -207,11 +213,16 @@
207213
(set! (.-cljsReloadAll_ js/goog) true))
208214
(let [reload? (or reload (.-cljsReloadAll__ js/goog))]
209215
(when reload?
210-
(let [path (gobj/get js/goog.dependencies_.nameToPath src)]
211-
(gobj/remove js/goog.dependencies_.visited path)
212-
(gobj/remove js/goog.dependencies_.written path)
213-
(gobj/remove js/goog.dependencies_.written
214-
(str js/goog.basePath path))))
216+
(if (some? goog/debugLoader_)
217+
(let [path (.getPathFromDeps_ goog/debugLoader_ name)]
218+
(gobj/remove (.-written_ goog/debugLoader_) path)
219+
(gobj/remove (.-written_ goog/debugLoader_)
220+
(str js/goog.basePath path)))
221+
(let [path (gobj/get js/goog.dependencies_.nameToPath src)]
222+
(gobj/remove js/goog.dependencies_.visited path)
223+
(gobj/remove js/goog.dependencies_.written path)
224+
(gobj/remove js/goog.dependencies_.written
225+
(str js/goog.basePath path)))))
215226
(let [ret (.require__ js/goog src)]
216227
(when (= reload "reload-all")
217228
(set! (.-cljsReloadAll_ js/goog) false))

src/main/clojure/cljs/repl/nashorn.clj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,9 @@
127127
(when (or (not (contains? *loaded-libs* name)) reload)
128128
(set! *loaded-libs* (conj (or *loaded-libs* #{}) name))
129129
(js/CLOSURE_IMPORT_SCRIPT
130-
(goog.object/get (.. js/goog -dependencies_ -nameToPath) name)))))))))
130+
(if (some? goog/debugLoader_)
131+
(.getPathFromDeps_ goog/debugLoader_ name)
132+
(goog.object/get (.. js/goog -dependencies_ -nameToPath) name))))))))))
131133
(-evaluate [{engine :engine :as this} filename line js]
132134
(when debug (println "Evaluating: " js))
133135
(try

src/main/clojure/cljs/repl/node.clj

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,9 @@
197197
'(set! (.-require js/goog)
198198
(fn [name]
199199
(js/CLOSURE_IMPORT_SCRIPT
200-
(unchecked-get (.. js/goog -dependencies_ -nameToPath) name)))))
200+
(if (some? goog/debugLoader_)
201+
(.getPathFromDeps_ goog/debugLoader_ name)
202+
(unchecked-get (.. js/goog -dependencies_ -nameToPath) name))))))
201203
;; load cljs.core, setup printing
202204
(repl/evaluate-form repl-env env "<cljs repl>"
203205
'(do
@@ -213,7 +215,9 @@
213215
(when (or (not (contains? *loaded-libs* name)) reload)
214216
(set! *loaded-libs* (conj (or *loaded-libs* #{}) name))
215217
(js/CLOSURE_IMPORT_SCRIPT
216-
(unchecked-get (.. js/goog -dependencies_ -nameToPath) name)))))))
218+
(if (some? goog/debugLoader_)
219+
(.getPathFromDeps_ goog/debugLoader_ name)
220+
(unchecked-get (.. js/goog -dependencies_ -nameToPath) name))))))))
217221
(node-eval repl-env
218222
(str "goog.global.CLOSURE_UNCOMPILED_DEFINES = "
219223
(json/write-str (:closure-defines opts)) ";")))))

src/main/clojure/cljs/repl/rhino.clj

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
" name = \"load-file\","
3030
" loadFile = Packages.clojure.lang.RT[\"var\"](ns,name);\n"
3131
" if(src) loadFile.invoke(___repl_env, __repl_opts, src);\n"
32+
" return true;\n"
3233
"};\n"))
3334

3435
;; =============================================================================
@@ -155,7 +156,9 @@
155156
(when (or (not (contains? *loaded-libs* name)) reload)
156157
(set! *loaded-libs* (conj (or *loaded-libs* #{}) name))
157158
(js/CLOSURE_IMPORT_SCRIPT
158-
(goog.object/get (.. js/goog -dependencies_ -nameToPath) name)))))))
159+
(if (some? goog/debugLoader_)
160+
(.getPathFromDeps_ goog/debugLoader_ name)
161+
(goog.object/get (.. js/goog -dependencies_ -nameToPath) name))))))))
159162

160163
;; set closure-defines
161164
(rhino-eval repl-env "CLOSURE_UNCOMPILED_DEFINES" 1

src/test/clojure/cljs/build_api_tests.clj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@
187187
:opts
188188
{:output-dir output-dir
189189
:optimizations :none
190+
:language-in :es6
190191
:verbose true
191192
:foreign-libs [{:file "src/test/cljs_build/loader_test/foreignA.js"
192193
:provides ["foreign.a"]}

src/test/self/self_parity/auxiliary.cljs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@
8787
goog.iter.Iterable
8888
goog.iter.Iterator
8989
goog.json
90-
goog.json.EvalJsonProcessor
9190
goog.json.NativeJsonProcessor
9291
goog.json.Replacer
9392
goog.json.Reviver

src/test/self/self_parity/test.cljs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@
4242
(set! (.-require js/goog)
4343
(fn [name]
4444
(js/CLOSURE_IMPORT_SCRIPT
45-
(gobj/get (.. js/goog -dependencies_ -nameToPath) name))))
45+
(if goog/debugLoader_
46+
(.getPathFromDeps_ goog/debugLoader_ name)
47+
(gobj/get (.. js/goog -dependencies_ -nameToPath) name)))))
4648
;; setup printing
4749
(nodejs/enable-util-print!)
4850
;; redef goog.require to track loaded libs
@@ -52,7 +54,9 @@
5254
(when (or (not (contains? *loaded-libs* name)) reload)
5355
(set! *loaded-libs* (conj (or *loaded-libs* #{}) name))
5456
(js/CLOSURE_IMPORT_SCRIPT
55-
(gobj/get (.. js/goog -dependencies_ -nameToPath) name))))))
57+
(if goog/debugLoader_
58+
(.getPathFromDeps_ goog/debugLoader_ name)
59+
(gobj/get (.. js/goog -dependencies_ -nameToPath) name)))))))
5660

5761
;; Node file reading fns
5862

0 commit comments

Comments
 (0)