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'use strict';
const semver = require('semver');
const debug = require('debug')('auto-dist-tag');
module.exports = function calcDistTag(version, distTags) {
debug(`version: ${version}`);
debug(`distTags: ${JSON.stringify(distTags)}`);
let latest = distTags.latest;
if (!latest) {
debug(`-> "latest" (no previous "latest" found)`);
return 'latest';
}
let prerelease = semver.prerelease(version);
let latestPrerelease = semver.prerelease(latest);
debug(`prerelease: ${JSON.stringify(prerelease)}`);
debug(`latestPrerelease: ${JSON.stringify(latestPrerelease)}`);
if (latestPrerelease && (!prerelease || semver.gte(version, latest))) {
debug(`-> "latest" (previous "latest" was prerelease, new version is not a prerelease or newer)`);
return 'latest';
}
if (!prerelease) {
if (semver.gte(version, latest)) {
debug(`-> "latest" (new version is newer than or equal to previous "latest")`);
return 'latest'
} else {
debug(`-> "old" (new version is older than "latest")`);
return 'old'
}
}
let identifier = prerelease[0];
if (isNumeric(identifier)) {
identifier = 'prerelease';
}
debug(`identifier: ${identifier}`);
let identifierLatest = distTags[identifier];
if (!identifierLatest) {
debug(`-> "${identifier}" ("${identifier}" does not exist yet)`);
return identifier;
}
if (semver.gte(version, identifierLatest)) {
debug(`-> "${identifier}" (new version is newer than or equal to previous "${identifier}")`);
return identifier;
} else {
debug(`-> "old" (new version is older than "${identifier}")`);
return 'old';
}
};
function isNumeric(num) {
return !isNaN(num);
}