canvas-globe 0.1.0

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.
@@ -0,0 +1 @@
1
+ { "type": "commonjs" }
package/package.json ADDED
@@ -0,0 +1,110 @@
1
+ {
2
+ "name": "canvas-globe",
3
+ "version": "0.1.0",
4
+ "description": "Zero-dependency JavaScript and React library for interactive 3D globes and flat world maps rendered with Canvas 2D. No WebGL or API key.",
5
+ "license": "GPL-3.0-only",
6
+ "author": {
7
+ "name": "Harsh Jhunjhunuwala"
8
+ },
9
+ "homepage": "https://canvasglobe.swiftools.com/",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/Shree-hari/canvas-globe.git"
13
+ },
14
+ "bugs": {
15
+ "url": "https://github.com/Shree-hari/canvas-globe/issues"
16
+ },
17
+ "keywords": [
18
+ "javascript-globe",
19
+ "interactive-globe",
20
+ "canvas-globe",
21
+ "globe",
22
+ "canvas",
23
+ "interactive",
24
+ "map",
25
+ "world-map",
26
+ "react-globe",
27
+ "react",
28
+ "globe-visualization",
29
+ "data-visualization",
30
+ "canvas-2d",
31
+ "no-webgl",
32
+ "zero-dependency",
33
+ "choropleth-map",
34
+ "orthographic-projection",
35
+ "geospatial",
36
+ "markers",
37
+ "great-circle-arcs",
38
+ "web-component",
39
+ "vanilla-javascript"
40
+ ],
41
+ "type": "module",
42
+ "main": "./src/index.js",
43
+ "module": "./src/index.js",
44
+ "types": "./types/index.d.ts",
45
+ "unpkg": "./dist/canvas-globe.umd.js",
46
+ "jsdelivr": "./dist/canvas-globe.umd.js",
47
+ "exports": {
48
+ ".": {
49
+ "types": "./types/index.d.ts",
50
+ "import": "./src/index.js",
51
+ "default": "./src/index.js"
52
+ },
53
+ "./element": {
54
+ "types": "./types/element.d.ts",
55
+ "import": "./src/element.js",
56
+ "default": "./src/element.js"
57
+ },
58
+ "./react": {
59
+ "types": "./types/react.d.ts",
60
+ "import": "./src/react.js",
61
+ "default": "./src/react.js"
62
+ },
63
+ "./data/world": "./src/data/world.js",
64
+ "./package.json": "./package.json"
65
+ },
66
+ "files": [
67
+ "src",
68
+ "dist",
69
+ "types",
70
+ "README.md",
71
+ "CHANGELOG.md",
72
+ "COPYRIGHT",
73
+ "LICENSE",
74
+ "LICENSING.md",
75
+ "THIRD_PARTY_NOTICES.md",
76
+ "codemeta.json"
77
+ ],
78
+ "sideEffects": [
79
+ "./src/element.js"
80
+ ],
81
+ "publishConfig": {
82
+ "access": "public"
83
+ },
84
+ "scripts": {
85
+ "build": "node scripts/build.mjs",
86
+ "data": "node scripts/generate-data.mjs && node scripts/generate-timezones.mjs",
87
+ "example": "node scripts/serve.mjs",
88
+ "test": "node --test",
89
+ "typecheck": "tsc --noEmit -p tsconfig.json",
90
+ "smoke:package": "node scripts/package-smoke.mjs",
91
+ "release:check": "npm run test && npm run typecheck && npm run build && node scripts/release-check.mjs && npm run smoke:package",
92
+ "prepublishOnly": "npm run test && npm run typecheck && npm run build && node scripts/release-check.mjs"
93
+ },
94
+ "peerDependencies": {
95
+ "react": ">=17"
96
+ },
97
+ "peerDependenciesMeta": {
98
+ "react": {
99
+ "optional": true
100
+ }
101
+ },
102
+ "devDependencies": {
103
+ "polygon-clipping": "^0.15.7",
104
+ "topojson-client": "^3.1.0",
105
+ "typescript": "^5.5.0"
106
+ },
107
+ "engines": {
108
+ "node": ">=18"
109
+ }
110
+ }
package/src/csv.js ADDED
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Turns spreadsheet-shaped data into markers.
3
+ *
4
+ * Marketing data arrives as CSV, not GeoJSON, so this resolves rows by
5
+ * lat/lon columns first, then a city name, then a country code or name: using
6
+ * only geometry that already ships in the package.
7
+ */
8
+ import { world as bundledWorld } from "./data/world.js";
9
+ import { countryLocation, placeLocation } from "./viewer.js";
10
+ import { geometryBounds } from "./geo.js";
11
+
12
+ const LAT_KEYS = ["lat", "latitude", "y"];
13
+ const LON_KEYS = ["lon", "lng", "long", "longitude", "x"];
14
+ const CITY_KEYS = ["city", "place", "town", "location"];
15
+ const COUNTRY_KEYS = ["country", "iso", "country_code", "countrycode", "nation"];
16
+ const COUNT_KEYS = ["count", "value", "total", "users", "visits", "amount", "n"];
17
+ const LABEL_KEYS = ["label", "name", "title"];
18
+
19
+ let countryIndex = null;
20
+
21
+ const buildCountryIndex = () => {
22
+ if (countryIndex) return countryIndex;
23
+ countryIndex = new Map();
24
+ for (const shape of bundledWorld) {
25
+ const [west, south, east, north] = geometryBounds(shape.geometry);
26
+ const point = { lon: (west + east) / 2, lat: (south + north) / 2, country: shape.iso || null };
27
+ for (const key of [shape.iso, shape.id, shape.name]) {
28
+ if (key != null) countryIndex.set(String(key).toLowerCase(), point);
29
+ }
30
+ }
31
+ return countryIndex;
32
+ };
33
+
34
+ /** Resolves a country code or name to a coordinate. */
35
+ export function countryPoint(name) {
36
+ if (!name) return null;
37
+ const key = String(name).trim().toLowerCase();
38
+ return buildCountryIndex().get(key) || countryLocation(key) || null;
39
+ }
40
+
41
+ /**
42
+ * Best-effort coordinate for a free-text place. Tries the city table, then
43
+ * countries. Pass `gazetteer` to plug in your own `{ "Ahmedabad": [72.58, 23.03] }`.
44
+ */
45
+ export function geocode(name, { gazetteer } = {}) {
46
+ if (!name) return null;
47
+ const key = String(name).trim();
48
+ if (gazetteer) {
49
+ const hit = gazetteer[key] ?? gazetteer[key.toLowerCase()];
50
+ if (Array.isArray(hit)) return { lon: hit[0], lat: hit[1] };
51
+ if (hit && typeof hit === "object") return { lon: hit.lon ?? hit.lng, lat: hit.lat };
52
+ }
53
+ return placeLocation(key) || countryPoint(key);
54
+ }
55
+
56
+ /** RFC 4180-ish CSV parser: handles quotes, embedded commas and CRLF. */
57
+ export function parseCSV(text, { delimiter = "," } = {}) {
58
+ const rows = [];
59
+ let row = [], field = "", quoted = false;
60
+ for (let i = 0; i < text.length; i++) {
61
+ const c = text[i];
62
+ if (quoted) {
63
+ if (c === '"') {
64
+ if (text[i + 1] === '"') {
65
+ field += '"';
66
+ i++;
67
+ } else quoted = false;
68
+ } else field += c;
69
+ continue;
70
+ }
71
+ if (c === '"') quoted = true;
72
+ else if (c === delimiter) {
73
+ row.push(field);
74
+ field = "";
75
+ } else if (c === "\n" || c === "\r") {
76
+ if (c === "\r" && text[i + 1] === "\n") i++;
77
+ row.push(field);
78
+ rows.push(row);
79
+ row = [];
80
+ field = "";
81
+ } else field += c;
82
+ }
83
+ if (field !== "" || row.length) {
84
+ row.push(field);
85
+ rows.push(row);
86
+ }
87
+ if (!rows.length) return [];
88
+ const header = rows[0].map((h) => h.trim().toLowerCase());
89
+ return rows.slice(1)
90
+ .filter((r) => r.some((v) => v !== ""))
91
+ .map((r) => {
92
+ const out = {};
93
+ header.forEach((key, i) => (out[key] = (r[i] ?? "").trim()));
94
+ return out;
95
+ });
96
+ }
97
+
98
+ const pick = (row, keys) => {
99
+ for (const key of keys) if (row[key] != null && row[key] !== "") return row[key];
100
+ return null;
101
+ };
102
+
103
+ // Number(null) is 0, which would make every row look like it sits at (0, 0).
104
+ const num = (value) => {
105
+ if (value == null || value === "") return NaN;
106
+ const n = Number(value);
107
+ return Number.isFinite(n) ? n : NaN;
108
+ };
109
+
110
+ /**
111
+ * Converts parsed rows to markers. Unresolvable rows are dropped and reported
112
+ * on the returned array as `skipped`.
113
+ */
114
+ export function fromRows(rows, options = {}) {
115
+ const { gazetteer, extra = true } = options;
116
+ const markers = [];
117
+ const skipped = [];
118
+ for (const row of rows) {
119
+ const lat = num(pick(row, LAT_KEYS));
120
+ const lon = num(pick(row, LON_KEYS));
121
+ let point = Number.isFinite(lat) && Number.isFinite(lon) ? { lat, lon } : null;
122
+ if (!point) {
123
+ const city = pick(row, CITY_KEYS);
124
+ const country = pick(row, COUNTRY_KEYS);
125
+ const found = (city && geocode(city, { gazetteer })) || (country && countryPoint(country));
126
+ if (found) point = { lat: found.lat, lon: found.lon };
127
+ }
128
+ if (!point) {
129
+ skipped.push(row);
130
+ continue;
131
+ }
132
+ const marker = { lat: point.lat, lon: point.lon };
133
+ const count = num(pick(row, COUNT_KEYS));
134
+ if (Number.isFinite(count)) marker.count = count;
135
+ const label = pick(row, LABEL_KEYS) || pick(row, CITY_KEYS) || pick(row, COUNTRY_KEYS);
136
+ if (label) marker.label = label;
137
+ if (row.emoji) marker.emoji = row.emoji;
138
+ if (row.image) marker.image = row.image;
139
+ if (row.color) marker.color = row.color;
140
+ if (row.date) marker.date = row.date;
141
+ if (extra) for (const [k, v] of Object.entries(row)) if (!(k in marker)) marker[k] = v;
142
+ markers.push(marker);
143
+ }
144
+ markers.skipped = skipped;
145
+ return markers;
146
+ }
147
+
148
+ /** `fromCSV("city,count\nAhmedabad,12")` → markers. */
149
+ export function fromCSV(text, options = {}) {
150
+ return fromRows(parseCSV(text, options), options);
151
+ }
@@ -0,0 +1,5 @@
1
+ // Generated by scripts/generate-timezones.mjs. Do not edit.
2
+ // Source: the IANA tz database (public domain).
3
+ // "zone|lon|lat|country", coordinates in hundredths of a degree.
4
+ export const zoneTable = "Europe/Andorra|152|4250|AD;Asia/Dubai|5530|2530|AE;Asia/Kabul|6920|3452|AF;Europe/Tirane|1983|4133|AL;Asia/Yerevan|4450|4018|AM;Antarctica/Casey|11052|-6628|AQ;Antarctica/Davis|7797|-6858|AQ;Antarctica/Mawson|6288|-6760|AQ;Antarctica/Palmer|-6410|-6480|AQ;Antarctica/Rothera|-6813|-6757|AQ;Antarctica/Troll|253|-7201|AQ;Antarctica/Vostok|10690|-7840|AQ;America/Argentina/Buenos_Aires|-5845|-3460|AR;America/Argentina/Cordoba|-6418|-3140|AR;America/Argentina/Salta|-6542|-2478|AR;America/Argentina/Jujuy|-6530|-2418|AR;America/Argentina/Tucuman|-6522|-2682|AR;America/Argentina/Catamarca|-6578|-2847|AR;America/Argentina/La_Rioja|-6685|-2943|AR;America/Argentina/San_Juan|-6852|-3153|AR;America/Argentina/Mendoza|-6882|-3288|AR;America/Argentina/San_Luis|-6635|-3332|AR;America/Argentina/Rio_Gallegos|-6922|-5163|AR;America/Argentina/Ushuaia|-6830|-5480|AR;Pacific/Pago_Pago|-17070|-1427|AS;Europe/Vienna|1633|4822|AT;Australia/Lord_Howe|15908|-3155|AU;Antarctica/Macquarie|15895|-5450|AU;Australia/Hobart|14732|-4288|AU;Australia/Melbourne|14497|-3782|AU;Australia/Sydney|15122|-3387|AU;Australia/Broken_Hill|14145|-3195|AU;Australia/Brisbane|15303|-2747|AU;Australia/Lindeman|14900|-2027|AU;Australia/Adelaide|13858|-3492|AU;Australia/Darwin|13083|-1247|AU;Australia/Perth|11585|-3195|AU;Australia/Eucla|12887|-3172|AU;Asia/Baku|4985|4038|AZ;America/Barbados|-5962|1310|BB;Asia/Dhaka|9042|2372|BD;Europe/Brussels|433|5083|BE;Europe/Sofia|2332|4268|BG;Atlantic/Bermuda|-6477|3228|BM;America/La_Paz|-6815|-1650|BO;America/Noronha|-3242|-385|BR;America/Belem|-4848|-145|BR;America/Fortaleza|-3850|-372|BR;America/Recife|-3490|-805|BR;America/Araguaina|-4820|-720|BR;America/Maceio|-3572|-967|BR;America/Bahia|-3852|-1298|BR;America/Sao_Paulo|-4662|-2353|BR;America/Campo_Grande|-5462|-2045|BR;America/Cuiaba|-5608|-1558|BR;America/Santarem|-5487|-243|BR;America/Porto_Velho|-6390|-877|BR;America/Boa_Vista|-6067|282|BR;America/Manaus|-6002|-313|BR;America/Eirunepe|-6987|-667|BR;America/Rio_Branco|-6780|-997|BR;Asia/Thimphu|8965|2747|BT;Europe/Minsk|2757|5390|BY;America/Belize|-8820|1750|BZ;America/St_Johns|-5272|4757|CA;America/Halifax|-6360|4465|CA;America/Glace_Bay|-5995|4620|CA;America/Moncton|-6478|4610|CA;America/Goose_Bay|-6042|5333|CA;America/Toronto|-7938|4365|CA;America/Iqaluit|-6847|6373|CA;America/Winnipeg|-9715|4988|CA;America/Resolute|-9483|7470|CA;America/Rankin_Inlet|-9208|6282|CA;America/Regina|-10465|5040|CA;America/Swift_Current|-10783|5028|CA;America/Edmonton|-11347|5355|CA;America/Cambridge_Bay|-10505|6911|CA;America/Inuvik|-13372|6835|CA;America/Vancouver|-12312|4927|CA;America/Dawson_Creek|-12023|5577|CA;America/Fort_Nelson|-12270|5880|CA;America/Whitehorse|-13505|6072|CA;America/Dawson|-13942|6407|CA;Europe/Zurich|853|4738|CH;Africa/Abidjan|-403|532|CI;Pacific/Rarotonga|-15977|-2123|CK;America/Santiago|-7067|-3345|CL;America/Coyhaique|-7207|-4557|CL;America/Punta_Arenas|-7092|-5315|CL;Pacific/Easter|-10943|-2715|CL;Asia/Shanghai|12147|3123|CN;Asia/Urumqi|8758|4380|CN;America/Bogota|-7408|460|CO;America/Costa_Rica|-8408|993|CR;America/Havana|-8237|2313|CU;Atlantic/Cape_Verde|-2352|1492|CV;Asia/Nicosia|3337|3517|CY;Asia/Famagusta|3395|3512|CY;Europe/Prague|1443|5008|CZ;Europe/Berlin|1337|5250|DE;America/Santo_Domingo|-6990|1847|DO;Africa/Algiers|305|3678|DZ;America/Guayaquil|-7983|-217|EC;Pacific/Galapagos|-8960|-90|EC;Europe/Tallinn|2475|5942|EE;Africa/Cairo|3125|3005|EG;Africa/El_Aaiun|-1320|2715|EH;Europe/Madrid|-368|4040|ES;Africa/Ceuta|-532|3588|ES;Atlantic/Canary|-1540|2810|ES;Europe/Helsinki|2497|6017|FI;Pacific/Fiji|17842|-1813|FJ;Atlantic/Stanley|-5785|-5170|FK;Pacific/Kosrae|16298|532|FM;Atlantic/Faroe|-677|6202|FO;Europe/Paris|233|4887|FR;Europe/London|-13|5151|GB;Asia/Tbilisi|4482|4172|GE;America/Cayenne|-5233|493|GF;Europe/Gibraltar|-535|3613|GI;America/Nuuk|-5173|6418|GL;America/Danmarkshavn|-1867|7677|GL;America/Scoresbysund|-2197|7048|GL;America/Thule|-6878|7657|GL;Europe/Athens|2372|3797|GR;Atlantic/South_Georgia|-3653|-5427|GS;America/Guatemala|-9052|1463|GT;Pacific/Guam|14475|1347|GU;Africa/Bissau|-1558|1185|GW;America/Guyana|-5817|680|GY;Asia/Hong_Kong|11415|2228|HK;America/Tegucigalpa|-8722|1410|HN;America/Port-au-Prince|-7233|1853|HT;Europe/Budapest|1908|4750|HU;Asia/Jakarta|10680|-617|ID;Asia/Pontianak|10933|-3|ID;Asia/Makassar|11940|-512|ID;Asia/Jayapura|14070|-253|ID;Europe/Dublin|-625|5333|IE;Asia/Jerusalem|3522|3178|IL;Asia/Kolkata|8837|2253|IN;Indian/Chagos|7242|-733|IO;Asia/Baghdad|4442|3335|IQ;Asia/Tehran|5143|3567|IR;Europe/Rome|1248|4190|IT;America/Jamaica|-7679|1797|JM;Asia/Amman|3593|3195|JO;Asia/Tokyo|13974|3565|JP;Africa/Nairobi|3682|-128|KE;Asia/Bishkek|7460|4290|KG;Pacific/Tarawa|17300|142|KI;Pacific/Kanton|-17172|-278|KI;Pacific/Kiritimati|-15733|187|KI;Asia/Pyongyang|12575|3902|KP;Asia/Seoul|12697|3755|KR;Asia/Almaty|7695|4325|KZ;Asia/Qyzylorda|6547|4480|KZ;Asia/Qostanay|6362|5320|KZ;Asia/Aqtobe|5717|5028|KZ;Asia/Aqtau|5027|4452|KZ;Asia/Atyrau|5193|4712|KZ;Asia/Oral|5135|5122|KZ;Asia/Beirut|3550|3388|LB;Asia/Colombo|7985|693|LK;Africa/Monrovia|-1078|630|LR;Europe/Vilnius|2532|5468|LT;Europe/Riga|2410|5695|LV;Africa/Tripoli|1318|3290|LY;Africa/Casablanca|-758|3365|MA;Europe/Chisinau|2883|4700|MD;Pacific/Kwajalein|16733|908|MH;Asia/Yangon|9617|1678|MM;Asia/Ulaanbaatar|10688|4792|MN;Asia/Hovd|9165|4802|MN;Asia/Macau|11354|2220|MO;America/Martinique|-6108|1460|MQ;Europe/Malta|1452|3590|MT;Indian/Mauritius|5750|-2017|MU;Indian/Maldives|7350|417|MV;America/Mexico_City|-9915|1940|MX;America/Cancun|-8677|2108|MX;America/Merida|-8962|2097|MX;America/Monterrey|-10032|2567|MX;America/Matamoros|-9750|2583|MX;America/Chihuahua|-10608|2863|MX;America/Ciudad_Juarez|-10648|3173|MX;America/Ojinaga|-10442|2957|MX;America/Mazatlan|-10642|2322|MX;America/Bahia_Banderas|-10525|2080|MX;America/Hermosillo|-11097|2907|MX;America/Tijuana|-11702|3253|MX;Asia/Kuching|11033|155|MY;Africa/Maputo|3258|-2597|MZ;Africa/Windhoek|1710|-2257|NA;Pacific/Noumea|16645|-2227|NC;Pacific/Norfolk|16797|-2905|NF;Africa/Lagos|340|645|NG;America/Managua|-8628|1215|NI;Asia/Kathmandu|8532|2772|NP;Pacific/Nauru|16692|-52|NR;Pacific/Niue|-16992|-1902|NU;Pacific/Auckland|17477|-3687|NZ;Pacific/Chatham|-17655|-4395|NZ;America/Panama|-7953|897|PA;America/Lima|-7705|-1205|PE;Pacific/Tahiti|-14957|-1753|PF;Pacific/Marquesas|-13950|-900|PF;Pacific/Gambier|-13495|-2313|PF;Pacific/Port_Moresby|14717|-950|PG;Pacific/Bougainville|15557|-622|PG;Asia/Manila|12097|1459|PH;Asia/Karachi|6705|2487|PK;Europe/Warsaw|2100|5225|PL;America/Miquelon|-5633|4705|PM;Pacific/Pitcairn|-13008|-2507|PN;America/Puerto_Rico|-6611|1847|PR;Asia/Gaza|3447|3150|PS;Asia/Hebron|3510|3153|PS;Europe/Lisbon|-913|3872|PT;Atlantic/Madeira|-1690|3263|PT;Atlantic/Azores|-2567|3773|PT;Pacific/Palau|13448|733|PW;America/Asuncion|-5767|-2527|PY;Asia/Qatar|5153|2528|QA;Europe/Bucharest|2610|4443|RO;Europe/Belgrade|2050|4483|RS;Europe/Kaliningrad|2050|5472|RU;Europe/Moscow|3762|5576|RU;Europe/Simferopol|3410|4495|RU;Europe/Kirov|4965|5860|RU;Europe/Volgograd|4442|4873|RU;Europe/Astrakhan|4805|4635|RU;Europe/Saratov|4603|5157|RU;Europe/Ulyanovsk|4840|5433|RU;Europe/Samara|5015|5320|RU;Asia/Yekaterinburg|6060|5685|RU;Asia/Omsk|7340|5500|RU;Asia/Novosibirsk|8292|5503|RU;Asia/Barnaul|8375|5337|RU;Asia/Tomsk|8497|5650|RU;Asia/Novokuznetsk|8712|5375|RU;Asia/Krasnoyarsk|9283|5602|RU;Asia/Irkutsk|10433|5227|RU;Asia/Chita|11347|5205|RU;Asia/Yakutsk|12967|6200|RU;Asia/Khandyga|13555|6266|RU;Asia/Vladivostok|13193|4317|RU;Asia/Ust-Nera|14323|6456|RU;Asia/Magadan|15080|5957|RU;Asia/Sakhalin|14270|4697|RU;Asia/Srednekolymsk|15372|6747|RU;Asia/Kamchatka|15865|5302|RU;Asia/Anadyr|17748|6475|RU;Asia/Riyadh|4672|2463|SA;Pacific/Guadalcanal|16020|-953|SB;Africa/Khartoum|3253|1560|SD;Asia/Singapore|10385|128|SG;America/Paramaribo|-5517|583|SR;Africa/Juba|3162|485|SS;Africa/Sao_Tome|673|33|ST;America/El_Salvador|-8920|1370|SV;Asia/Damascus|3630|3350|SY;America/Grand_Turk|-7113|2147|TC;Africa/Ndjamena|1505|1212|TD;Asia/Bangkok|10052|1375|TH;Asia/Dushanbe|6880|3858|TJ;Pacific/Fakaofo|-17123|-937|TK;Asia/Dili|12558|-855|TL;Asia/Ashgabat|5838|3795|TM;Africa/Tunis|1018|3680|TN;Pacific/Tongatapu|-17520|-2113|TO;Europe/Istanbul|2897|4102|TR;Asia/Taipei|12150|2505|TW;Europe/Kyiv|3052|5043|UA;America/New_York|-7401|4071|US;America/Detroit|-8305|4233|US;America/Kentucky/Louisville|-8576|3825|US;America/Kentucky/Monticello|-8485|3683|US;America/Indiana/Indianapolis|-8616|3977|US;America/Indiana/Vincennes|-8753|3868|US;America/Indiana/Winamac|-8660|4105|US;America/Indiana/Marengo|-8634|3838|US;America/Indiana/Petersburg|-8728|3849|US;America/Indiana/Vevay|-8507|3875|US;America/Chicago|-8765|4185|US;America/Indiana/Tell_City|-8676|3795|US;America/Indiana/Knox|-8662|4130|US;America/Menominee|-8761|4511|US;America/North_Dakota/Center|-10130|4712|US;America/North_Dakota/New_Salem|-10141|4685|US;America/North_Dakota/Beulah|-10178|4726|US;America/Denver|-10498|3974|US;America/Boise|-11620|4361|US;America/Phoenix|-11207|3345|US;America/Los_Angeles|-11824|3405|US;America/Anchorage|-14990|6122|US;America/Juneau|-13442|5830|US;America/Sitka|-13530|5718|US;America/Metlakatla|-13158|5513|US;America/Yakutat|-13973|5955|US;America/Nome|-16541|6450|US;America/Adak|-17666|5188|US;Pacific/Honolulu|-15786|2131|US;America/Montevideo|-5621|-3491|UY;Asia/Samarkand|6680|3967|UZ;Asia/Tashkent|6930|4133|UZ;America/Caracas|-6693|1050|VE;Asia/Ho_Chi_Minh|10667|1075|VN;Pacific/Efate|16842|-1767|VU;Pacific/Apia|-17173|-1383|WS;Africa/Johannesburg|2800|-2625|ZA";
5
+ export const zoneAliases = "Australia/ACT>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>Europe/Brussels;Canada/Atlantic>America/Halifax;Canada/Central>America/Winnipeg;Canada/Eastern>America/Toronto;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>Europe/Athens;EST>America/Panama;Egypt>Africa/Cairo;Eire>Europe/Dublin;GB>Europe/London;GB-Eire>Europe/London;Hongkong>Asia/Hong_Kong;Iceland>Africa/Abidjan;Iran>Asia/Tehran;Israel>Asia/Jerusalem;Jamaica>America/Jamaica;Japan>Asia/Tokyo;Kwajalein>Pacific/Kwajalein;Libya>Africa/Tripoli;MET>Europe/Brussels;MST>America/Phoenix;Mexico/BajaNorte>America/Tijuana;Mexico/BajaSur>America/Mazatlan;Mexico/General>America/Mexico_City;NZ>Pacific/Auckland;NZ-CHAT>Pacific/Chatham;Navajo>America/Denver;PRC>Asia/Shanghai;Poland>Europe/Warsaw;Portugal>Europe/Lisbon;ROC>Asia/Taipei;ROK>Asia/Seoul;Singapore>Asia/Singapore;Turkey>Europe/Istanbul;US/Alaska>America/Anchorage;US/Aleutian>America/Adak;US/Arizona>America/Phoenix;US/Central>America/Chicago;US/East-Indiana>America/Indiana/Indianapolis;US/Eastern>America/New_York;US/Hawaii>Pacific/Honolulu;US/Indiana-Starke>America/Indiana/Knox;US/Michigan>America/Detroit;US/Mountain>America/Denver;US/Pacific>America/Los_Angeles;US/Samoa>Pacific/Pago_Pago;W-SU>Europe/Moscow;America/Buenos_Aires>America/Argentina/Buenos_Aires;America/Catamarca>America/Argentina/Catamarca;America/Cordoba>America/Argentina/Cordoba;America/Indianapolis>America/Indiana/Indianapolis;America/Jujuy>America/Argentina/Jujuy;America/Knox_IN>America/Indiana/Knox;America/Louisville>America/Kentucky/Louisville;America/Mendoza>America/Argentina/Mendoza;America/Virgin>America/Puerto_Rico;Pacific/Samoa>Pacific/Pago_Pago;Africa/Accra>Africa/Abidjan;Africa/Addis_Ababa>Africa/Nairobi;Africa/Asmara>Africa/Nairobi;Africa/Bamako>Africa/Abidjan;Africa/Bangui>Africa/Lagos;Africa/Banjul>Africa/Abidjan;Africa/Blantyre>Africa/Maputo;Africa/Brazzaville>Africa/Lagos;Africa/Bujumbura>Africa/Maputo;Africa/Conakry>Africa/Abidjan;Africa/Dakar>Africa/Abidjan;Africa/Dar_es_Salaam>Africa/Nairobi;Africa/Djibouti>Africa/Nairobi;Africa/Douala>Africa/Lagos;Africa/Freetown>Africa/Abidjan;Africa/Gaborone>Africa/Maputo;Africa/Harare>Africa/Maputo;Africa/Kampala>Africa/Nairobi;Africa/Kigali>Africa/Maputo;Africa/Kinshasa>Africa/Lagos;Africa/Libreville>Africa/Lagos;Africa/Lome>Africa/Abidjan;Africa/Luanda>Africa/Lagos;Africa/Lubumbashi>Africa/Maputo;Africa/Lusaka>Africa/Maputo;Africa/Malabo>Africa/Lagos;Africa/Maseru>Africa/Johannesburg;Africa/Mbabane>Africa/Johannesburg;Africa/Mogadishu>Africa/Nairobi;Africa/Niamey>Africa/Lagos;Africa/Nouakchott>Africa/Abidjan;Africa/Ouagadougou>Africa/Abidjan;Africa/Porto-Novo>Africa/Lagos;America/Anguilla>America/Puerto_Rico;America/Antigua>America/Puerto_Rico;America/Aruba>America/Puerto_Rico;America/Atikokan>America/Panama;America/Blanc-Sablon>America/Puerto_Rico;America/Cayman>America/Panama;America/Creston>America/Phoenix;America/Curacao>America/Puerto_Rico;America/Dominica>America/Puerto_Rico;America/Grenada>America/Puerto_Rico;America/Guadeloupe>America/Puerto_Rico;America/Kralendijk>America/Puerto_Rico;America/Lower_Princes>America/Puerto_Rico;America/Marigot>America/Puerto_Rico;America/Montserrat>America/Puerto_Rico;America/Nassau>America/Toronto;America/Port_of_Spain>America/Puerto_Rico;America/St_Barthelemy>America/Puerto_Rico;America/St_Kitts>America/Puerto_Rico;America/St_Lucia>America/Puerto_Rico;America/St_Thomas>America/Puerto_Rico;America/St_Vincent>America/Puerto_Rico;America/Tortola>America/Puerto_Rico;Antarctica/DumontDUrville>Pacific/Port_Moresby;Antarctica/McMurdo>Pacific/Auckland;Antarctica/Syowa>Asia/Riyadh;Arctic/Longyearbyen>Europe/Berlin;Asia/Aden>Asia/Riyadh;Asia/Bahrain>Asia/Qatar;Asia/Brunei>Asia/Kuching;Asia/Kuala_Lumpur>Asia/Singapore;Asia/Kuwait>Asia/Riyadh;Asia/Muscat>Asia/Dubai;Asia/Phnom_Penh>Asia/Bangkok;Asia/Vientiane>Asia/Bangkok;Atlantic/Reykjavik>Africa/Abidjan;Atlantic/St_Helena>Africa/Abidjan;Europe/Amsterdam>Europe/Brussels;Europe/Bratislava>Europe/Prague;Europe/Busingen>Europe/Zurich;Europe/Copenhagen>Europe/Berlin;Europe/Guernsey>Europe/London;Europe/Isle_of_Man>Europe/London;Europe/Jersey>Europe/London;Europe/Ljubljana>Europe/Belgrade;Europe/Luxembourg>Europe/Brussels;Europe/Mariehamn>Europe/Helsinki;Europe/Monaco>Europe/Paris;Europe/Oslo>Europe/Berlin;Europe/Podgorica>Europe/Belgrade;Europe/San_Marino>Europe/Rome;Europe/Sarajevo>Europe/Belgrade;Europe/Skopje>Europe/Belgrade;Europe/Stockholm>Europe/Berlin;Europe/Vaduz>Europe/Zurich;Europe/Vatican>Europe/Rome;Europe/Zagreb>Europe/Belgrade;Indian/Antananarivo>Africa/Nairobi;Indian/Christmas>Asia/Bangkok;Indian/Cocos>Asia/Yangon;Indian/Comoro>Africa/Nairobi;Indian/Kerguelen>Indian/Maldives;Indian/Mahe>Asia/Dubai;Indian/Mayotte>Africa/Nairobi;Indian/Reunion>Asia/Dubai;Pacific/Chuuk>Pacific/Port_Moresby;Pacific/Funafuti>Pacific/Tarawa;Pacific/Majuro>Pacific/Tarawa;Pacific/Midway>Pacific/Pago_Pago;Pacific/Pohnpei>Pacific/Guadalcanal;Pacific/Saipan>Pacific/Guam;Pacific/Wake>Pacific/Tarawa;Pacific/Wallis>Pacific/Tarawa;Africa/Timbuktu>Africa/Abidjan;America/Argentina/ComodRivadavia>America/Argentina/Catamarca;America/Atka>America/Adak;America/Coral_Harbour>America/Panama;America/Ensenada>America/Tijuana;America/Fort_Wayne>America/Indiana/Indianapolis;America/Montreal>America/Toronto;America/Nipigon>America/Toronto;America/Pangnirtung>America/Iqaluit;America/Porto_Acre>America/Rio_Branco;America/Rainy_River>America/Winnipeg;America/Rosario>America/Argentina/Cordoba;America/Santa_Isabel>America/Tijuana;America/Shiprock>America/Denver;America/Thunder_Bay>America/Toronto;America/Yellowknife>America/Edmonton;Antarctica/South_Pole>Pacific/Auckland;Asia/Choibalsan>Asia/Ulaanbaatar;Asia/Chongqing>Asia/Shanghai;Asia/Harbin>Asia/Shanghai;Asia/Kashgar>Asia/Urumqi;Asia/Tel_Aviv>Asia/Jerusalem;Atlantic/Jan_Mayen>Europe/Berlin;Australia/Canberra>Australia/Sydney;Australia/Currie>Australia/Hobart;Europe/Belfast>Europe/London;Europe/Tiraspol>Europe/Chisinau;Europe/Uzhgorod>Europe/Kyiv;Europe/Zaporozhye>Europe/Kyiv;Pacific/Enderbury>Pacific/Kanton;Pacific/Johnston>Pacific/Honolulu;Pacific/Yap>Pacific/Port_Moresby;WET>Europe/Lisbon;Africa/Asmera>Africa/Nairobi;America/Godthab>America/Nuuk;Asia/Ashkhabad>Asia/Ashgabat;Asia/Calcutta>Asia/Kolkata;Asia/Chungking>Asia/Shanghai;Asia/Dacca>Asia/Dhaka;Asia/Istanbul>Europe/Istanbul;Asia/Katmandu>Asia/Kathmandu;Asia/Macao>Asia/Macau;Asia/Rangoon>Asia/Yangon;Asia/Saigon>Asia/Ho_Chi_Minh;Asia/Thimbu>Asia/Thimphu;Asia/Ujung_Pandang>Asia/Makassar;Asia/Ulan_Bator>Asia/Ulaanbaatar;Atlantic/Faeroe>Atlantic/Faroe;Europe/Kiev>Europe/Kyiv;Europe/Nicosia>Asia/Nicosia;HST>Pacific/Honolulu;Pacific/Ponape>Pacific/Guadalcanal;Pacific/Truk>Pacific/Port_Moresby";