@@ -17,63 +17,68 @@ export class DestCopy implements IBroccoliPlugin {
1717 private dependencies : IDictionary < any > = null ;
1818 private devDependencies : IDictionary < any > = null ;
1919
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 ) {
2127 this . dependencies = Object . create ( null ) ;
2228 this . devDependencies = this . getDevDependencies ( projectDir ) ;
2329 }
2430
25- public rebuildChangedDirectories ( changedDirectories : string [ ] ) : void {
31+ public rebuildChangedDirectories ( changedDirectories : string [ ] , platform : string ) : void {
2632 _ . each ( changedDirectories , changedDirectoryAbsolutePath => {
2733 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+ } ;
3250
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 ) ;
3660
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 {
5961 this . dependencies [ currentDependency . name ] = currentDependency ;
6062 }
63+ } else {
64+ this . dependencies [ currentDependency . name ] = currentDependency ;
6165 }
62- } ) ;
63- }
66+ }
67+ } ) ;
6468 } ) ;
6569
6670 _ . each ( this . dependencies , dependency => {
6771 shelljs . cp ( "-Rf" , dependency . directory , this . outputRoot ) ;
6872 shelljs . rm ( "-rf" , path . join ( this . outputRoot , dependency . name , "node_modules" ) ) ;
6973 if ( dependency . isPlugin ) {
74+ this . $projectFilesManager . processPlatformSpecificFiles ( path . join ( this . outputRoot , dependency . name ) , platform ) . wait ( ) ;
7075 shelljs . rm ( "-rf" , path . join ( this . outputRoot , dependency . name , "platforms" ) ) ;
7176 }
7277 } ) ;
7378 }
7479
7580 public rebuild ( treeDiff : IDiffResult ) : void {
76- this . rebuildChangedDirectories ( treeDiff . changedDirectories ) ;
81+ this . rebuildChangedDirectories ( treeDiff . changedDirectories , "" ) ;
7782
7883 // Cache input tree
7984 let projectFilePath = path . join ( this . projectDir , constants . PACKAGE_JSON_FILE_NAME ) ;
@@ -93,7 +98,10 @@ export class DestCopy implements IBroccoliPlugin {
9398 if ( fs . existsSync ( nodeModulesDirectoryPath ) ) {
9499 let contents = fs . readdirSync ( nodeModulesDirectoryPath ) ;
95100 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+ }
97105
98106 var directoryPath = path . join ( nodeModulesDirectoryPath , contents [ i ] , "node_modules" ) ;
99107 if ( fs . existsSync ( directoryPath ) ) {
0 commit comments