๐Ÿ“ฆ Turbo87 / auto-dist-tag

๐Ÿ“„ calc-dist-tag.js ยท 61 lines
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);
}