@@ -5,16 +5,17 @@ var path = require('path');
5
5
var Q = require ( 'q' ) ;
6
6
7
7
var CustomError = require ( './customError' ) ,
8
- fileTools = require ( './fileTools' ) ,
9
- log = require ( './log' ) ,
10
- manifestTools = require ( './manifestTools' ) ,
11
- platformTools = require ( './platformTools' ) ,
12
- projectTools = require ( './projectTools' ) ,
13
- utils = require ( './utils' ) ,
14
- constants = require ( './constants' ) ,
15
- validationConstants = require ( './constants' ) . validation ;
16
-
17
- function processPlatformTasks ( tasks ) {
8
+ fileTools = require ( './fileTools' ) ,
9
+ log = require ( './log' ) ,
10
+ manifestTools = require ( './manifestTools' ) ,
11
+ platformTools = require ( './platformTools' ) ,
12
+ projectTools = require ( './projectTools' ) ,
13
+ projectValidation = require ( './validations' ) . projectValidation ,
14
+ utils = require ( './utils' ) ,
15
+ constants = require ( './constants' ) ,
16
+ validationConstants = require ( './constants' ) . validation ;
17
+
18
+ function processPlatformTasks ( tasks ) {
18
19
return Q . allSettled ( tasks ) . then ( function ( results ) {
19
20
var result = results . reduce ( function ( success , result ) {
20
21
if ( result . state !== 'fulfilled' ) {
@@ -28,7 +29,7 @@ function processPlatformTasks (tasks) {
28
29
if ( ! result ) {
29
30
return Q . reject ( new Error ( 'One or more platforms could not be generated successfully.' ) ) ;
30
31
} else {
31
- return Q . resolve ( results . map ( function ( result ) {
32
+ return Q . resolve ( results . map ( function ( result ) {
32
33
return result . value ;
33
34
} ) ) ;
34
35
}
@@ -42,12 +43,17 @@ function validateManifest(w3cManifestInfo, platformModules, platforms) {
42
43
var maxLenSeverity = 10 ;
43
44
validationResults . forEach ( function ( result ) {
44
45
var severity = result . level . toUpperCase ( ) ;
45
- var validationMessage = 'Manifest validation ' + severity + new Array ( Math . max ( maxLenSeverity - severity . length + 1 , 0 ) ) . join ( ' ' ) + ' - ' + result . description + '(member: ' + result . member + ').' ;
46
+ var validationMessage = 'Manifest validation ' + severity + new Array ( Math . max ( maxLenSeverity - severity . length + 1 , 0 ) ) . join ( ' ' ) + ' - ' + result . description + '(member: ' + result . member + ').' ;
46
47
if ( result . level === validationConstants . levels . suggestion || result . level === validationConstants . levels . warning ) {
47
48
log . warn ( validationMessage , result . platform ) ;
48
49
} else if ( result . level === validationConstants . levels . error ) {
49
- log . error ( validationMessage , result . platform ) ;
50
- invalidManifest = true ;
50
+ // handle expected errors rather than deeming it as invalid
51
+ if ( projectValidation . isExpectedValidationError ( result ) && projectValidation . isExpectedCase ( result , w3cManifestInfo ) ) {
52
+ log . warn ( 'Manifest validation ' + "WARNING" + new Array ( Math . max ( maxLenSeverity - severity . length + 1 , 0 ) ) . join ( ' ' ) + ' - ' + result . description + '(member: ' + result . member + ').' , result . platform ) ;
53
+ } else {
54
+ log . error ( validationMessage , result . platform ) ;
55
+ invalidManifest = true ;
56
+ }
51
57
}
52
58
} ) ;
53
59
@@ -93,7 +99,7 @@ function copyAssets(assets, generatedAppDir, callback) {
93
99
return Q . resolve ( ) . nodeify ( callback ) ;
94
100
}
95
101
96
- function createApps ( w3cManifestInfo , rootDir , platforms , options , href , callback ) {
102
+ function createApps ( w3cManifestInfo , rootDir , platforms , options , href , callback ) {
97
103
// validate arguments
98
104
if ( arguments . length < 3 ) {
99
105
return Q . reject ( new Error ( 'One or more required arguments are missing.' ) ) . nodeify ( callback ) ;
@@ -122,47 +128,47 @@ function createApps (w3cManifestInfo, rootDir, platforms, options, href, callbac
122
128
// load the platform modules
123
129
return platformTools . loadPlatforms ( platforms ) ;
124
130
} )
125
- . then ( function ( platformModules ) {
126
- // validate the manifest
127
- return validateManifest ( w3cManifestInfo , platformModules , platforms ) . thenResolve ( platformModules ) ;
128
- } )
129
- . then ( function ( platformModules ) {
130
- // generate missing icons
131
- return generateImages ( w3cManifestInfo , options ) . thenResolve ( platformModules ) ;
132
- } )
133
- . then ( function ( platformModules ) {
134
- // create apps for each platform
135
- var tasks = platformModules . map ( function ( platform ) {
136
- if ( platform ) {
137
- log . debug ( 'Creating the \'' + platform . name + '\' app...' ) ;
138
- return Q . resolve ( generatedAppDir ) . then ( function ( generatedAppOutputDir ) {
139
- return fileTools . mkdirp ( generatedAppOutputDir ) . then ( function ( ) {
140
- var w3cManifestInfoCopy = JSON . parse ( JSON . stringify ( w3cManifestInfo ) ) ;
141
- return Q . ninvoke ( platform , 'create' , w3cManifestInfoCopy , generatedAppOutputDir , options , href ) . then ( function ( ) {
142
- log . info ( 'The ' + platform . name + ' app was created successfully!' ) ;
143
- } )
144
- . catch ( function ( err ) {
145
- return Q . reject ( new CustomError ( 'Failed to create the ' + platform . name + ' app.' , err ) ) ;
131
+ . then ( function ( platformModules ) {
132
+ // validate the manifest
133
+ return validateManifest ( w3cManifestInfo , platformModules , platforms ) . thenResolve ( platformModules ) ;
134
+ } )
135
+ . then ( function ( platformModules ) {
136
+ // generate missing icons
137
+ return generateImages ( w3cManifestInfo , options ) . thenResolve ( platformModules ) ;
138
+ } )
139
+ . then ( function ( platformModules ) {
140
+ // create apps for each platform
141
+ var tasks = platformModules . map ( function ( platform ) {
142
+ if ( platform ) {
143
+ log . debug ( 'Creating the \'' + platform . name + '\' app...' ) ;
144
+ return Q . resolve ( generatedAppDir ) . then ( function ( generatedAppOutputDir ) {
145
+ return fileTools . mkdirp ( generatedAppOutputDir ) . then ( function ( ) {
146
+ var w3cManifestInfoCopy = JSON . parse ( JSON . stringify ( w3cManifestInfo ) ) ;
147
+ return Q . ninvoke ( platform , 'create' , w3cManifestInfoCopy , generatedAppOutputDir , options , href ) . then ( function ( ) {
148
+ log . info ( 'The ' + platform . name + ' app was created successfully!' ) ;
149
+ } )
150
+ . catch ( function ( err ) {
151
+ return Q . reject ( new CustomError ( 'Failed to create the ' + platform . name + ' app.' , err ) ) ;
152
+ } ) ;
146
153
} ) ;
147
154
} ) ;
148
- } ) ;
149
- }
155
+ }
150
156
151
- return Q . resolve ( ) ;
152
- } ) ;
157
+ return Q . resolve ( ) ;
158
+ } ) ;
153
159
154
- return processPlatformTasks ( tasks ) ;
155
- } )
156
- . then ( function ( ) {
157
- // copy assets to the assets folder
158
- return copyAssets ( options . assets , generatedAppDir ) ;
159
- } )
160
- // return path to project folder
161
- . thenResolve ( generatedAppDir )
162
- . nodeify ( callback ) ;
160
+ return processPlatformTasks ( tasks ) ;
161
+ } )
162
+ . then ( function ( ) {
163
+ // copy assets to the assets folder
164
+ return copyAssets ( options . assets , generatedAppDir ) ;
165
+ } )
166
+ // return path to project folder
167
+ . thenResolve ( generatedAppDir )
168
+ . nodeify ( callback ) ;
163
169
}
164
170
165
- function packageApps ( platforms , dir , options , callback ) {
171
+ function packageApps ( platforms , dir , options , callback ) {
166
172
// validate arguments
167
173
if ( arguments . length < 2 ) {
168
174
return Q . reject ( new Error ( 'One or more required arguments are missing.' ) ) . nodeify ( callback ) ;
@@ -187,14 +193,14 @@ function packageApps (platforms, dir, options, callback) {
187
193
var tasks = platformModules . map ( function ( platform ) {
188
194
if ( platform ) {
189
195
log . debug ( 'Packaging the \'' + platform . name + '\' app...' ) ;
190
- return Q . resolve ( rootDir ) . then ( function ( rootOutputDir ) {
196
+ return Q . resolve ( rootDir ) . then ( function ( rootOutputDir ) {
191
197
return Q . ninvoke ( platform , 'package' , rootOutputDir , options ) . then ( function ( path ) {
192
198
log . info ( 'The ' + platform . name + ' app was packaged successfully!' ) ;
193
199
return Q . resolve ( path ) ;
194
200
} )
195
- . catch ( function ( err ) {
196
- return Q . reject ( new CustomError ( 'Failed to package the ' + platform . name + ' app.' , err ) ) ;
197
- } ) ;
201
+ . catch ( function ( err ) {
202
+ return Q . reject ( new CustomError ( 'Failed to package the ' + platform . name + ' app.' , err ) ) ;
203
+ } ) ;
198
204
} ) ;
199
205
} else {
200
206
return Q . resolve ( ) ;
@@ -204,10 +210,10 @@ function packageApps (platforms, dir, options, callback) {
204
210
return processPlatformTasks ( tasks ) ;
205
211
} ) ;
206
212
} )
207
- . nodeify ( callback ) ;
213
+ . nodeify ( callback ) ;
208
214
}
209
215
210
- function runApp ( platformId , dir , options , callback ) {
216
+ function runApp ( platformId , dir , options , callback ) {
211
217
// validate arguments
212
218
if ( arguments . length < 2 ) {
213
219
return Q . reject ( new Error ( 'One or more required arguments are missing.' ) ) . nodeify ( callback ) ;
@@ -232,7 +238,7 @@ function runApp (platformId, dir, options, callback) {
232
238
if ( platformModules && platformModules . length > 0 ) {
233
239
var platform = platformModules [ 0 ] ;
234
240
log . debug ( 'Launching the \'' + platform . name + '\' app ...' ) ;
235
- return Q . resolve ( rootDir ) . then ( function ( rootOutputDir ) {
241
+ return Q . resolve ( rootDir ) . then ( function ( rootOutputDir ) {
236
242
return Q . ninvoke ( platform , 'run' , rootOutputDir , options ) . catch ( function ( err ) {
237
243
return Q . reject ( new CustomError ( 'Failed to launch the ' + platform . name + ' app.' , err ) ) ;
238
244
} ) ;
@@ -242,10 +248,10 @@ function runApp (platformId, dir, options, callback) {
242
248
return Q . resolve ( ) ;
243
249
} ) ;
244
250
} )
245
- . nodeify ( callback ) ;
251
+ . nodeify ( callback ) ;
246
252
}
247
253
248
- function openApp ( platformId , dir , options , callback ) {
254
+ function openApp ( platformId , dir , options , callback ) {
249
255
// validate arguments
250
256
if ( arguments . length < 2 ) {
251
257
return Q . reject ( new Error ( 'One or more required arguments are missing.' ) ) . nodeify ( callback ) ;
@@ -270,7 +276,7 @@ function openApp (platformId, dir, options, callback) {
270
276
if ( platformModules && platformModules . length > 0 ) {
271
277
var platform = platformModules [ 0 ] ;
272
278
log . debug ( 'Opening the \'' + platform . name + '\' app...' ) ;
273
- return Q . resolve ( rootDir ) . then ( function ( rootOutputDir ) {
279
+ return Q . resolve ( rootDir ) . then ( function ( rootOutputDir ) {
274
280
return Q . ninvoke ( platform , 'open' , rootOutputDir , options ) . catch ( function ( err ) {
275
281
return Q . reject ( new CustomError ( 'Failed to open the ' + platform . name + ' app.' , err ) ) ;
276
282
} ) ;
@@ -280,7 +286,7 @@ function openApp (platformId, dir, options, callback) {
280
286
return Q . resolve ( ) ;
281
287
} ) ;
282
288
} )
283
- . nodeify ( callback ) ;
289
+ . nodeify ( callback ) ;
284
290
}
285
291
286
292
module . exports = {
0 commit comments