/
index.js
90 lines (70 loc) · 2.34 KB
/
index.js
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
'use strict';
var path = require('path')
var semver = require('semver')
var exec = require('child_process').exec;
var execNpmVersion;
function nodeEngineStrict() {
getPackageJson()
.then(getEngines)
.then(checkNodeVersion)
.then(checkNpmVersion)
.then(success, fail);
return;
function success() {
return true;
}
function fail(err) {
console.log('Error: ', err);
return process.exit(1);
}
function checkNodeVersion(data) {
return new Promise(function (resolve, reject) {
if (semver.satisfies(process.version.substring(1), data.node)) {
resolve(data);
} else {
reject('Incorrect node version\n' +
'`package.json` specifies `' + data.node + '`, ' +
'you’re currently running `' + process.version + '`.');
}
});
}
function checkNpmVersion(data) {
return new Promise(function (resolve, reject) {
exec('npm -v',
function (error, stdout, stderr) {
if (error) return reject('Unable to find npm version')
execNpmVersion = stdout;
if (semver.satisfies(execNpmVersion, data.npm)) {
resolve();
} else {
reject('Incorrect npm version\n' +
'`package.json` specifies `' + data.npm + '`, ' +
'you’re currently running `' + execNpmVersion + '`.');
}
});
});
}
function getEngines(data) {
return new Promise(function (resolve, reject) {
var versions;
if (data.engines) {
versions = data.engines;
}
if (versions) {
resolve(versions);
} else {
reject('Missing or improper `engines` parameter in `package.json`');
}
});
}
function getPackageJson() {
return new Promise(function (resolve, reject) {
try {
resolve(require(path.resolve(process.cwd(), 'package.json')));
} catch (e) {
reject('`package.json` not found!');
}
});
}
}
module.exports = { check: nodeEngineStrict }