-
Notifications
You must be signed in to change notification settings - Fork 65
/
ember-version-compatibility.js
55 lines (45 loc) · 1.93 KB
/
ember-version-compatibility.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
import { compare } from '@ember/utils';
import { computed } from '@ember/object';
import Component from '@ember/component';
export default Component.extend({
tagName: '',
showTable: false,
versionCompatibilitiesForReleasedVersions: computed('testResult.emberVersionCompatibilities.@each.emberVersion', function() {
return this.get('testResult.emberVersionCompatibilities')
.filter((versionCompatibility) => !versionCompatibility.get('emberVersion').match(/(beta|canary)/));
}),
sortedVersionCompatibilities: computed('versionCompatibilitiesForReleasedVersions.@each.emberVersion', function() {
return this.get('versionCompatibilitiesForReleasedVersions').toArray().sort(sortByVersion);
}),
allTestsPassed: computed('versionCompatibilitiesForReleasedVersions.@each.compatible', function() {
return this.get('versionCompatibilitiesForReleasedVersions').every((versionCompatibility) => versionCompatibility.get('compatible'));
}),
compatibilitySemverString: computed('sortedVersionCompatibilities.[]', function() {
let earliestVersion = this.get('sortedVersionCompatibilities.lastObject.emberVersion');
let latestVersion = this.get('sortedVersionCompatibilities.firstObject.emberVersion');
return `>=${earliestVersion} <=${latestVersion}`;
}),
actions: {
toggleShowTable() {
this.toggleProperty('showTable');
}
}
});
function extractVersionParts(versionNumber) {
let matches = versionNumber.match(/^(\d+)\.(\d+)\.(\d+)/);
if (matches) {
return matches.slice(1).map((x) => parseInt(x, 10));
}
return null;
}
function sortByVersion(a, b) {
let [majorA, minorA, patchA] = extractVersionParts(a.get('emberVersion'));
let [majorB, minorB, patchB] = extractVersionParts(b.get('emberVersion'));
if (compare(majorB, majorA) !== 0) {
return compare(majorB, majorA);
}
if (compare(minorB, minorA) !== 0) {
return compare(minorB, minorA);
}
return compare(patchB, patchA);
}