Skip to content

Commit 7139c4c

Browse files
anmonteiroswannodette
authored andcommitted
CLJS-2254: Module Indexing: Provide relative paths for a package's main module
Also test indexing via `module_deps.js`.
1 parent 576f286 commit 7139c4c

File tree

3 files changed

+108
-21
lines changed

3 files changed

+108
-21
lines changed

src/main/cljs/cljs/module_deps.js

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,23 @@ md.on('end', function() {
6060
for (var key in deps_files) {
6161
var dep = deps_files[key];
6262

63-
if (dep.provides == null && !/node_modules[/\\](@[^/\\]+?[/\\])?[^/\\]+?[/\\]package\.json$/.test(dep.file)) {
64-
var match = dep.file.match(/node_modules[/\\](.*)\.js(on)?$/)
65-
66-
if (match != null){
67-
var providedModule = match[1].replace('\\', '/');
68-
69-
dep.provides = /\/index$/.test(providedModule) ?
70-
[ providedModule, providedModule.replace(/\/index$/,'')] :
71-
[ providedModule ];
63+
// add provides to files that are not `package.json`s
64+
if (!/node_modules[/\\](@[^/\\]+?[/\\])?[^/\\]+?[/\\]package\.json$/.test(dep.file)) {
65+
if (dep.file.indexOf('node_modules') !== -1) {
66+
var providedModule = dep.file
67+
.substring(dep.file.lastIndexOf('node_modules'))
68+
.replace('\\', '/')
69+
.replace('node_modules/', '');
70+
71+
dep.provides = dep.provides || [];
72+
dep.provides.push(providedModule, providedModule.replace(/\.js(on)?$/, ''));
73+
74+
var indexReplaced = providedModule.replace(/\/index\.js(on)?$/,'');
75+
76+
if (/\/index\.js(on)?$/.test(providedModule) &&
77+
dep.provides.indexOf(indexReplaced) === -1) {
78+
dep.provides.push(indexReplaced);
79+
}
7280
}
7381
}
7482

src/main/clojure/cljs/closure.clj

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2236,14 +2236,17 @@
22362236
(when (= main-path path)
22372237
name))))
22382238
pkg-jsons)]
2239-
{:provides (if (some? pkg-json-main)
2240-
[pkg-json-main]
2241-
(let [module-rel-name (string/replace
2242-
(subs path (.lastIndexOf path "node_modules"))
2243-
#"node_modules[\\\/]" "")]
2244-
(cond-> [module-rel-name (string/replace module-rel-name #"\.js(on)?$" "")]
2245-
(boolean (re-find #"[\\\/]index\.js(on)?$" module-rel-name))
2246-
(conj (string/replace module-rel-name #"[\\\/]index\.js(on)?$" "")))))}))))))
2239+
{:provides (let [module-rel-name (string/replace
2240+
(subs path (.lastIndexOf path "node_modules"))
2241+
#"node_modules[\\\/]" "")
2242+
provides (cond-> [module-rel-name (string/replace module-rel-name #"\.js(on)?$" "")]
2243+
(some? pkg-json-main)
2244+
(conj pkg-json-main))
2245+
index-replaced (string/replace module-rel-name #"[\\\/]index\.js(on)?$" "")]
2246+
(cond-> provides
2247+
(and (boolean (re-find #"[\\\/]index\.js(on)?$" module-rel-name))
2248+
(not (some #{index-replaced} provides)))
2249+
(conj index-replaced)))}))))))
22472250
module-fseq))))
22482251

22492252
(def node-file-seq->libs-spec (memoize node-file-seq->libs-spec*))

src/test/clojure/cljs/closure_tests.clj

Lines changed: 80 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,10 @@
9292
(is (true? (some (fn [module]
9393
(= module {:module-type :commonjs
9494
:file (.getAbsolutePath (io/file "node_modules/left-pad/index.js"))
95-
:provides ["left-pad"]})) modules))))
95+
:provides ["left-pad/index.js"
96+
"left-pad/index"
97+
"left-pad"]}))
98+
modules))))
9699
(test/delete-node-modules)
97100
(spit (io/file "package.json") "{}")
98101
(closure/maybe-install-node-deps! {:npm-deps {:react "15.6.1"
@@ -101,7 +104,9 @@
101104
(is (true? (some (fn [module]
102105
(= module {:module-type :commonjs
103106
:file (.getAbsolutePath (io/file "node_modules/react/react.js"))
104-
:provides ["react"]}))
107+
:provides ["react/react.js"
108+
"react/react"
109+
"react"]}))
105110
modules)))
106111
(is (true? (some (fn [module]
107112
(= module {:module-type :commonjs
@@ -120,7 +125,9 @@
120125
(is (true? (some (fn [module]
121126
(= module {:module-type :commonjs
122127
:file (.getAbsolutePath (io/file "node_modules/node-fetch/lib/index.js"))
123-
:provides ["node-fetch/lib/index.js" "node-fetch/lib/index" "node-fetch/lib"]}))
128+
:provides ["node-fetch/lib/index.js"
129+
"node-fetch/lib/index"
130+
"node-fetch/lib"]}))
124131
modules))))
125132
(test/delete-node-modules)
126133
(spit (io/file "package.json") "{}")
@@ -130,7 +137,76 @@
130137
(= module
131138
{:file (.getAbsolutePath (io/file "node_modules/@comandeer/css-filter/dist/css-filter.umd.js"))
132139
:module-type :commonjs
133-
:provides ["@comandeer/css-filter"]}))
140+
:provides ["@comandeer/css-filter/dist/css-filter.umd.js"
141+
"@comandeer/css-filter/dist/css-filter.umd"
142+
"@comandeer/css-filter"]}))
134143
modules))))
135144
(.delete (io/file "package.json"))
136145
(test/delete-node-modules))
146+
147+
(deftest test-index-node-modules-module-deps-js
148+
(spit (io/file "package.json") "{}")
149+
(let [opts {:npm-deps {:left-pad "1.1.3"}}
150+
out (util/output-directory opts)]
151+
(test/delete-node-modules)
152+
(test/delete-out-files out)
153+
(closure/maybe-install-node-deps! opts)
154+
(is (true? (some (fn [module]
155+
(= module {:module-type :commonjs
156+
:file (.getAbsolutePath (io/file "node_modules/left-pad/index.js"))
157+
:provides ["left-pad"
158+
"left-pad/index.js"
159+
"left-pad/index"]}))
160+
(closure/index-node-modules ["left-pad"] opts))))
161+
(test/delete-node-modules)
162+
(spit (io/file "package.json") "{}")
163+
(test/delete-out-files out)
164+
(let [opts {:npm-deps {:react "15.6.1"
165+
:react-dom "15.6.1"}}
166+
_ (closure/maybe-install-node-deps! opts)
167+
modules (closure/index-node-modules ["react" "react-dom" "react-dom/server"] opts)]
168+
(is (true? (some (fn [module]
169+
(= module {:module-type :commonjs
170+
:file (.getAbsolutePath (io/file "node_modules/react/react.js"))
171+
:provides ["react"
172+
"react/react.js"
173+
"react/react"]}))
174+
modules)))
175+
(is (true? (some (fn [module]
176+
(= module {:module-type :commonjs
177+
:file (.getAbsolutePath (io/file "node_modules/react/lib/React.js"))
178+
:provides ["react/lib/React.js" "react/lib/React"]}))
179+
modules)))
180+
(is (true? (some (fn [module]
181+
(= module {:module-type :commonjs
182+
:file (.getAbsolutePath (io/file "node_modules/react-dom/server.js"))
183+
:provides ["react-dom/server.js" "react-dom/server"]}))
184+
modules))))
185+
(test/delete-node-modules)
186+
(spit (io/file "package.json") "{}")
187+
(test/delete-out-files out)
188+
(let [opts {:npm-deps {:node-fetch "1.7.1"}}]
189+
(closure/maybe-install-node-deps! opts)
190+
(is (true? (some (fn [module]
191+
(= module {:module-type :commonjs
192+
:file (.getAbsolutePath (io/file "node_modules/node-fetch/lib/index.js"))
193+
:provides ["node-fetch/lib/index.js"
194+
"node-fetch/lib/index"
195+
"node-fetch/lib"]}))
196+
(closure/index-node-modules ["node-fetch/lib"] opts)))))
197+
(test/delete-node-modules)
198+
(spit (io/file "package.json") "{}")
199+
(test/delete-out-files out)
200+
(let [opts {:npm-deps {"@comandeer/css-filter" "1.0.1"}}]
201+
(closure/maybe-install-node-deps! opts)
202+
(is (true? (some (fn [module]
203+
(= module
204+
{:file (.getAbsolutePath (io/file "node_modules/@comandeer/css-filter/dist/css-filter.umd.js"))
205+
:module-type :commonjs
206+
:provides ["@comandeer/css-filter"
207+
"@comandeer/css-filter/dist/css-filter.umd.js"
208+
"@comandeer/css-filter/dist/css-filter.umd"]}))
209+
(closure/index-node-modules ["@comandeer/css-filter"] opts)))))
210+
(.delete (io/file "package.json"))
211+
(test/delete-node-modules)
212+
(test/delete-out-files out)))

0 commit comments

Comments
 (0)