UNPKG

2.75 kBJavaScriptView Raw
1const {isFunction, union, template} = require('lodash');
2const semver = require('semver');
3const hideSensitive = require('./hide-sensitive');
4
5function extractErrors(err) {
6 return err && isFunction(err[Symbol.iterator]) ? [...err] : [err];
7}
8
9function hideSensitiveValues(env, objs) {
10 const hideFunction = hideSensitive(env);
11 return objs.map((object) => {
12 Object.getOwnPropertyNames(object).forEach((prop) => {
13 if (object[prop]) {
14 object[prop] = hideFunction(object[prop]);
15 }
16 });
17 return object;
18 });
19}
20
21function tagsToVersions(tags) {
22 return tags.map(({version}) => version);
23}
24
25function isMajorRange(range) {
26 return /^\d+\.x(?:\.x)?$/i.test(range);
27}
28
29function isMaintenanceRange(range) {
30 return /^\d+\.(?:\d+|x)(?:\.x)?$/i.test(range);
31}
32
33function getUpperBound(range) {
34 const result = semver.valid(range)
35 ? range
36 : ((semver.validRange(range) || '').match(/<(?<upperBound>\d+\.\d+\.\d+(-\d+)?)$/) || [])[1];
37
38 return result
39 ? // https://github.com/npm/node-semver/issues/322
40 result.replace(/-\d+$/, '')
41 : result;
42}
43
44function getLowerBound(range) {
45 return ((semver.validRange(range) || '').match(/(?<lowerBound>\d+\.\d+\.\d+)/) || [])[1];
46}
47
48function highest(version1, version2) {
49 return version1 && version2 ? (semver.gt(version1, version2) ? version1 : version2) : version1 || version2;
50}
51
52function lowest(version1, version2) {
53 return version1 && version2 ? (semver.lt(version1, version2) ? version1 : version2) : version1 || version2;
54}
55
56function getLatestVersion(versions, {withPrerelease} = {}) {
57 return versions.filter((version) => withPrerelease || !semver.prerelease(version)).sort(semver.rcompare)[0];
58}
59
60function getEarliestVersion(versions, {withPrerelease} = {}) {
61 return versions.filter((version) => withPrerelease || !semver.prerelease(version)).sort(semver.compare)[0];
62}
63
64function getFirstVersion(versions, lowerBranches) {
65 const lowerVersion = union(...lowerBranches.map(({tags}) => tagsToVersions(tags))).sort(semver.rcompare);
66 if (lowerVersion[0]) {
67 return versions.sort(semver.compare).find((version) => semver.gt(version, lowerVersion[0]));
68 }
69
70 return getEarliestVersion(versions);
71}
72
73function getRange(min, max) {
74 return `>=${min}${max ? ` <${max}` : ''}`;
75}
76
77function makeTag(tagFormat, version) {
78 return template(tagFormat)({version});
79}
80
81function isSameChannel(channel, otherChannel) {
82 return channel === otherChannel || (!channel && !otherChannel);
83}
84
85module.exports = {
86 extractErrors,
87 hideSensitiveValues,
88 tagsToVersions,
89 isMajorRange,
90 isMaintenanceRange,
91 getUpperBound,
92 getLowerBound,
93 highest,
94 lowest,
95 getLatestVersion,
96 getEarliestVersion,
97 getFirstVersion,
98 getRange,
99 makeTag,
100 isSameChannel,
101};