@@ -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,9 +43,16 @@ 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 ) ;
49
+ } else if ( result . level === validationConstants . levels . error && projectValidation . isExpectedValidationError ( result ) ) {
50
+ if ( projectValidation . isExpectedCase ( result , w3cManifestInfo ) ) {
51
+ log . warning ( validationMessage , result . platform ) ;
52
+ } else {
53
+ log . error ( validationMessage , result . platform ) ;
54
+ invalidManifest = true ;
55
+ }
48
56
} else if ( result . level === validationConstants . levels . error ) {
49
57
log . error ( validationMessage , result . platform ) ;
50
58
invalidManifest = true ;
@@ -93,7 +101,7 @@ function copyAssets(assets, generatedAppDir, callback) {
93
101
return Q . resolve ( ) . nodeify ( callback ) ;
94
102
}
95
103
96
- function createApps ( w3cManifestInfo , rootDir , platforms , options , href , callback ) {
104
+ function createApps ( w3cManifestInfo , rootDir , platforms , options , href , callback ) {
97
105
// validate arguments
98
106
if ( arguments . length < 3 ) {
99
107
return Q . reject ( new Error ( 'One or more required arguments are missing.' ) ) . nodeify ( callback ) ;
@@ -122,47 +130,47 @@ function createApps (w3cManifestInfo, rootDir, platforms, options, href, callbac
122
130
// load the platform modules
123
131
return platformTools . loadPlatforms ( platforms ) ;
124
132
} )
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 ) ) ;
133
+ . then ( function ( platformModules ) {
134
+ // validate the manifest
135
+ return validateManifest ( w3cManifestInfo , platformModules , platforms ) . thenResolve ( platformModules ) ;
136
+ } )
137
+ . then ( function ( platformModules ) {
138
+ // generate missing icons
139
+ return generateImages ( w3cManifestInfo , options ) . thenResolve ( platformModules ) ;
140
+ } )
141
+ . then ( function ( platformModules ) {
142
+ // create apps for each platform
143
+ var tasks = platformModules . map ( function ( platform ) {
144
+ if ( platform ) {
145
+ log . debug ( 'Creating the \'' + platform . name + '\' app...' ) ;
146
+ return Q . resolve ( generatedAppDir ) . then ( function ( generatedAppOutputDir ) {
147
+ return fileTools . mkdirp ( generatedAppOutputDir ) . then ( function ( ) {
148
+ var w3cManifestInfoCopy = JSON . parse ( JSON . stringify ( w3cManifestInfo ) ) ;
149
+ return Q . ninvoke ( platform , 'create' , w3cManifestInfoCopy , generatedAppOutputDir , options , href ) . then ( function ( ) {
150
+ log . info ( 'The ' + platform . name + ' app was created successfully!' ) ;
151
+ } )
152
+ . catch ( function ( err ) {
153
+ return Q . reject ( new CustomError ( 'Failed to create the ' + platform . name + ' app.' , err ) ) ;
154
+ } ) ;
146
155
} ) ;
147
156
} ) ;
148
- } ) ;
149
- }
157
+ }
150
158
151
- return Q . resolve ( ) ;
152
- } ) ;
159
+ return Q . resolve ( ) ;
160
+ } ) ;
153
161
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 ) ;
162
+ return processPlatformTasks ( tasks ) ;
163
+ } )
164
+ . then ( function ( ) {
165
+ // copy assets to the assets folder
166
+ return copyAssets ( options . assets , generatedAppDir ) ;
167
+ } )
168
+ // return path to project folder
169
+ . thenResolve ( generatedAppDir )
170
+ . nodeify ( callback ) ;
163
171
}
164
172
165
- function packageApps ( platforms , dir , options , callback ) {
173
+ function packageApps ( platforms , dir , options , callback ) {
166
174
// validate arguments
167
175
if ( arguments . length < 2 ) {
168
176
return Q . reject ( new Error ( 'One or more required arguments are missing.' ) ) . nodeify ( callback ) ;
@@ -187,14 +195,14 @@ function packageApps (platforms, dir, options, callback) {
187
195
var tasks = platformModules . map ( function ( platform ) {
188
196
if ( platform ) {
189
197
log . debug ( 'Packaging the \'' + platform . name + '\' app...' ) ;
190
- return Q . resolve ( rootDir ) . then ( function ( rootOutputDir ) {
198
+ return Q . resolve ( rootDir ) . then ( function ( rootOutputDir ) {
191
199
return Q . ninvoke ( platform , 'package' , rootOutputDir , options ) . then ( function ( path ) {
192
200
log . info ( 'The ' + platform . name + ' app was packaged successfully!' ) ;
193
201
return Q . resolve ( path ) ;
194
202
} )
195
- . catch ( function ( err ) {
196
- return Q . reject ( new CustomError ( 'Failed to package the ' + platform . name + ' app.' , err ) ) ;
197
- } ) ;
203
+ . catch ( function ( err ) {
204
+ return Q . reject ( new CustomError ( 'Failed to package the ' + platform . name + ' app.' , err ) ) ;
205
+ } ) ;
198
206
} ) ;
199
207
} else {
200
208
return Q . resolve ( ) ;
@@ -204,10 +212,10 @@ function packageApps (platforms, dir, options, callback) {
204
212
return processPlatformTasks ( tasks ) ;
205
213
} ) ;
206
214
} )
207
- . nodeify ( callback ) ;
215
+ . nodeify ( callback ) ;
208
216
}
209
217
210
- function runApp ( platformId , dir , options , callback ) {
218
+ function runApp ( platformId , dir , options , callback ) {
211
219
// validate arguments
212
220
if ( arguments . length < 2 ) {
213
221
return Q . reject ( new Error ( 'One or more required arguments are missing.' ) ) . nodeify ( callback ) ;
@@ -232,7 +240,7 @@ function runApp (platformId, dir, options, callback) {
232
240
if ( platformModules && platformModules . length > 0 ) {
233
241
var platform = platformModules [ 0 ] ;
234
242
log . debug ( 'Launching the \'' + platform . name + '\' app ...' ) ;
235
- return Q . resolve ( rootDir ) . then ( function ( rootOutputDir ) {
243
+ return Q . resolve ( rootDir ) . then ( function ( rootOutputDir ) {
236
244
return Q . ninvoke ( platform , 'run' , rootOutputDir , options ) . catch ( function ( err ) {
237
245
return Q . reject ( new CustomError ( 'Failed to launch the ' + platform . name + ' app.' , err ) ) ;
238
246
} ) ;
@@ -242,10 +250,10 @@ function runApp (platformId, dir, options, callback) {
242
250
return Q . resolve ( ) ;
243
251
} ) ;
244
252
} )
245
- . nodeify ( callback ) ;
253
+ . nodeify ( callback ) ;
246
254
}
247
255
248
- function openApp ( platformId , dir , options , callback ) {
256
+ function openApp ( platformId , dir , options , callback ) {
249
257
// validate arguments
250
258
if ( arguments . length < 2 ) {
251
259
return Q . reject ( new Error ( 'One or more required arguments are missing.' ) ) . nodeify ( callback ) ;
@@ -270,7 +278,7 @@ function openApp (platformId, dir, options, callback) {
270
278
if ( platformModules && platformModules . length > 0 ) {
271
279
var platform = platformModules [ 0 ] ;
272
280
log . debug ( 'Opening the \'' + platform . name + '\' app...' ) ;
273
- return Q . resolve ( rootDir ) . then ( function ( rootOutputDir ) {
281
+ return Q . resolve ( rootDir ) . then ( function ( rootOutputDir ) {
274
282
return Q . ninvoke ( platform , 'open' , rootOutputDir , options ) . catch ( function ( err ) {
275
283
return Q . reject ( new CustomError ( 'Failed to open the ' + platform . name + ' app.' , err ) ) ;
276
284
} ) ;
@@ -280,7 +288,7 @@ function openApp (platformId, dir, options, callback) {
280
288
return Q . resolve ( ) ;
281
289
} ) ;
282
290
} )
283
- . nodeify ( callback ) ;
291
+ . nodeify ( callback ) ;
284
292
}
285
293
286
294
module . exports = {
0 commit comments