@@ -76,7 +76,7 @@ pub const Browsers = struct {
v[@intFromEnum(UA.Browser.Name.brave)] = &.{};
v[@intFromEnum(UA.Browser.Name.chrome)] = &Chrome.Version.Dates;
v[@intFromEnum(UA.Browser.Name.edge)] = &.{};
v[@intFromEnum(UA.Browser.Name.firefox)] = &.{};
v[@intFromEnum(UA.Browser.Name.firefox)] = &Firefox.Version.Dates;
v[@intFromEnum(UA.Browser.Name.hastur)] = &.{};
v[@intFromEnum(UA.Browser.Name.ladybird)] = &.{};
v[@intFromEnum(UA.Browser.Name.opera)] = &.{};
@@ -139,6 +139,59 @@ pub const Browsers = struct {
};
};
pub const Firefox = struct {
pub const Version = enum(u16) {
_,
pub const VerDates = [_]VerDate{
.{ 0, 1099980000 }, .{ 1, 1099987200 }, .{ 2, 1161673200 }, .{ 3, 1213686000 },
.{ 4, 1300777200 }, .{ 5, 1308639600 }, .{ 6, 1313478000 }, .{ 7, 1317106800 },
.{ 8, 1320739200 }, .{ 9, 1324368000 }, .{ 10, 1327996800 }, .{ 11, 1331622000 },
.{ 12, 1335250800 }, .{ 13, 1338879600 }, .{ 14, 1342508400 }, .{ 15, 1346137200 },
.{ 16, 1349766000 }, .{ 17, 1353398400 }, .{ 18, 1357632000 }, .{ 19, 1361260800 },
.{ 20, 1364886000 }, .{ 21, 1368514800 }, .{ 22, 1372143600 }, .{ 23, 1375772400 },
.{ 24, 1379401200 }, .{ 25, 1383030000 }, .{ 26, 1386662400 }, .{ 27, 1391500800 },
.{ 28, 1395126000 }, .{ 29, 1398754800 }, .{ 30, 1402383600 }, .{ 31, 1406012400 },
.{ 32, 1409641200 }, .{ 33, 1413270000 }, .{ 34, 1417420800 }, .{ 35, 1421136000 },
.{ 36, 1424764800 }, .{ 37, 1427785200 }, .{ 38, 1431414000 }, .{ 39, 1435820400 },
.{ 40, 1439276400 }, .{ 41, 1442905200 }, .{ 42, 1446537600 }, .{ 43, 1450166400 },
.{ 44, 1453795200 }, .{ 45, 1457424000 }, .{ 46, 1461654000 }, .{ 47, 1465282800 },
.{ 48, 1470121200 }, .{ 49, 1474354800 }, .{ 50, 1479196800 }, .{ 51, 1485244800 },
.{ 52, 1488873600 }, .{ 53, 1492585200 }, .{ 54, 1497337200 }, .{ 55, 1502175600 },
.{ 56, 1506582000 }, .{ 57, 1510646400 }, .{ 58, 1516694400 }, .{ 59, 1520924400 },
.{ 60, 1525849200 }, .{ 61, 1529996400 }, .{ 62, 1536130800 }, .{ 63, 1540278000 },
.{ 64, 1544515200 }, .{ 65, 1548748800 }, .{ 66, 1552978800 }, .{ 67, 1558422000 },
.{ 68, 1562655600 }, .{ 69, 1567494000 }, .{ 70, 1571727600 }, .{ 71, 1575360000 },
.{ 72, 1578384000 }, .{ 73, 1581408000 }, .{ 74, 1583823600 }, .{ 75, 1586242800 },
.{ 76, 1588662000 }, .{ 77, 1591081200 }, .{ 78, 1593500400 }, .{ 79, 1595919600 },
.{ 80, 1598338800 }, .{ 81, 1600758000 }, .{ 82, 1603177200 }, .{ 83, 1605600000 },
.{ 84, 1608019200 }, .{ 85, 1611648000 }, .{ 86, 1614067200 }, .{ 87, 1616482800 },
.{ 88, 1618815600 }, .{ 89, 1622530800 }, .{ 90, 1626159600 }, .{ 91, 1628578800 },
.{ 92, 1630998000 }, .{ 93, 1633417200 }, .{ 94, 1635836400 }, .{ 95, 1638864000 },
.{ 96, 1641888000 }, .{ 97, 1644307200 }, .{ 98, 1646726400 }, .{ 99, 1649142000 },
.{ 100, 1651561200 }, .{ 101, 1653980400 }, .{ 102, 1656399600 }, .{ 103, 1658818800 },
.{ 104, 1661238000 }, .{ 105, 1663657200 }, .{ 106, 1666076400 }, .{ 107, 1668499200 },
.{ 108, 1670918400 }, .{ 109, 1673942400 }, .{ 110, 1676361600 }, .{ 111, 1678777200 },
.{ 112, 1681196400 }, .{ 113, 1683615600 }, .{ 114, 1686034800 }, .{ 115, 1688454000 },
.{ 116, 1690873200 }, .{ 117, 1693292400 }, .{ 118, 1695711600 }, .{ 119, 1698130800 },
.{ 120, 1700553600 }, .{ 121, 1702972800 }, .{ 122, 1705996800 }, .{ 123, 1708416000 },
.{ 124, 1710831600 }, .{ 125, 1713250800 }, .{ 126, 1715670000 }, .{ 127, 1718089200 },
.{ 128, 1720508400 }, .{ 129, 1722927600 }, .{ 130, 1725346800 }, .{ 131, 1727766000 },
.{ 132, 1730185200 }, .{ 133, 1732608000 }, .{ 134, 1736236800 }, .{ 135, 1738656000 },
.{ 136, 1741075200 }, .{ 137, 1743490800 },
};
pub const Dates: [VerDates.len]Date = brk: {
var list: [VerDates.len]Date = @splat(0);
for (VerDates) |line| {
std.debug.assert(list[line[0]] == 0);
list[line[0]] = line[1];
}
break :brk list;
};
};
};
pub fn browserAge(ua: UA, _: *const Request, score: *f64) !void {
if (ua.resolved != .browser) return;
if (ua.resolved.browser.name == .unknown) return;