File tree 3 files changed +43
-1
lines changed
3 files changed +43
-1
lines changed Original file line number Diff line number Diff line change 1
1
(set-env!
2
- :dependencies '[[cheshire " 5.6.3" ]]
2
+ :dependencies '[[cheshire " 5.6.3" ]
3
+ [com.google.javascript/closure-compiler-unshaded " v20160911" ]]
3
4
:source-paths #{" src" })
4
5
5
6
(require '[cljsjs.npm.build :refer [package]])
Original file line number Diff line number Diff line change
1
+ (ns cljsjs.closure
2
+ (:require [clojure.java.io :as io])
3
+ (:import [com.google.javascript.jscomp CompilerPass NodeTraversal
4
+ CompilerOptions SourceFile NodeTraversal$Callback JSModule]
5
+ [com.google.javascript.rhino Node]))
6
+
7
+ (defn is-require? [n]
8
+ (and (= 2 (.getChildCount n))
9
+ (.. n getFirstChild (matchesQualifiedName " require" ))
10
+ (.. n getSecondChild isString)))
11
+
12
+ (defn is-npm-require? [module-name]
13
+ false )
14
+
15
+ (defn finder [requires]
16
+ (reify NodeTraversal$Callback
17
+ (shouldTraverse ^boolean [this t n parent]
18
+ true )
19
+ (visit ^void [this t n parent]
20
+ (if (is-require? n)
21
+ (swap! requires conj (.. n getSecondChild getString)))
22
+ nil )))
23
+
24
+ (defn process-pass [compiler requires]
25
+ (reify CompilerPass
26
+ (process [this _ root]
27
+ (NodeTraversal/traverseEs6 compiler root (finder requires)))))
28
+
29
+ (defn find-requires [f]
30
+ (let [requires (atom [])
31
+ module (doto (JSModule. " $singleton$" )
32
+ (.add (SourceFile/fromFile f)))
33
+ closure-compiler (com.google.javascript.jscomp.Compiler. )
34
+ pass (process-pass closure-compiler requires)]
35
+ (doseq [input (.getInputs module)]
36
+ (.process pass nil (.getAstRoot input closure-compiler)))
37
+ @requires))
38
+
39
+ (comment
40
+ (find-requires (io/file " node_modules/react/lib/React.js" )))
Original file line number Diff line number Diff line change 2
2
(:require [cheshire.core :as json]
3
3
[clojure.java.io :as io]
4
4
[clojure.string :as string]
5
+ [cljsjs.closure :as closure]
5
6
[boot.util :as util]
6
7
[boot.core :as boot]
7
8
[boot.task.built-in :as built-in]))
You can’t perform that action at this time.
0 commit comments