@phensley/cldr-core
Version:
Core library for @phensley/cldr
96 lines • 7.18 kB
JavaScript
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var encoding_1 = require("../../resource/encoding");
var lru_1 = require("../../utils/lru");
var search_1 = require("../../utils/search");
var autogen_aliases_1 = require("./autogen.aliases");
var autogen_zonedata_1 = require("./autogen.zonedata");
var string_1 = require("../../utils/string");
var untilsIndex = autogen_zonedata_1.untilsLookup.map(encoding_1.base100decode);
var ZoneInfoCache = /** @class */ (function () {
function ZoneInfoCache() {
this.zoneData = new lru_1.LRU(50);
}
ZoneInfoCache.prototype.get = function (epoch, timeZoneId) {
var data = this.getZoneData(timeZoneId);
var len = data.untils.length;
var index = search_1.binarySearch(data.untils, epoch);
if (index === -1) {
index++;
}
var dst = encoding_1.bitarrayGet(data.dsts, index);
var offset = index < len ? data.offsets[index] : data.offsets[len - 1];
index = search_1.binarySearch(data.metaZoneUntils, epoch);
if (index === -1) {
index++;
}
var metaZoneId = data.metaZoneIds[index];
return { timeZoneId: timeZoneId, metaZoneId: metaZoneId, dst: dst, offset: offset * 60000 };
};
ZoneInfoCache.prototype.getZoneData = function (zoneId) {
var zone = this.zoneData.get(zoneId);
if (zone !== undefined) {
return zone;
}
var link = autogen_zonedata_1.zoneLinks[zoneId];
var raw = link === undefined ? autogen_zonedata_1.zoneDST[zoneId] : autogen_zonedata_1.zoneDST[link];
if (raw !== undefined) {
zone = parseZoneData(raw);
this.zoneData.set(zoneId, zone);
return zone;
}
return UTC;
};
return ZoneInfoCache;
}());
exports.ZoneInfoCache = ZoneInfoCache;
var parseZoneData = function (raw) {
var parts = raw.split('\t');
var _offsets = parts[0].split(' ').map(function (o) { return parseInt(o, 10); });
var index = parts[1].split('').map(Number);
var offsets = index.map(function (i) { return _offsets[i]; });
var _untils = parts[2].split(' ').map(encoding_1.base100decode);
var dsts = parts[3].split(' ').map(encoding_1.base100decode);
var _metaZoneIds = parts[4].split(' ').map(encoding_1.base100decode).map(function (i) { return autogen_zonedata_1.metaZoneIds[i]; });
var metaZoneUntils = parts[5].split(' ').map(encoding_1.base100decode);
var untils = _untils.map(function (i) { return untilsIndex[i]; });
// Expand untils deltas
var len = untils.length;
if (len > 0) {
untils[0] *= 1000;
for (var i = 1; i < len; i++) {
untils[i] = untils[i - 1] + (untils[i] * 1000);
}
}
return { offsets: offsets, untils: untils, dsts: dsts, metaZoneIds: _metaZoneIds, metaZoneUntils: metaZoneUntils };
};
var UTC = parseZoneData(autogen_zonedata_1.zoneDST['Etc/GMT']);
exports.zoneInfoCache = new ZoneInfoCache();
/**
* Checks if this timezone id is an alias.
*/
exports.substituteZoneAlias = function (id) {
var result = timeZoneAliases[id];
return result === undefined ? id : result;
};
var zoneAlias = string_1.stringToObject(autogen_aliases_1.zoneAliasRaw, '|', ':');
/**
* Hand-built list of extra timezone aliases, for remapping timezone identifiers
* that currently do not map 1:1 with a CLDR identifier or aliass.
* reated using backward mapping in tz database v2017b.
*
* TODO: revisit to translate tz database aliases automatically and merge with
* cldr aliases.
*/
var timeZoneAliases = __assign({}, zoneAlias, {
// Manual mappings of defunct zones from tz database.
'Africa/Asmara': 'Africa/Asmera', 'America/Argentina/Buenos_Aires': 'America/Buenos_Aires', 'America/Argentina/Catamarca': 'America/Catamarca', 'America/Argentina/ComodRivadavia': 'America/Catamarca', 'America/Argentina/Cordoba': 'America/Cordoba', 'America/Argentina/Jujuy': 'America/Jujuy', 'America/Argentina/Mendoza': 'America/Mendoza', 'America/Atikokan': 'America/Coral_Harbour', 'America/Atka': 'America/Adak', 'America/Ensenada': 'America/Tijuana', 'America/Fort_Wayne': 'America/Indianapolis', 'America/Indiana/Indianapolis': 'America/Indianapolis', 'America/Kentucky/Louisville': 'America/Louisville', 'America/Knox_IN': 'America/Indiana/Knox', 'America/Porto_Acre': 'America/Rio_Branco', 'America/Rosario': 'America/Cordoba', 'America/Santa_Isabel': 'America/Tijuana', 'America/Virgin': 'America/Port_of_Spain', 'Asia/Ashkhabad': 'Asia/Ashgabat', 'Asia/Chungking': 'Asia/Shanghai', 'Asia/Dacca': 'Asia/Dhaka', 'Asia/Ho_Chi_Minh': 'Asia/Saigon', 'Asia/Istanbul': 'Europe/Istanbul', 'Asia/Kathmandu': 'Asia/Katmandu', 'Asia/Kolkata': 'Asia/Calcutta', 'Asia/Macao': 'Asia/Macau', 'Asia/Tel_Aviv': 'Asia/Jerusalem', 'Asia/Thimbu': 'Asia/Thimphu', 'Asia/Ujung_Pandang': 'Asia/Makassar', 'Asia/Ulan_Bator': 'Asia/Ulaanbaatar', 'Asia/Yangon': 'Asia/Rangoon', 'Atlantic/Faroe': 'Atlantic/Faeroe', 'Australia/ACT': 'Australia/Sydney', 'Australia/Canberra': 'Australia/Sydney', 'Australia/LHI': 'Australia/Lord_Howe', 'Australia/NSW': 'Australia/Sydney', 'Australia/North': 'Australia/Darwin', 'Australia/Queensland': 'Australia/Brisbane', 'Australia/South': 'Australia/Adelaide', 'Australia/Tasmania': 'Australia/Hobart', 'Australia/Victoria': 'Australia/Melbourne', 'Australia/West': 'Australia/Perth', 'Australia/Yancowinna': 'Australia/Broken_Hill', 'Brazil/Acre': 'America/Rio_Branco', 'Brazil/DeNoronha': 'America/Noronha', 'Brazil/East': 'America/Sao_Paulo', 'Brazil/West': 'America/Manaus', 'CET': 'Etc/GMT1', 'CST6CDT': 'America/Chicago', 'Canada/Atlantic': 'America/Halifax', 'Canada/Central': 'America/Winnipeg', 'Canada/East-Saskatchewan': 'America/Regina', 'Canada/Eastern': 'America/Regina', 'Canada/Mountain': 'America/Edmonton', 'Canada/Newfoundland': 'America/St_Johns', 'Canada/Pacific': 'America/Vancouver', 'Canada/Saskatchewan': 'America/Regina', 'Canada/Yukon': 'America/Whitehorse', 'Chile/Continental': 'America/Santiago', 'Chile/EasterIsland': 'Pacific/Easter', 'Cuba': 'America/Havana', 'EET': 'Etc/GMT2', 'EST5EDT': 'America/New_York', 'Egypt': 'Africa/Cairo', 'Eire': 'Europe/Dublin', 'Etc/GMT+0': 'Etc/GMT', 'Etc/GMT+1': 'Etc/GMT1', 'Etc/GMT+10': 'Etc/GMT10', 'Etc/GMT+11': 'Etc/GMT11', 'Etc/GMT+12': 'Etc/GMT12', 'Etc/GMT+2': 'Etc/GMT2', 'Etc/GMT+3': 'Etc/GMT3', 'Etc/GMT+4': 'Etc/GMT4', 'Etc/GMT+5': 'Etc/GMT5', 'Etc/GMT+6': 'Etc/GMT6', 'Etc/GMT+7': 'Etc/GMT7', 'Etc/GMT+8': 'Etc/GMT8', 'Etc/GMT+9': 'Etc/GMT9', 'Etc/GMT-0': 'Etc/GMT', 'Etc/GMT0': 'Etc/GMT', 'Etc/Greenwich': 'Etc/GMT', 'Etc/UCT': 'Etc/UTC', 'Etc/Universal': 'Etc/UTC', 'Etc/Zulu': 'Etc/UTC', 'Europe/Nicosia': 'Asia/Nicosia', 'Europe/Tiraspol': 'Europe/Chisinau', 'GB': 'Europe/London', 'GB-Eire': 'Europe/London', 'GMT': 'Etc/GMT', 'GMT0': 'Etc/GMT' });
//# sourceMappingURL=timezone.js.map
;