npm-git-install
Version:
Clones and (re)installs packages from remote git repos
107 lines (85 loc) • 2.88 kB
JavaScript
;
var cli, cwd, discover, dry_guardian, fs, path, print_list, ref, reinstall_all, save, tap;
ref = require('.'), discover = ref.discover, reinstall_all = ref.reinstall_all, save = ref.save;
cli = require('commander');
path = require('path');
fs = require('fs');
cwd = process.cwd();
cli.version('0.0.0').description("A utility to properly install npm git dependencies.").option('-q --silent', 'suppress child processes output').option('-s --save', 'resolve URLs to sha and save it to package file').option('-c --package <path>', 'Optional package.json file location [package.json]', "package.json").option('-v --verbose', 'be verbose').option('-d --dry', 'just print what packages would be installed');
/*
tap : Function -> Identity
Executes a function on a value and returns value, ignoring whatever the function returns. Useful for debugging or performing other side effects.
*/
tap = function(fn) {
return function(value) {
fn(value);
return value;
};
};
/*
print_list : String -> Object -> [String] -> undefined
Prints formated list of strings with title. Useful for printing list of discovered packages.
*/
print_list = function(title, options) {
if (title == null) {
title = "List";
}
if (options == null) {
options = {};
}
return function(list) {
var i, item, len;
if (!(options.dry || options.verbose)) {
return;
}
console.log(title + ":");
for (i = 0, len = list.length; i < len; i++) {
item = list[i];
console.log(" " + item);
}
return console.log('');
};
};
/*
dry_guardian : Object -> -> undefined
Terminate the script if options.dry is truthy.
*/
dry_guardian = function(options) {
return function() {
if (!options.dry) {
return;
}
console.log('Finished dry run.');
console.log('');
return process.exit(0);
};
};
cli.command('install [packages...]').description('install git dependencies').action(function(packages, command) {
var options;
options = command.parent.opts();
console.log({
options: options,
packages: packages
});
if (packages.length === 0) {
packages = discover(options["package"]);
(print_list("Installing packages from " + options["package"], options))(packages);
} else {
(print_list("Installing following packages", options))(packages);
}
return Promise.resolve(packages).then(tap(dry_guardian(options))).then(reinstall_all(options)).then(tap(print_list("Following packages has been installed", options))).then(function(report) {
if (!options.save) {
return;
}
if (options.verbose) {
console.log("Updating " + options["package"]);
}
return save(options["package"], report);
})["catch"](function(error) {
console.error(error);
return process.exit(5);
});
});
cli.parse(process.argv);
//# sourceMappingURL=cli.js.map