Validate dependencies to avoid specific duplicated ones

pull/9052/head
Raul Ochoa 8 years ago
parent b231d968e8
commit 6f719c2bae

@ -1,9 +1,23 @@
var _ = require('underscore');
var timer = require("grunt-timer");
var jasmineCfg = require('./lib/build/tasks/jasmine.js');
var duplicatedDependencies = require('./lib/build/tasks/shrinkwrap-duplicated-dependencies.js');
var REQUIRED_NPM_VERSION = /2.14.[0-9]+/;
var REQUIRED_NODE_VERSION = /0.10.[0-9]+/;
var SHRINKWRAP_MODULES_TO_VALIDATE = [
'backbone',
'camshaft-reference',
'carto',
'cartodb.js',
'cartocolor',
'd3',
'jquery',
'leaflet',
'perfect-scrollbar',
'torque.js',
'turbo-carto'
];
/**
* CartoDB UI assets generation
@ -43,6 +57,15 @@
}
});
var duplicatedModules = duplicatedDependencies(require('./npm-shrinkwrap.json'), SHRINKWRAP_MODULES_TO_VALIDATE);
if (duplicatedModules.length > 0) {
grunt.log.fail("############### /!\\ CAUTION /!\\ #################");
grunt.log.fail("Duplicated dependencies found in npm-shrinkwrap.json file.");
grunt.log.fail(JSON.stringify(duplicatedModules, null, 4));
grunt.log.fail("#################################################");
process.exit(1);
}
var ROOT_ASSETS_DIR = './public/assets/';
var ASSETS_DIR = './public/assets/<%= pkg.version %>';

@ -0,0 +1,49 @@
function alldeps (mod, deps, name, parentVersion) {
name = name || mod.name;
return Object.keys(mod.dependencies).reduce(function (all, dependency) {
if (!all.hasOwnProperty(dependency)) {
all[dependency] = {};
}
var version = mod.dependencies[dependency].version;
var resolved = mod.dependencies[dependency].resolved;
if (!all[dependency].hasOwnProperty(version)) {
all[dependency][resolved] = {};
}
all[dependency][resolved][name] = parentVersion || version;
if (mod.dependencies[dependency].dependencies) {
alldeps(mod.dependencies[dependency], all, dependency, version);
}
return all;
}, deps || {});
}
/**
* Checks all modules dependencies versions within a npm-shrinkwrap to not be
* duplicated from different parent dependencies.
*
* For instance if there are a couple of dependencies using a different version
* of backbone it will return backbone with its parent dependencies.
*/
function duplicated (shrinkwrap, modulesToValidate) {
shrinkwrap = shrinkwrap || require('./npm-shrinkwrap.json');
var all = alldeps(shrinkwrap);
modulesToValidate = modulesToValidate || Object.keys(all);
return modulesToValidate.reduce(function (duplicatedMods, mod) {
var modVersions = Object.keys(all[mod]);
if (modVersions.length > 1) {
var invalidMod = { name: mod, versions: [] };
modVersions.forEach(function (modVersion) {
invalidMod.versions.push({version: modVersion, from: all[mod][modVersion]});
});
duplicatedMods.push(invalidMod);
}
return duplicatedMods;
}, []);
}
module.exports = duplicated;
Loading…
Cancel
Save