-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathutils.js
96 lines (83 loc) · 2.11 KB
/
utils.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
91
92
93
94
95
96
'use strict';
var utils = require('lazy-cache')(require);
var fn = require;
require = utils;
/**
* Lazily required module dependencies
*/
require('delete', 'del');
require('extend-shallow', 'extend');
require('fs-exists-sync', 'exists');
require('is-valid-app', 'isValid');
require('js-yaml', 'yaml');
require('semver', 'semver');
require('through2', 'through');
require('array-unique', 'unique');
require = fn;
utils.updateEngine = function(engines, arr) {
engines = utils.toSemver(engines);
arr = arr.map(function(version) {
if (utils.isNumericVersion(version)) {
var v = utils.toSemver(version);
if (utils.semver.gt(v, engines)) {
return utils.semver.clean(v);
}
return false;
} else {
return true;
}
}).filter(Boolean);
var list = utils.engines(engines);
for (var i = 0; i < list.length; i++) {
var engine = utils.semver.clean(list[i]);
if (arr.indexOf(engine) === -1) {
arr.push(engine);
}
}
arr = utils.unique(arr.map(utils.compressVersion));
arr.sort();
arr.reverse();
return arr;
};
utils.engines = function(str) {
var re = /(\D*)([\d.]+)\s*/;
var engines = String(str).trim().split(' ');
var res = [];
for (var i = 0; i < engines.length; i++) {
var m = re.exec(engines[i]);
if (!m) continue;
res.push(utils.toSemver(m[2]));
}
return res;
};
utils.isNumericVersion = function(str) {
return /^[\s.\d]+$/.test(str);
};
utils.toSemver = function(version) {
version = version.replace(/^\D*|\D*$/g, '');
let increments = String(version).trim().split('.');
while (increments.length < 3) increments.push('0');
return increments.join('.');
};
utils.compressVersion = function(str) {
str = String(str);
var segs = str.trim().split('.');
var len = segs.length;
while (len--) {
var v = segs[len];
if (v >= 1) {
return segs.join('.');
}
segs.pop();
}
return segs.join('.');
};
utils.contains = function(arr, version) {
return arr.some(function(item) {
return utils.toSemver(item.nodejs_version) === utils.toSemver(version);
});
};
/**
* Expose `utils` modules
*/
module.exports = utils;