@@ -4,6 +4,7 @@ import * as path from "path";
4
4
import * as shelljs from "shelljs" ;
5
5
import Future = require( "fibers/future" ) ;
6
6
import { TnsModulesCopy , NpmPluginPrepare } from "./node-modules-dest-copy" ;
7
+ import { NodeModulesDependenciesBuilder } from "./node-modules-dependencies-builder" ;
7
8
import * as fiberBootstrap from "../../common/fiber-bootstrap" ;
8
9
import { sleep } from "../../../lib/common/helpers" ;
9
10
@@ -134,12 +135,8 @@ export class NodeModulesBuilder implements INodeModulesBuilder {
134
135
lastModifiedTime = null ;
135
136
}
136
137
137
- let productionDependencies = this . getProductionDependencies ( this . $projectData . projectDir ) ;
138
-
139
- // console.log(productionDependencies);
140
-
141
- // TODO: Pip3r4o - result is not used currently
142
- // let nodeModules = this.getChangedNodeModules(absoluteOutputPath, platform, lastModifiedTime).wait();
138
+ let dependenciesBuilder = this . $injector . resolve ( NodeModulesDependenciesBuilder , { } ) ;
139
+ let productionDependencies = dependenciesBuilder . getProductionDependencies ( this . $projectData . projectDir ) ;
143
140
144
141
if ( ! this . $options . bundle ) {
145
142
const tnsModulesCopy = this . $injector . resolve ( TnsModulesCopy , {
@@ -155,140 +152,6 @@ export class NodeModulesBuilder implements INodeModulesBuilder {
155
152
} ) . future < void > ( ) ( ) ;
156
153
}
157
154
158
- public getProductionDependencies ( projectPath : string ) {
159
- var deps : any = [ ] ;
160
- var seen : any = { } ;
161
-
162
- var pJson = path . join ( projectPath , "package.json" ) ;
163
- var nodeModulesDir = path . join ( projectPath , "node_modules" ) ;
164
-
165
- var content = require ( pJson ) ;
166
-
167
- Object . keys ( content . dependencies ) . forEach ( ( key ) => {
168
- var depth = 0 ;
169
- var directory = path . join ( nodeModulesDir , key ) ;
170
-
171
- // find and traverse child with name `key`, parent's directory -> dep.directory
172
- traverseChild ( key , directory , depth ) ;
173
- } ) ;
174
-
175
- return filterUniqueDirectories ( deps ) ;
176
-
177
- function traverseChild ( name : string , currentModulePath : string , depth : number ) {
178
- // check if key appears in a scoped module dependency
179
- var isScoped = name . indexOf ( '@' ) === 0 ;
180
-
181
- if ( ! isScoped ) {
182
- // Check if child has been extracted in the parent's node modules, AND THEN in `node_modules`
183
- // Slower, but prevents copying wrong versions if multiple of the same module are installed
184
- // Will also prevent copying project's devDependency's version if current module depends on another version
185
- var modulePath = path . join ( currentModulePath , "node_modules" , name ) ; // /node_modules/parent/node_modules/<package>
186
- var exists = ensureModuleExists ( modulePath ) ;
187
-
188
- if ( exists ) {
189
- var dep = addDependency ( deps , name , modulePath , depth + 1 ) ;
190
-
191
- traverseModule ( modulePath , depth + 1 , dep ) ;
192
- } else {
193
- modulePath = path . join ( nodeModulesDir , name ) ; // /node_modules/<package>
194
- exists = ensureModuleExists ( modulePath ) ;
195
-
196
- if ( ! exists ) {
197
- return ;
198
- }
199
-
200
- var dep = addDependency ( deps , name , modulePath , 0 ) ;
201
-
202
- traverseModule ( modulePath , 0 , dep ) ;
203
- }
204
-
205
- }
206
- // module is scoped
207
- else {
208
- var scopeSeparatorIndex = name . indexOf ( '/' ) ;
209
- var scope = name . substring ( 0 , scopeSeparatorIndex ) ;
210
- var moduleName = name . substring ( scopeSeparatorIndex + 1 , name . length ) ;
211
- var scopedModulePath = path . join ( nodeModulesDir , scope , moduleName ) ;
212
-
213
- var exists = ensureModuleExists ( scopedModulePath ) ;
214
-
215
- if ( exists ) {
216
- var dep = addDependency ( deps , name , scopedModulePath , 0 ) ;
217
- traverseModule ( scopedModulePath , depth , dep ) ;
218
- }
219
- else {
220
- scopedModulePath = path . join ( currentModulePath , "node_modules" , scope , moduleName ) ;
221
-
222
- exists = ensureModuleExists ( scopedModulePath ) ;
223
-
224
- if ( ! exists ) {
225
- return ;
226
- }
227
-
228
- var dep = addDependency ( deps , name , scopedModulePath , depth + 1 ) ;
229
- traverseModule ( scopedModulePath , depth + 1 , dep ) ;
230
- }
231
- }
232
-
233
- function traverseModule ( modulePath : string , depth : number , currentDependency : any ) {
234
- var packageJsonPath = path . join ( modulePath , 'package.json' ) ;
235
- var packageJsonExists = fs . lstatSync ( packageJsonPath ) . isFile ( ) ;
236
-
237
- if ( packageJsonExists ) {
238
- var packageJsonContents = require ( packageJsonPath ) ;
239
-
240
- if ( ! ! packageJsonContents . nativescript ) {
241
- // add `nativescript` property, necessary for resolving plugins
242
- currentDependency . nativescript = packageJsonContents . nativescript ;
243
- }
244
-
245
- if ( packageJsonContents . dependencies ) {
246
- Object . keys ( packageJsonContents . dependencies ) . forEach ( ( key ) => {
247
-
248
- traverseChild ( key , modulePath , depth ) ;
249
- } ) ;
250
- }
251
- }
252
- }
253
-
254
- function addDependency ( deps : any [ ] , name : string , directory : string , depth : number ) {
255
- var dep : any = { } ;
256
- dep . name = name ;
257
- dep . directory = directory ;
258
- dep . depth = depth ;
259
-
260
- deps . push ( dep ) ;
261
-
262
- return dep ;
263
- }
264
-
265
- function ensureModuleExists ( modulePath : string ) : boolean {
266
- try {
267
- var exists = fs . lstatSync ( modulePath ) ;
268
- return exists . isDirectory ( ) ;
269
- } catch ( e ) {
270
- return false ;
271
- }
272
- }
273
- }
274
-
275
- function filterUniqueDirectories ( dependencies : any ) {
276
- var unique : any = [ ] ;
277
- var distinct : any = [ ] ;
278
- for ( var i in dependencies ) {
279
- var dep = dependencies [ i ] ;
280
- if ( distinct . indexOf ( dep . directory ) > - 1 ) {
281
- continue ;
282
- }
283
-
284
- distinct . push ( dep . directory ) ;
285
- unique . push ( dep ) ;
286
- }
287
-
288
- return unique ;
289
- }
290
- }
291
-
292
155
public cleanNodeModules ( absoluteOutputPath : string , platform : string ) : void {
293
156
shelljs . rm ( "-rf" , absoluteOutputPath ) ;
294
157
}
0 commit comments