diff --git a/test/index.js b/test/index.js index c2d0fd9..3bcc041 100644 --- a/test/index.js +++ b/test/index.js @@ -12,7 +12,7 @@ var forOwn = mout.object.forOwn; var gray = colors.gray; var log = require('./lib/log'); -var JsonFile = require('./lib/JsonFile'); +var PackageOverrideFile = require('./lib/PackageOverrideFile'); var OverrideFile = require('./lib/OverrideFile'); var OverridesList = require('./lib/OverridesList'); @@ -138,9 +138,9 @@ forOwn(endpoints, function(Endpoint, endpointName){ if(program.args.length && program.args.indexOf(fileinfo.canonicalPackageName) === -1 ) return; - var overrideFile = new JsonFile(fileinfo.path); - if(overrideFile.hasErrors()) - return error( util.format('%s is not valid json file \n - %s', gray(fileinfo.path), overrideFile.errors().join('\n -')) ); + var packageOverrideFile = new PackageOverrideFile(fileinfo.path); + if(packageOverrideFile.hasErrors()) + 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 ); }); diff --git a/test/lib/PackageOverrideFile.js b/test/lib/PackageOverrideFile.js new file mode 100644 index 0000000..8235418 --- /dev/null +++ b/test/lib/PackageOverrideFile.js @@ -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); \ No newline at end of file