Skip to content
This repository was archived by the owner on Jan 14, 2022. It is now read-only.

Commit f2bf4ae

Browse files
committed
validation functions, whitespace changes
1 parent c7f762c commit f2bf4ae

File tree

2 files changed

+96
-61
lines changed

2 files changed

+96
-61
lines changed

lib/projectBuilder.js

Lines changed: 67 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,17 @@ var path = require('path');
55
var Q = require('q');
66

77
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) {
1819
return Q.allSettled(tasks).then(function (results) {
1920
var result = results.reduce(function (success, result) {
2021
if (result.state !== 'fulfilled') {
@@ -28,7 +29,7 @@ function processPlatformTasks (tasks) {
2829
if (!result) {
2930
return Q.reject(new Error('One or more platforms could not be generated successfully.'));
3031
} else {
31-
return Q.resolve(results.map(function(result) {
32+
return Q.resolve(results.map(function (result) {
3233
return result.value;
3334
}));
3435
}
@@ -42,9 +43,16 @@ function validateManifest(w3cManifestInfo, platformModules, platforms) {
4243
var maxLenSeverity = 10;
4344
validationResults.forEach(function (result) {
4445
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 + ').';
4647
if (result.level === validationConstants.levels.suggestion || result.level === validationConstants.levels.warning) {
4748
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+
}
4856
} else if (result.level === validationConstants.levels.error) {
4957
log.error(validationMessage, result.platform);
5058
invalidManifest = true;
@@ -93,7 +101,7 @@ function copyAssets(assets, generatedAppDir, callback) {
93101
return Q.resolve().nodeify(callback);
94102
}
95103

96-
function createApps (w3cManifestInfo, rootDir, platforms, options, href, callback) {
104+
function createApps(w3cManifestInfo, rootDir, platforms, options, href, callback) {
97105
// validate arguments
98106
if (arguments.length < 3) {
99107
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
122130
// load the platform modules
123131
return platformTools.loadPlatforms(platforms);
124132
})
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+
});
146155
});
147156
});
148-
});
149-
}
157+
}
150158

151-
return Q.resolve();
152-
});
159+
return Q.resolve();
160+
});
153161

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);
163171
}
164172

165-
function packageApps (platforms, dir, options, callback) {
173+
function packageApps(platforms, dir, options, callback) {
166174
// validate arguments
167175
if (arguments.length < 2) {
168176
return Q.reject(new Error('One or more required arguments are missing.')).nodeify(callback);
@@ -187,14 +195,14 @@ function packageApps (platforms, dir, options, callback) {
187195
var tasks = platformModules.map(function (platform) {
188196
if (platform) {
189197
log.debug('Packaging the \'' + platform.name + '\' app...');
190-
return Q.resolve(rootDir).then(function(rootOutputDir) {
198+
return Q.resolve(rootDir).then(function (rootOutputDir) {
191199
return Q.ninvoke(platform, 'package', rootOutputDir, options).then(function (path) {
192200
log.info('The ' + platform.name + ' app was packaged successfully!');
193201
return Q.resolve(path);
194202
})
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+
});
198206
});
199207
} else {
200208
return Q.resolve();
@@ -204,10 +212,10 @@ function packageApps (platforms, dir, options, callback) {
204212
return processPlatformTasks(tasks);
205213
});
206214
})
207-
.nodeify(callback);
215+
.nodeify(callback);
208216
}
209217

210-
function runApp (platformId, dir, options, callback) {
218+
function runApp(platformId, dir, options, callback) {
211219
// validate arguments
212220
if (arguments.length < 2) {
213221
return Q.reject(new Error('One or more required arguments are missing.')).nodeify(callback);
@@ -232,7 +240,7 @@ function runApp (platformId, dir, options, callback) {
232240
if (platformModules && platformModules.length > 0) {
233241
var platform = platformModules[0];
234242
log.debug('Launching the \'' + platform.name + '\' app ...');
235-
return Q.resolve(rootDir).then(function(rootOutputDir) {
243+
return Q.resolve(rootDir).then(function (rootOutputDir) {
236244
return Q.ninvoke(platform, 'run', rootOutputDir, options).catch(function (err) {
237245
return Q.reject(new CustomError('Failed to launch the ' + platform.name + ' app.', err));
238246
});
@@ -242,10 +250,10 @@ function runApp (platformId, dir, options, callback) {
242250
return Q.resolve();
243251
});
244252
})
245-
.nodeify(callback);
253+
.nodeify(callback);
246254
}
247255

248-
function openApp (platformId, dir, options, callback) {
256+
function openApp(platformId, dir, options, callback) {
249257
// validate arguments
250258
if (arguments.length < 2) {
251259
return Q.reject(new Error('One or more required arguments are missing.')).nodeify(callback);
@@ -270,7 +278,7 @@ function openApp (platformId, dir, options, callback) {
270278
if (platformModules && platformModules.length > 0) {
271279
var platform = platformModules[0];
272280
log.debug('Opening the \'' + platform.name + '\' app...');
273-
return Q.resolve(rootDir).then(function(rootOutputDir) {
281+
return Q.resolve(rootDir).then(function (rootOutputDir) {
274282
return Q.ninvoke(platform, 'open', rootOutputDir, options).catch(function (err) {
275283
return Q.reject(new CustomError('Failed to open the ' + platform.name + ' app.', err));
276284
});
@@ -280,7 +288,7 @@ function openApp (platformId, dir, options, callback) {
280288
return Q.resolve();
281289
});
282290
})
283-
.nodeify(callback);
291+
.nodeify(callback);
284292
}
285293

286294
module.exports = {

lib/validations.js

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

33
var platformTools = require('./platformTools'),
4-
manifestTools = require('./manifestTools');
4+
manifestTools = require('./manifestTools');
55

66
function platformsValid(platforms) {
77
var availablePlatforms = platformTools.listPlatforms();
@@ -35,9 +35,36 @@ function manifestFormatValid(format) {
3535
return availableFormats.indexOf(format.toLowerCase()) >= 0;
3636
}
3737

38+
function isExpectedValidationError(errorResult) {
39+
const checkForPurposeList = errorResult.member.contains("icons") && errorResult.member.contains("purpose")
40+
41+
return checkForPurposeList
42+
}
43+
44+
function isExpectedCase(errorResult, w3cManifestInfo) {
45+
const errorParams = errorResult.split('/').slice(1) //example: /icons/0/purpose -> ['icons', '0', 'purpose']
46+
const isIconsPurpose = errorResult.member.contains("icons") && errorResult.member.contains("purpose")
47+
48+
if (isIconsPurpose) {
49+
const [icons, index, purpose] = errorParams
50+
51+
return w3cManifestInfo[icons][index][purpose].split(" ").filter(entry => {
52+
return (entry === "any" || entry === "maskable" || entry === "monochrome");
53+
}).length > 0
54+
}
55+
56+
return false;
57+
}
58+
59+
60+
3861
module.exports = {
3962
platformsValid: platformsValid,
4063
platformToRunValid: platformToRunValid,
4164
logLevelValid: logLevelValid,
42-
manifestFormatValid: manifestFormatValid
65+
manifestFormatValid: manifestFormatValid,
66+
projectValidation: {
67+
isExpectedValidationError: isExpectedValidationError,
68+
isExpectedCase: isExpectedCase,
69+
}
4370
};

0 commit comments

Comments
 (0)