baseline-browser-mapping 0.1.1 → 0.2.2
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/LICENSE.txt +201 -0
- package/README.md +71 -58
- package/dist/data/downstream-browsers.json +1459 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/scripts/baseline-browser-versions.d.ts +14 -0
- package/dist/scripts/baseline-browser-versions.js +212 -0
- package/package.json +13 -4
- package/data/downstream-browsers.json +0 -1459
- package/index.js +0 -3
- package/scripts/baseline-browser-versions.js +0 -184
package/index.js
DELETED
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
import bcdBrowsers from "@mdn/browser-compat-data" assert { type: "json"}
|
|
2
|
-
import otherBrowsers from "../data/downstream-browsers.json" assert { type: "json"}
|
|
3
|
-
|
|
4
|
-
const bcdCoreBrowserNames = [
|
|
5
|
-
"chrome",
|
|
6
|
-
"chrome_android",
|
|
7
|
-
"edge",
|
|
8
|
-
"firefox",
|
|
9
|
-
"firefox_android",
|
|
10
|
-
"safari",
|
|
11
|
-
"safari_ios",
|
|
12
|
-
]
|
|
13
|
-
|
|
14
|
-
const coreBrowserData = Object.entries(bcdBrowsers.browsers).filter(([browserName, browserData]) => bcdCoreBrowserNames.includes(browserName));
|
|
15
|
-
|
|
16
|
-
const bcdDownstreamBrowserNames = [
|
|
17
|
-
"webview_android",
|
|
18
|
-
"samsunginternet_android",
|
|
19
|
-
"opera_android",
|
|
20
|
-
"opera"
|
|
21
|
-
]
|
|
22
|
-
|
|
23
|
-
const otherDownstreamBrowserNames = [
|
|
24
|
-
"QQBrowser",
|
|
25
|
-
"UCBrowser",
|
|
26
|
-
]
|
|
27
|
-
|
|
28
|
-
const downstreamBrowserData = [
|
|
29
|
-
...Object.entries(bcdBrowsers.browsers).filter(([browserName, browserData]) => bcdDownstreamBrowserNames.includes(browserName)),
|
|
30
|
-
...Object.entries(otherBrowsers.browsers)
|
|
31
|
-
]
|
|
32
|
-
|
|
33
|
-
const acceptableStatuses = ['current', 'esr', 'retired', 'unknown'];
|
|
34
|
-
|
|
35
|
-
const getCoreVersionsByDate = (date, minOnly = true) => {
|
|
36
|
-
|
|
37
|
-
if (new Date(date).getFullYear() < 2015) {
|
|
38
|
-
throw new Error("There are no browser versions compatible with Baseline before 2015")
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (new Date(date).getFullYear() >= new Date().getFullYear()) {
|
|
42
|
-
throw new Error("There are no browser versions compatible with Baseline in the future")
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
let versions = new Array();
|
|
46
|
-
|
|
47
|
-
coreBrowserData.forEach(([browserName, browserData]) => {
|
|
48
|
-
|
|
49
|
-
let sortedVersions = Object.entries(browserData.releases)
|
|
50
|
-
.filter(([versionNumber, versionData]) => {
|
|
51
|
-
if (!acceptableStatuses.includes(versionData.status)) {
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
return true;
|
|
55
|
-
})
|
|
56
|
-
.sort((a, b) => parseFloat(a[0]) - parseFloat(b[0]))
|
|
57
|
-
|
|
58
|
-
for (let i = 1; i < sortedVersions.length; i++) {
|
|
59
|
-
const [versionNumber, versionData] = sortedVersions[i];
|
|
60
|
-
const [prevVersionNumber, prevVersionData] = sortedVersions[i - 1];
|
|
61
|
-
if (new Date(versionData.release_date) > new Date(date)) {
|
|
62
|
-
versions.push({
|
|
63
|
-
browser: browserName,
|
|
64
|
-
version: prevVersionNumber,
|
|
65
|
-
release_date: prevVersionData.release_date,
|
|
66
|
-
engine: null,
|
|
67
|
-
engine_version: null
|
|
68
|
-
});
|
|
69
|
-
if (minOnly) {
|
|
70
|
-
break;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
return versions;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const getDownstreamBrowsers = (inputArray, minOnly = true) => {
|
|
80
|
-
|
|
81
|
-
let coreBrowserArray = inputArray;
|
|
82
|
-
|
|
83
|
-
let minimumChromeVersion = coreBrowserArray
|
|
84
|
-
.filter((browser) => browser.browser === "chrome")
|
|
85
|
-
.sort((a, b) => parseFloat(a[0]) - parseFloat(b[0]))[0].version;
|
|
86
|
-
|
|
87
|
-
let downstreamArray = new Array();
|
|
88
|
-
|
|
89
|
-
downstreamBrowserData.forEach(([browserName, browserData]) => {
|
|
90
|
-
let sortedAndFilteredVersions = Object.entries(browserData.releases)
|
|
91
|
-
.filter(([versionNumber, versionData]) => {
|
|
92
|
-
if (!versionData.engine) {
|
|
93
|
-
return false;
|
|
94
|
-
}
|
|
95
|
-
if (versionData.engine != "Blink") {
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
if (parseFloat(versionData.engine_version) < parseFloat(minimumChromeVersion)) {
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
return true;
|
|
102
|
-
})
|
|
103
|
-
.sort((a, b) => parseFloat(a[0]) - parseFloat(b[0]));
|
|
104
|
-
|
|
105
|
-
for (let i = 0; i < sortedAndFilteredVersions.length; i++) {
|
|
106
|
-
const [versionNumber, versionData] = sortedAndFilteredVersions[i];
|
|
107
|
-
downstreamArray.push({
|
|
108
|
-
browser: browserName,
|
|
109
|
-
version: versionNumber,
|
|
110
|
-
release_date: versionData.release_date,
|
|
111
|
-
engine: versionData.engine,
|
|
112
|
-
engine_version: versionData.engine_version
|
|
113
|
-
});
|
|
114
|
-
if (minOnly) {
|
|
115
|
-
break;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
})
|
|
120
|
-
let outputArray = [...coreBrowserArray, ...downstreamArray];
|
|
121
|
-
return outputArray;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const baselineBrowserMapping = {
|
|
125
|
-
getMinimumWidelyAvailable(includeDownstream = false) {
|
|
126
|
-
const date30MonthsAgo = new Date().setMonth(new Date().getMonth() - 30);
|
|
127
|
-
let coreBrowserArray = getCoreVersionsByDate(date30MonthsAgo);
|
|
128
|
-
if (!includeDownstream) {
|
|
129
|
-
return coreBrowserArray;
|
|
130
|
-
} else {
|
|
131
|
-
return getDownstreamBrowsers(coreBrowserArray);
|
|
132
|
-
}
|
|
133
|
-
},
|
|
134
|
-
getAllWidelyAvailable(includeDownstream = false) {
|
|
135
|
-
const date30MonthsAgo = new Date().setMonth(new Date().getMonth() - 30);
|
|
136
|
-
let coreBrowserArray = getCoreVersionsByDate(date30MonthsAgo, false);
|
|
137
|
-
if (!includeDownstream) {
|
|
138
|
-
return coreBrowserArray;
|
|
139
|
-
} else {
|
|
140
|
-
return getDownstreamBrowsers(coreBrowserArray, false);
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
getMinimumWidelyAvailableOnDate(dateString, includeDownstream = false) {
|
|
144
|
-
const givenDate = new Date(Date.parse(dateString));
|
|
145
|
-
const givenDateLess30Months = new Date(givenDate.setMonth(givenDate.getMonth() - 30));
|
|
146
|
-
let coreBrowserArray = getCoreVersionsByDate(givenDateLess30Months);
|
|
147
|
-
if (!includeDownstream) {
|
|
148
|
-
return coreBrowserArray;
|
|
149
|
-
} else {
|
|
150
|
-
return getDownstreamBrowsers(coreBrowserArray);
|
|
151
|
-
}
|
|
152
|
-
},
|
|
153
|
-
getAllWidelyAvailableOnDate(dateString, includeDownstream = false) {
|
|
154
|
-
const givenDate = new Date(Date.parse(dateString));
|
|
155
|
-
const givenDateLess30Months = new Date(givenDate.setMonth(givenDate.getMonth() - 30));
|
|
156
|
-
let coreBrowserArray = getCoreVersionsByDate(givenDateLess30Months, false);
|
|
157
|
-
if (!includeDownstream) {
|
|
158
|
-
return coreBrowserArray;
|
|
159
|
-
} else {
|
|
160
|
-
return getDownstreamBrowsers(coreBrowserArray, false);
|
|
161
|
-
}
|
|
162
|
-
},
|
|
163
|
-
getMinimumByYear(year, includeDownstream = false) {
|
|
164
|
-
const date = new Date(parseInt(year) + 1, 0, 1);
|
|
165
|
-
let coreBrowserArray = getCoreVersionsByDate(date);
|
|
166
|
-
if (!includeDownstream) {
|
|
167
|
-
return coreBrowserArray;
|
|
168
|
-
} else {
|
|
169
|
-
return getDownstreamBrowsers(coreBrowserArray);
|
|
170
|
-
}
|
|
171
|
-
},
|
|
172
|
-
getAllByYear(year, includeDownstream = false) {
|
|
173
|
-
const date = new Date(parseInt(year) + 1, 0, 1);
|
|
174
|
-
let coreBrowserArray = getCoreVersionsByDate(date, false);
|
|
175
|
-
if (!includeDownstream) {
|
|
176
|
-
return coreBrowserArray;
|
|
177
|
-
} else {
|
|
178
|
-
return getDownstreamBrowsers(coreBrowserArray, false);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
export default baselineBrowserMapping;
|