1
1
'use strict' ;
2
2
3
- function installNodeModule ( exec , modules , callback ) {
3
+ // installs the node modules via npm install one at a time
4
+ // @return {callback(error) }
5
+
6
+ function installNodeModules ( exec , modules , callback ) {
7
+ // base case
4
8
if ( modules . length <= 0 ) {
5
9
return callback ( false ) ;
6
10
}
7
11
12
+ // install one at a time
8
13
var module = modules . pop ( ) ;
9
- var install = 'npm install --prefix ./plugins/io.branch.sdk -D ' + module ;
10
-
11
14
console . log ( 'Installing "' + module + '"' ) ;
15
+
16
+ var install = 'npm install --prefix ./plugins/io.branch.sdk -D ' + module ;
12
17
exec ( install , function ( err , stdout , stderr ) {
18
+ // handle error
13
19
if ( err ) {
14
20
console . error ( 'Failed to install Branch Dependency: "' + module + '"' ) ;
15
21
return callback ( true ) ;
16
- } else {
17
- installNodeModule ( exec , modules , callback ) ;
18
22
}
23
+ // next module
24
+ else {
25
+ installNodeModules ( exec , modules , callback ) ;
26
+ }
19
27
} ) ;
20
28
}
21
29
22
- function getUninstalledNodeModules ( dependencies ) {
30
+ // checks to see which node modules need to be installed
31
+ // @return {[string] } of node modules from package.json.dependencies
32
+ function getNodeModulesToInstall ( dependencies ) {
23
33
var modules = [ ] ;
24
34
for ( var module in dependencies ) {
25
35
if ( dependencies . hasOwnProperty ( module ) ) {
@@ -33,6 +43,8 @@ function getUninstalledNodeModules(dependencies) {
33
43
return modules ;
34
44
}
35
45
46
+ // if the Branch SDK package has already been installed
47
+ // @return {boolean } based on .installed file is found
36
48
function getPackageInstalled ( filesave , installFlagLocation ) {
37
49
try {
38
50
var exists = filesave . readFileSync ( installFlagLocation ) ;
@@ -42,12 +54,16 @@ function getPackageInstalled(filesave, installFlagLocation) {
42
54
}
43
55
}
44
56
57
+ // set that the Branch SDK package has been installed
58
+ // @return {void } based on .installed file is created
45
59
function setPackageInstalled ( filesave , installFlagLocation ) {
46
60
filesave . closeSync ( filesave . openSync ( installFlagLocation , 'w' ) ) ;
47
61
}
48
62
49
- // hook's entry point
63
+ // hooks entry point
64
+ // @return {void } based on async npm install completion
50
65
module . exports = function ( context ) {
66
+ // properties
51
67
var q = context . requireCordovaModule ( 'q' ) ;
52
68
var async = new q . defer ( ) ;
53
69
var filesave = require ( 'fs' ) ;
@@ -57,19 +73,26 @@ module.exports = function (context) {
57
73
var installFlagLocation = path . join ( context . opts . projectRoot , 'plugins' , context . opts . plugin . id , installFlagName ) ;
58
74
var dependencies = require ( path . join ( context . opts . projectRoot , 'plugins' , context . opts . plugin . id , 'package.json' ) ) . dependencies ;
59
75
76
+ // only run once
60
77
if ( getPackageInstalled ( filesave , installFlagLocation ) ) {
61
78
return ;
62
79
}
63
80
64
- var modules = getUninstalledNodeModules ( dependencies ) ;
65
- installNodeModule ( exec , modules , function ( err ) {
81
+ // install node modules
82
+ var modules = getNodeModulesToInstall ( dependencies ) ;
83
+ installNodeModules ( exec , modules , function ( err ) {
84
+ // handle error
66
85
if ( err ) {
67
86
console . error ( 'Failed to install the Branch SDK' ) ;
68
- } else {
69
- setPackageInstalled ( filesave , installFlagLocation ) ;
70
87
}
88
+ // only run once
89
+ else {
90
+ setPackageInstalled ( filesave , installFlagLocation ) ;
91
+ }
92
+ // async complete
71
93
async . resolve ( ) ;
72
94
} ) ;
73
95
96
+ // wait until callbacks from the all the npm install complete
74
97
return async . promise ;
75
98
} ;
0 commit comments