@coffer-org/core 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/version.d.ts +1 -0
- package/dist/version.js +53 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isNewerVersion(candidate: string, installed: string): boolean;
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const VERSION_RE = /^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
|
|
2
|
+
function parseVersion(value) {
|
|
3
|
+
const match = VERSION_RE.exec(value.trim());
|
|
4
|
+
if (!match)
|
|
5
|
+
return null;
|
|
6
|
+
const prerelease = match[4]?.split('.') ?? [];
|
|
7
|
+
if (prerelease.some((part) => /^\d+$/.test(part) && part.length > 1 && part.startsWith('0')))
|
|
8
|
+
return null;
|
|
9
|
+
return {
|
|
10
|
+
major: Number(match[1]),
|
|
11
|
+
minor: Number(match[2]),
|
|
12
|
+
patch: Number(match[3]),
|
|
13
|
+
prerelease,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function compareIdentifiers(left, right) {
|
|
17
|
+
const leftNumeric = /^\d+$/.test(left);
|
|
18
|
+
const rightNumeric = /^\d+$/.test(right);
|
|
19
|
+
if (leftNumeric && rightNumeric) {
|
|
20
|
+
if (left.length !== right.length)
|
|
21
|
+
return left.length > right.length ? 1 : -1;
|
|
22
|
+
return left === right ? 0 : left > right ? 1 : -1;
|
|
23
|
+
}
|
|
24
|
+
if (leftNumeric !== rightNumeric)
|
|
25
|
+
return leftNumeric ? -1 : 1;
|
|
26
|
+
return left === right ? 0 : left > right ? 1 : -1;
|
|
27
|
+
}
|
|
28
|
+
export function isNewerVersion(candidate, installed) {
|
|
29
|
+
const next = parseVersion(candidate);
|
|
30
|
+
const current = parseVersion(installed);
|
|
31
|
+
if (!next || !current)
|
|
32
|
+
return false;
|
|
33
|
+
for (const key of ['major', 'minor', 'patch']) {
|
|
34
|
+
if (next[key] !== current[key])
|
|
35
|
+
return next[key] > current[key];
|
|
36
|
+
}
|
|
37
|
+
if (next.prerelease.length === 0 || current.prerelease.length === 0) {
|
|
38
|
+
return next.prerelease.length === 0 && current.prerelease.length > 0;
|
|
39
|
+
}
|
|
40
|
+
const length = Math.max(next.prerelease.length, current.prerelease.length);
|
|
41
|
+
for (let i = 0; i < length; i++) {
|
|
42
|
+
const left = next.prerelease[i];
|
|
43
|
+
const right = current.prerelease[i];
|
|
44
|
+
if (left === undefined)
|
|
45
|
+
return false;
|
|
46
|
+
if (right === undefined)
|
|
47
|
+
return true;
|
|
48
|
+
const comparison = compareIdentifiers(left, right);
|
|
49
|
+
if (comparison !== 0)
|
|
50
|
+
return comparison > 0;
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
53
|
+
}
|