@@ -17,63 +17,68 @@ export class DestCopy implements IBroccoliPlugin {
17
17
private dependencies : IDictionary < any > = null ;
18
18
private devDependencies : IDictionary < any > = null ;
19
19
20
- constructor ( private inputPath : string , private cachePath : string , private outputRoot : string , private projectDir : string ) {
20
+ constructor ( private inputPath : string ,
21
+ private cachePath : string ,
22
+ private outputRoot : string ,
23
+ private projectDir : string ,
24
+ private platform : string ,
25
+ private $fs : IFileSystem ,
26
+ private $projectFilesManager : IProjectFilesManager ) {
21
27
this . dependencies = Object . create ( null ) ;
22
28
this . devDependencies = this . getDevDependencies ( projectDir ) ;
23
29
}
24
30
25
- public rebuildChangedDirectories ( changedDirectories : string [ ] ) : void {
31
+ public rebuildChangedDirectories ( changedDirectories : string [ ] , platform : string ) : void {
26
32
_ . each ( changedDirectories , changedDirectoryAbsolutePath => {
27
33
let pathToPackageJson = path . join ( changedDirectoryAbsolutePath , "package.json" ) ;
28
- if ( fs . existsSync ( pathToPackageJson ) ) {
29
- let packageJsonFiles = [ pathToPackageJson ] ;
30
- let nodeModulesFolderPath = path . join ( changedDirectoryAbsolutePath , "node_modules" ) ;
31
- packageJsonFiles = packageJsonFiles . concat ( this . enumeratePackageJsonFilesSync ( nodeModulesFolderPath ) ) ;
34
+ let packageJsonFiles = fs . existsSync ( pathToPackageJson ) ? [ pathToPackageJson ] : [ ] ;
35
+ let nodeModulesFolderPath = path . join ( changedDirectoryAbsolutePath , "node_modules" ) ;
36
+ packageJsonFiles = packageJsonFiles . concat ( this . enumeratePackageJsonFilesSync ( nodeModulesFolderPath ) ) ;
37
+
38
+ _ . each ( packageJsonFiles , packageJsonFilePath => {
39
+ let fileContent = require ( packageJsonFilePath ) ;
40
+ let isPlugin = fileContent . nativescript ;
41
+
42
+ if ( ! this . devDependencies [ fileContent . name ] ) { // Don't flatten dev dependencies
43
+
44
+ let currentDependency = {
45
+ name : fileContent . name ,
46
+ version : fileContent . version ,
47
+ directory : path . dirname ( packageJsonFilePath ) ,
48
+ isPlugin : isPlugin
49
+ } ;
32
50
33
- _ . each ( packageJsonFiles , packageJsonFilePath => {
34
- let fileContent = require ( packageJsonFilePath ) ;
35
- let isPlugin = fileContent . nativescript ;
51
+ let addedDependency = this . dependencies [ currentDependency . name ] ;
52
+ if ( addedDependency ) {
53
+ if ( semver . gt ( currentDependency . version , addedDependency . version ) ) {
54
+ let currentDependencyMajorVersion = semver . major ( currentDependency . version ) ;
55
+ let addedDependencyMajorVersion = semver . major ( addedDependency . version ) ;
56
+
57
+ let message = `The depedency located at ${ addedDependency . directory } with version ${ addedDependency . version } will be replaced with dependency located at ${ currentDependency . directory } with version ${ currentDependency . version } ` ;
58
+ let logger = $injector . resolve ( "$logger" ) ;
59
+ currentDependencyMajorVersion === addedDependencyMajorVersion ? logger . out ( message ) : logger . warn ( message ) ;
36
60
37
- if ( ! this . devDependencies [ fileContent . name ] ) { // Don't flatten dev dependencies
38
-
39
- let currentDependency = {
40
- name : fileContent . name ,
41
- version : fileContent . version ,
42
- directory : path . dirname ( packageJsonFilePath ) ,
43
- isPlugin : isPlugin
44
- } ;
45
-
46
- let addedDependency = this . dependencies [ currentDependency . name ] ;
47
- if ( addedDependency ) {
48
- if ( semver . gt ( currentDependency . version , addedDependency . version ) ) {
49
- let currentDependencyMajorVersion = semver . major ( currentDependency . version ) ;
50
- let addedDependencyMajorVersion = semver . major ( addedDependency . version ) ;
51
-
52
- let message = `The depedency located at ${ addedDependency . directory } with version ${ addedDependency . version } will be replaced with dependency located at ${ currentDependency . directory } with version ${ currentDependency . version } ` ;
53
- let logger = $injector . resolve ( "$logger" ) ;
54
- currentDependencyMajorVersion === addedDependencyMajorVersion ? logger . out ( message ) : logger . warn ( message ) ;
55
-
56
- this . dependencies [ currentDependency . name ] = currentDependency ;
57
- }
58
- } else {
59
61
this . dependencies [ currentDependency . name ] = currentDependency ;
60
62
}
63
+ } else {
64
+ this . dependencies [ currentDependency . name ] = currentDependency ;
61
65
}
62
- } ) ;
63
- }
66
+ }
67
+ } ) ;
64
68
} ) ;
65
69
66
70
_ . each ( this . dependencies , dependency => {
67
71
shelljs . cp ( "-Rf" , dependency . directory , this . outputRoot ) ;
68
72
shelljs . rm ( "-rf" , path . join ( this . outputRoot , dependency . name , "node_modules" ) ) ;
69
73
if ( dependency . isPlugin ) {
74
+ this . $projectFilesManager . processPlatformSpecificFiles ( path . join ( this . outputRoot , dependency . name ) , platform ) . wait ( ) ;
70
75
shelljs . rm ( "-rf" , path . join ( this . outputRoot , dependency . name , "platforms" ) ) ;
71
76
}
72
77
} ) ;
73
78
}
74
79
75
80
public rebuild ( treeDiff : IDiffResult ) : void {
76
- this . rebuildChangedDirectories ( treeDiff . changedDirectories ) ;
81
+ this . rebuildChangedDirectories ( treeDiff . changedDirectories , "" ) ;
77
82
78
83
// Cache input tree
79
84
let projectFilePath = path . join ( this . projectDir , constants . PACKAGE_JSON_FILE_NAME ) ;
@@ -93,7 +98,10 @@ export class DestCopy implements IBroccoliPlugin {
93
98
if ( fs . existsSync ( nodeModulesDirectoryPath ) ) {
94
99
let contents = fs . readdirSync ( nodeModulesDirectoryPath ) ;
95
100
for ( let i = 0 ; i < contents . length ; ++ i ) {
96
- foundFiles . push ( path . join ( nodeModulesDirectoryPath , contents [ i ] , "package.json" ) ) ;
101
+ let packageJsonFilePath = path . join ( nodeModulesDirectoryPath , contents [ i ] , "package.json" ) ;
102
+ if ( fs . existsSync ( packageJsonFilePath ) ) {
103
+ foundFiles . push ( packageJsonFilePath ) ;
104
+ }
97
105
98
106
var directoryPath = path . join ( nodeModulesDirectoryPath , contents [ i ] , "node_modules" ) ;
99
107
if ( fs . existsSync ( directoryPath ) ) {
0 commit comments