47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
// These packages come packaged with nodejs.
|
|
var fs = require('fs');
|
|
var url = require('url');
|
|
|
|
function versionSpecIsImpure(versionSpec) {
|
|
// Returns true if a version spec is impure.
|
|
return (versionSpec == "latest" || versionSpec == "unstable" ||
|
|
// file path references
|
|
versionSpec.substr(0, 2) == ".." ||
|
|
versionSpec.substr(0, 2) == "./" ||
|
|
versionSpec.substr(0, 2) == "~/" ||
|
|
versionSpec.substr(0, 1) == '/' ||
|
|
// github owner/repo references
|
|
/^[^/]+\/[^/]+(#.*)?$/.test(versionSpec) ||
|
|
// is a URL
|
|
url.parse(versionSpec).protocol);
|
|
}
|
|
|
|
// Load up the package object.
|
|
var packageObj = JSON.parse(fs.readFileSync('./package.json'));
|
|
|
|
// Purify dependencies.
|
|
var depTypes = ['dependencies', 'devDependencies', 'optionalDependencies'];
|
|
for (var i in depTypes) {
|
|
var depType = depTypes[i];
|
|
var depSet = packageObj[depType];
|
|
if (depSet !== undefined) {
|
|
for (var depName in depSet) {
|
|
if (versionSpecIsImpure(depSet[depName])) {
|
|
depSet[depName] = '*';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Remove peer dependencies */
|
|
if (process.env.removePeerDependencies && packageObj.peerDependencies) {
|
|
console.log("WARNING: removing the following peer dependencies:");
|
|
for (key in packageObj.peerDependencies) {
|
|
console.log(" " + key + ": " + packageObj.peerDependencies[key]);
|
|
}
|
|
delete packageObj.peerDependencies;
|
|
}
|
|
|
|
/* Write the fixed JSON file */
|
|
fs.writeFileSync("package.json", JSON.stringify(packageObj));
|