@@ -8,7 +8,9 @@ let enhancedResolve = require('enhanced-resolve');
88
99let target = 'CLJS_TARGET' ;
1010let filename = fs . realpathSync ( path . resolve ( __dirname , 'JS_FILE' ) ) ;
11- let mainFields = [ 'module' , 'main' ] ;
11+ let mainFields = target === 'nodejs'
12+ ? [ 'module' , 'main' ]
13+ : [ 'browser' , 'module' , 'main' ] ;
1214let aliasFields = target === 'nodejs' ? [ ] : [ 'browser' ] ;
1315
1416// https://github.com/egoist/konan
@@ -61,7 +63,7 @@ let resolver = enhancedResolve.create({
6163 ) ,
6264 extensions : [ '.js' , '.json' ] ,
6365 mainFields : mainFields ,
64- aliasFields : aliasFields ,
66+ aliasFields : target === 'nodejs' ? [ ] : [ 'browser' ] ,
6567 moduleExtensions : [ '.js' , '.json' ]
6668} ) ;
6769
@@ -89,21 +91,59 @@ let md = mdeps({
8991function getPackageJsonMainEntry ( pkgJson ) {
9092 for ( let i = 0 ; i < mainFields . length ; i ++ ) {
9193 let entry = mainFields [ i ] ;
92-
93- if ( pkgJson [ entry ] != null ) {
94- return pkgJson [ entry ] ;
94+ const entryVal = pkgJson [ entry ] ;
95+
96+ if ( entryVal != null ) {
97+ if ( typeof entryVal === 'string' ) {
98+ return entryVal ;
99+ } else if ( typeof entryVal === 'object' ) {
100+ for ( let j = i ; j < mainFields . length ; j ++ ) {
101+ let otherEntry = mainFields [ j ] ;
102+ const otherEntryVal = pkgJson [ entry ] ;
103+
104+ if ( entryVal [ otherEntryVal ] != null ) {
105+ return entryVal [ otherEntryVal ]
106+ }
107+ }
108+ }
95109 }
96110 }
97111 return null ;
98112}
99113
114+ function depProvides ( provides , file ) {
115+ const result = provides != null ? provides . slice ( 0 ) : [ ] ;
116+
117+ let providedModule = file
118+ . substring ( file . lastIndexOf ( 'node_modules' ) )
119+ . replace ( / \\ / g, '/' )
120+ . replace ( 'node_modules/' , '' ) ;
121+
122+ result . push (
123+ providedModule ,
124+ providedModule . replace ( / \. j s ( o n ) ? $ / , '' )
125+ ) ;
126+
127+ let indexReplaced = providedModule . replace ( / \/ i n d e x \. j s ( o n ) ? $ / , '' ) ;
128+
129+ if (
130+ / \/ i n d e x \. j s ( o n ) ? $ / . test ( providedModule ) &&
131+ result . indexOf ( indexReplaced ) === - 1
132+ ) {
133+ result . push ( indexReplaced ) ;
134+ }
135+
136+ return result ;
137+ }
138+
100139let pkgJsons = [ ] ;
101140let deps_files = { } ;
102141
103142md . on ( 'package' , function ( pkg ) {
104143 // we don't want to include the package.json for users' projects
105144 if ( / n o d e _ m o d u l e s / . test ( pkg . __dirname ) ) {
106145 let pkgJson = {
146+ basedir : pkg . __dirname ,
107147 file : path . join ( pkg . __dirname , 'package.json' ) ,
108148 } ;
109149
@@ -116,6 +156,14 @@ md.on('package', function (pkg) {
116156 pkgJson . mainEntry = path . join ( pkg . __dirname , pkgJsonMainEntry ) ;
117157 }
118158
159+ // we'll need these later
160+ for ( let i = 0 ; i < aliasFields . length ; i ++ ) {
161+ const field = aliasFields [ i ] ;
162+ if ( pkg [ field ] != null ) {
163+ pkgJson [ field ] = pkg [ field ] ;
164+ }
165+ }
166+
119167 pkgJsons . push ( pkgJson ) ;
120168 }
121169} ) ;
@@ -132,6 +180,22 @@ md.on('end', function () {
132180 deps_files [ pkgJson . mainEntry ] . provides = pkgJson . provides ;
133181 }
134182
183+ for ( let j = 0 ; j < aliasFields . length ; j ++ ) {
184+ const field = aliasFields [ j ] ;
185+ const fieldValue = pkgJson [ field ] ;
186+
187+ if ( fieldValue != null && typeof fieldValue === 'object' ) {
188+ for ( let key in fieldValue ) {
189+ const replacement = path . resolve ( pkgJson . basedir , fieldValue [ key ] ) ;
190+
191+ if ( deps_files [ replacement ] != null ) {
192+ deps_files [ replacement ] . provides = depProvides ( deps_files [ replacement ] . provides , path . resolve ( pkgJson . basedir , key ) ) ;
193+ }
194+ }
195+ }
196+ }
197+
198+
135199 deps_files [ pkgJson . file ] = { file : pkgJson . file } ;
136200 }
137201
@@ -146,25 +210,7 @@ md.on('end', function () {
146210 )
147211 ) {
148212 if ( dep . file . indexOf ( 'node_modules' ) !== - 1 ) {
149- let providedModule = dep . file
150- . substring ( dep . file . lastIndexOf ( 'node_modules' ) )
151- . replace ( / \\ / g, '/' )
152- . replace ( 'node_modules/' , '' ) ;
153-
154- dep . provides = dep . provides || [ ] ;
155- dep . provides . push (
156- providedModule ,
157- providedModule . replace ( / \. j s ( o n ) ? $ / , '' )
158- ) ;
159-
160- let indexReplaced = providedModule . replace ( / \/ i n d e x \. j s ( o n ) ? $ / , '' ) ;
161-
162- if (
163- / \/ i n d e x \. j s ( o n ) ? $ / . test ( providedModule ) &&
164- dep . provides . indexOf ( indexReplaced ) === - 1
165- ) {
166- dep . provides . push ( indexReplaced ) ;
167- }
213+ dep . provides = depProvides ( dep . provides , dep . file ) ;
168214 }
169215 }
170216
0 commit comments