Merge pull request #300 from 2fd/validate_properties
Validate properties
This commit is contained in:
+7
-7
@@ -12,7 +12,7 @@ var forOwn = mout.object.forOwn;
|
|||||||
var gray = colors.gray;
|
var gray = colors.gray;
|
||||||
|
|
||||||
var log = require('./lib/log');
|
var log = require('./lib/log');
|
||||||
var JsonFile = require('./lib/JsonFile');
|
var PackageOverrideFile = require('./lib/PackageOverrideFile');
|
||||||
var OverrideFile = require('./lib/OverrideFile');
|
var OverrideFile = require('./lib/OverrideFile');
|
||||||
var OverridesList = require('./lib/OverridesList');
|
var OverridesList = require('./lib/OverridesList');
|
||||||
|
|
||||||
@@ -39,11 +39,12 @@ program
|
|||||||
*/
|
*/
|
||||||
var error = function(msg){
|
var error = function(msg){
|
||||||
|
|
||||||
|
|
||||||
if(!program.onlyErrors)
|
if(!program.onlyErrors)
|
||||||
log.error(msg);
|
log.error(msg);
|
||||||
|
|
||||||
if(Array.isArray(msg)) {
|
if(Array.isArray(msg)) {
|
||||||
error.summary.concat(msg);
|
error.summary = error.summary.concat(msg);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
error.summary.push(msg);
|
error.summary.push(msg);
|
||||||
@@ -80,7 +81,7 @@ var ok = function(msg){
|
|||||||
*/
|
*/
|
||||||
var overrideFile = new OverrideFile();
|
var overrideFile = new OverrideFile();
|
||||||
|
|
||||||
if(overrideFile.errors().length) {
|
if(overrideFile.hasErrors()) {
|
||||||
// json format errors
|
// json format errors
|
||||||
error(overrideFile.errors());
|
error(overrideFile.errors());
|
||||||
|
|
||||||
@@ -137,9 +138,9 @@ forOwn(endpoints, function(Endpoint, endpointName){
|
|||||||
if(program.args.length && program.args.indexOf(fileinfo.canonicalPackageName) === -1 )
|
if(program.args.length && program.args.indexOf(fileinfo.canonicalPackageName) === -1 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var overrideFile = new JsonFile(fileinfo.path);
|
var packageOverrideFile = new PackageOverrideFile(fileinfo.path);
|
||||||
if(overrideFile.errors().length)
|
if(packageOverrideFile.hasErrors())
|
||||||
return error( util.format('%s is not valid json file \n - %s', gray(fileinfo.path), overrideFile.errors().join('\n -')) );
|
return error( util.format('%s is not valid package override file \n - %s', gray(fileinfo.path), packageOverrideFile.errors().join('\n -')) );
|
||||||
|
|
||||||
ok( fileinfo.canonicalPackageName + '@' + fileinfo.packageVersion );
|
ok( fileinfo.canonicalPackageName + '@' + fileinfo.packageVersion );
|
||||||
});
|
});
|
||||||
@@ -150,7 +151,6 @@ forOwn(endpoints, function(Endpoint, endpointName){
|
|||||||
//
|
//
|
||||||
// SUMMARY LOG
|
// SUMMARY LOG
|
||||||
//
|
//
|
||||||
|
|
||||||
if(error.summary.length) {
|
if(error.summary.length) {
|
||||||
log.n()
|
log.n()
|
||||||
('Error summary ................')
|
('Error summary ................')
|
||||||
|
|||||||
@@ -44,6 +44,11 @@ JsonFile.prototype.errors = function(){
|
|||||||
return this._errors;
|
return this._errors;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
JsonFile.prototype.hasErrors = function(){
|
||||||
|
|
||||||
|
return this._errors.length > 0;
|
||||||
|
};
|
||||||
|
|
||||||
JsonFile.prototype.forEach = function(fn){
|
JsonFile.prototype.forEach = function(fn){
|
||||||
|
|
||||||
forOwn(this._json, fn, this);
|
forOwn(this._json, fn, this);
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var util = require('util');
|
||||||
|
var mout = require('mout');
|
||||||
|
var cyan = require('colors/safe').cyan;
|
||||||
|
var forEach = mout.array.forEach;
|
||||||
|
var isEmpty = mout.lang.isEmpty;
|
||||||
|
var deepClone = mout.lang.deepClone;
|
||||||
|
var objectUnset = mout.object.unset;
|
||||||
|
|
||||||
|
var JsonFile = require('./JsonFile');
|
||||||
|
var ALLOWED_PROPERTIES = [
|
||||||
|
'main',
|
||||||
|
'registry',
|
||||||
|
'dependencies',
|
||||||
|
'devDependencies',
|
||||||
|
'directories.lib',
|
||||||
|
'directories.dist',
|
||||||
|
'format',
|
||||||
|
'map',
|
||||||
|
'files',
|
||||||
|
'ignore',
|
||||||
|
'shim',
|
||||||
|
|
||||||
|
'jspmNodeConversion',
|
||||||
|
'browser'
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @constructor PackageOverrideFile
|
||||||
|
*/
|
||||||
|
var PackageOverrideFile = module.exports = function PackageOverrideFile(file){
|
||||||
|
|
||||||
|
if( !(this instanceof PackageOverrideFile) )
|
||||||
|
return new PackageOverrideFile();
|
||||||
|
|
||||||
|
JsonFile.call(this, file);
|
||||||
|
|
||||||
|
if(!this.hasErrors())
|
||||||
|
{
|
||||||
|
var notAllowedProperties = deepClone(this._json);
|
||||||
|
|
||||||
|
forEach(ALLOWED_PROPERTIES, function(allowedProperty){
|
||||||
|
|
||||||
|
objectUnset(notAllowedProperties, allowedProperty);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
if(isEmpty(notAllowedProperties.directories))
|
||||||
|
objectUnset(notAllowedProperties, 'directories');
|
||||||
|
|
||||||
|
if(!isEmpty(notAllowedProperties))
|
||||||
|
this.error( this._file + ' contains not allowed properties: \n\t' + cyan( JSON.stringify(notAllowedProperties) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
util.inherits(PackageOverrideFile, JsonFile);
|
||||||
Reference in New Issue
Block a user