-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbin.js
More file actions
executable file
·72 lines (58 loc) · 2.23 KB
/
bin.js
File metadata and controls
executable file
·72 lines (58 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#! /usr/bin/env node
var diaper = require('./index.js');
var path = require('path');
var fs = require('fs');
var R = require('ramda');
var async = require('async');
var grabber = require('./lib/grabber');
function onErr (err) {
console.error('ERR:', err.stack || err.message || err);
throw err;
}
function usage(exitCode) {
var logger = exitCode ? console.error.bind(console) : console.log.bind(console);
logger('Usage: npm-diaper [-v] (with no args in a package dir)');
logger('Usage: npm-diaper [-v] <name>');
logger('Usage: npm-diaper [-v] <name>@<tag>');
logger('Usage: npm-diaper [-v] <name>@<version>');
logger('Usage: npm-diaper [-v] <name>@<version range>');
logger('');
logger('Prints out JSON of node modules that would be installed if npm install was run with given args.');
logger('Uses current working directory if no path is specified.');
logger('');
logger('Optional arguments:');
logger(helpOpts.join(', ') + '\tshow this message and exit');
logger(versionOpts.join(', ') + '\tprint out the resolved version of root module');
process.exit(exitCode);
}
function metaFromPackage(args, next) {
var packagePath = path.join(process.cwd(), 'package.json');
if (!fs.existsSync(packagePath)) {
return next(new Error(param + ' does not contain package.json'));
}
next(null, require(packagePath));
}
function metaFromGrabber(args, next) {
var pair = R.head(args).split('@');
grabber.getVersion(pair[0], pair[1] || 'latest', next);
}
function getVersion(meta, next) {
next(null, meta.version);
}
var doesOverlap = function (left, right) {
return !R.isEmpty(R.intersection(left, right));
}
var args = R.drop(2, process.argv);
var helpOpts = ['--help', '-h', '-?'];
var versionOpts = ['--version', '-v'];
if (args.length > 2) usage(1);
if (doesOverlap(helpOpts, args)) usage(0);
var version = doesOverlap(versionOpts, args);
args = R.reject(R.contains(R.__, versionOpts), args);
var getMeta = R.isEmpty(args) ? metaFromPackage : metaFromGrabber;
var getResult = (version) ? getVersion : diaper;
var getResult = async.compose(getResult, getMeta);
getResult(args, function (err, result) {
if (err) onErr(err);
console.log(JSON.stringify(result, null, 4));
});