airport-dist 1.0.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Abdulaziz Almalki
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,80 @@
1
+ # airport-dist
2
+
3
+ A CLI tool to calculate geographical and aviation route distances between airports using IATA codes.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install -g airport-dist
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```bash
14
+ # Using long flags
15
+ airport-dist --from JFK --to LAX
16
+
17
+ # Using short flags
18
+ airport-dist -f LHR -t DXB
19
+ ```
20
+
21
+ ## Output
22
+
23
+ The tool provides two distance measurements:
24
+
25
+ 1. **Geographical Distance** - Great circle (Haversine) distance, the shortest path between two points on Earth
26
+ 2. **Aviation Route Distance** - Estimated actual flight distance accounting for airways, waypoints, and routing factors
27
+
28
+ ```
29
+ Calculating distances from JFK to LAX...
30
+
31
+ Airports Found:
32
+ From: John F. Kennedy International Airport (New York, United States)
33
+ To: Los Angeles International Airport (Los Angeles, United States)
34
+
35
+ ============================================================
36
+ DISTANCE RESULTS
37
+ ============================================================
38
+
39
+ 1. GEOGRAPHICAL DISTANCE (Great Circle / Haversine):
40
+ 3974.34 km
41
+ 2469.54 miles
42
+ 2145.97 nautical miles
43
+
44
+ 2. AVIATION ROUTE DISTANCE:
45
+ 4173.05 km
46
+ 2593.01 miles
47
+ 2253.27 nautical miles
48
+ Source: Calculated (Great Circle + industry routing factors)
49
+
50
+ ============================================================
51
+
52
+ Note: Aviation routes may differ from great circle distance due to
53
+ airways, restricted airspace, weather patterns, and traffic flow.
54
+ ```
55
+
56
+ ## Options
57
+
58
+ | Option | Alias | Description |
59
+ |--------|-------|-------------|
60
+ | `--from` | `-f` | Origin airport IATA code (e.g., JFK) |
61
+ | `--to` | `-t` | Destination airport IATA code (e.g., LAX) |
62
+ | `--version` | `-V` | Show version number |
63
+ | `--help` | `-h` | Show help |
64
+
65
+ ## Supported Airports
66
+
67
+ The tool includes a built-in database of 150+ major international airports. If an airport is not in the database, it will attempt to fetch the data from a public API.
68
+
69
+ ## How It Works
70
+
71
+ - **Geographical Distance**: Calculated using the Haversine formula, which determines the great-circle distance between two points on a sphere given their latitudes and longitudes.
72
+
73
+ - **Aviation Route Distance**: Estimated using industry-standard routing factors that account for:
74
+ - Airways and waypoint requirements
75
+ - Departure/arrival procedures (SIDs/STARs)
76
+ - Distance-based overhead (shorter flights have proportionally higher overhead)
77
+
78
+ ## License
79
+
80
+ MIT
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Airport data module with built-in database and API fallback.
3
+ * Uses data from OpenFlights and free APIs for lookup.
4
+ */
5
+ export interface Airport {
6
+ iata: string;
7
+ name: string;
8
+ city: string;
9
+ country: string;
10
+ latitude: number;
11
+ longitude: number;
12
+ }
13
+ /**
14
+ * Look up an airport by its IATA code.
15
+ * First checks built-in database, then falls back to API.
16
+ */
17
+ export declare function getAirportByIata(iataCode: string): Promise<Airport | null>;
18
+ //# sourceMappingURL=airports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"airports.d.ts","sourceRoot":"","sources":["../src/airports.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AA+JD;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAchF"}
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ /**
3
+ * Airport data module with built-in database and API fallback.
4
+ * Uses data from OpenFlights and free APIs for lookup.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getAirportByIata = getAirportByIata;
8
+ // Built-in database of major world airports (OpenFlights data)
9
+ const AIRPORTS_DB = {
10
+ // United States
11
+ JFK: { iata: "JFK", name: "John F. Kennedy International Airport", city: "New York", country: "United States", latitude: 40.6413, longitude: -73.7781 },
12
+ LAX: { iata: "LAX", name: "Los Angeles International Airport", city: "Los Angeles", country: "United States", latitude: 33.9416, longitude: -118.4085 },
13
+ ORD: { iata: "ORD", name: "O'Hare International Airport", city: "Chicago", country: "United States", latitude: 41.9742, longitude: -87.9073 },
14
+ DFW: { iata: "DFW", name: "Dallas/Fort Worth International Airport", city: "Dallas", country: "United States", latitude: 32.8998, longitude: -97.0403 },
15
+ DEN: { iata: "DEN", name: "Denver International Airport", city: "Denver", country: "United States", latitude: 39.8561, longitude: -104.6737 },
16
+ ATL: { iata: "ATL", name: "Hartsfield-Jackson Atlanta International Airport", city: "Atlanta", country: "United States", latitude: 33.6407, longitude: -84.4277 },
17
+ SFO: { iata: "SFO", name: "San Francisco International Airport", city: "San Francisco", country: "United States", latitude: 37.6213, longitude: -122.379 },
18
+ SEA: { iata: "SEA", name: "Seattle-Tacoma International Airport", city: "Seattle", country: "United States", latitude: 47.4502, longitude: -122.3088 },
19
+ MIA: { iata: "MIA", name: "Miami International Airport", city: "Miami", country: "United States", latitude: 25.7959, longitude: -80.287 },
20
+ BOS: { iata: "BOS", name: "Boston Logan International Airport", city: "Boston", country: "United States", latitude: 42.3656, longitude: -71.0096 },
21
+ LAS: { iata: "LAS", name: "Harry Reid International Airport", city: "Las Vegas", country: "United States", latitude: 36.086, longitude: -115.1537 },
22
+ PHX: { iata: "PHX", name: "Phoenix Sky Harbor International Airport", city: "Phoenix", country: "United States", latitude: 33.4373, longitude: -112.0078 },
23
+ IAH: { iata: "IAH", name: "George Bush Intercontinental Airport", city: "Houston", country: "United States", latitude: 29.9902, longitude: -95.3368 },
24
+ EWR: { iata: "EWR", name: "Newark Liberty International Airport", city: "Newark", country: "United States", latitude: 40.6895, longitude: -74.1745 },
25
+ MCO: { iata: "MCO", name: "Orlando International Airport", city: "Orlando", country: "United States", latitude: 28.4312, longitude: -81.3081 },
26
+ MSP: { iata: "MSP", name: "Minneapolis-Saint Paul International Airport", city: "Minneapolis", country: "United States", latitude: 44.8848, longitude: -93.2223 },
27
+ DTW: { iata: "DTW", name: "Detroit Metropolitan Airport", city: "Detroit", country: "United States", latitude: 42.2162, longitude: -83.3554 },
28
+ PHL: { iata: "PHL", name: "Philadelphia International Airport", city: "Philadelphia", country: "United States", latitude: 39.8729, longitude: -75.2437 },
29
+ LGA: { iata: "LGA", name: "LaGuardia Airport", city: "New York", country: "United States", latitude: 40.7769, longitude: -73.874 },
30
+ BWI: { iata: "BWI", name: "Baltimore/Washington International Airport", city: "Baltimore", country: "United States", latitude: 39.1774, longitude: -76.6684 },
31
+ DCA: { iata: "DCA", name: "Ronald Reagan Washington National Airport", city: "Washington D.C.", country: "United States", latitude: 38.8512, longitude: -77.0402 },
32
+ IAD: { iata: "IAD", name: "Washington Dulles International Airport", city: "Washington D.C.", country: "United States", latitude: 38.9531, longitude: -77.4565 },
33
+ SAN: { iata: "SAN", name: "San Diego International Airport", city: "San Diego", country: "United States", latitude: 32.7338, longitude: -117.1933 },
34
+ TPA: { iata: "TPA", name: "Tampa International Airport", city: "Tampa", country: "United States", latitude: 27.9755, longitude: -82.5332 },
35
+ PDX: { iata: "PDX", name: "Portland International Airport", city: "Portland", country: "United States", latitude: 45.5898, longitude: -122.5951 },
36
+ HNL: { iata: "HNL", name: "Daniel K. Inouye International Airport", city: "Honolulu", country: "United States", latitude: 21.3187, longitude: -157.9225 },
37
+ ANC: { iata: "ANC", name: "Ted Stevens Anchorage International Airport", city: "Anchorage", country: "United States", latitude: 61.1743, longitude: -149.9963 },
38
+ // Europe
39
+ LHR: { iata: "LHR", name: "London Heathrow Airport", city: "London", country: "United Kingdom", latitude: 51.47, longitude: -0.4543 },
40
+ LGW: { iata: "LGW", name: "London Gatwick Airport", city: "London", country: "United Kingdom", latitude: 51.1537, longitude: -0.1821 },
41
+ STN: { iata: "STN", name: "London Stansted Airport", city: "London", country: "United Kingdom", latitude: 51.885, longitude: 0.235 },
42
+ CDG: { iata: "CDG", name: "Charles de Gaulle Airport", city: "Paris", country: "France", latitude: 49.0097, longitude: 2.5479 },
43
+ ORY: { iata: "ORY", name: "Paris Orly Airport", city: "Paris", country: "France", latitude: 48.7262, longitude: 2.3652 },
44
+ FRA: { iata: "FRA", name: "Frankfurt Airport", city: "Frankfurt", country: "Germany", latitude: 50.0379, longitude: 8.5622 },
45
+ MUC: { iata: "MUC", name: "Munich Airport", city: "Munich", country: "Germany", latitude: 48.3537, longitude: 11.775 },
46
+ AMS: { iata: "AMS", name: "Amsterdam Airport Schiphol", city: "Amsterdam", country: "Netherlands", latitude: 52.3105, longitude: 4.7683 },
47
+ MAD: { iata: "MAD", name: "Adolfo Suárez Madrid–Barajas Airport", city: "Madrid", country: "Spain", latitude: 40.4983, longitude: -3.5676 },
48
+ BCN: { iata: "BCN", name: "Barcelona–El Prat Airport", city: "Barcelona", country: "Spain", latitude: 41.2974, longitude: 2.0833 },
49
+ FCO: { iata: "FCO", name: "Leonardo da Vinci–Fiumicino Airport", city: "Rome", country: "Italy", latitude: 41.8003, longitude: 12.2389 },
50
+ MXP: { iata: "MXP", name: "Milan Malpensa Airport", city: "Milan", country: "Italy", latitude: 45.63, longitude: 8.7231 },
51
+ ZRH: { iata: "ZRH", name: "Zurich Airport", city: "Zurich", country: "Switzerland", latitude: 47.4582, longitude: 8.5555 },
52
+ VIE: { iata: "VIE", name: "Vienna International Airport", city: "Vienna", country: "Austria", latitude: 48.1103, longitude: 16.5697 },
53
+ CPH: { iata: "CPH", name: "Copenhagen Airport", city: "Copenhagen", country: "Denmark", latitude: 55.618, longitude: 12.656 },
54
+ OSL: { iata: "OSL", name: "Oslo Gardermoen Airport", city: "Oslo", country: "Norway", latitude: 60.1939, longitude: 11.1004 },
55
+ ARN: { iata: "ARN", name: "Stockholm Arlanda Airport", city: "Stockholm", country: "Sweden", latitude: 59.6519, longitude: 17.9186 },
56
+ HEL: { iata: "HEL", name: "Helsinki Airport", city: "Helsinki", country: "Finland", latitude: 60.3172, longitude: 24.9633 },
57
+ DUB: { iata: "DUB", name: "Dublin Airport", city: "Dublin", country: "Ireland", latitude: 53.4264, longitude: -6.2499 },
58
+ LIS: { iata: "LIS", name: "Lisbon Airport", city: "Lisbon", country: "Portugal", latitude: 38.7756, longitude: -9.1354 },
59
+ BRU: { iata: "BRU", name: "Brussels Airport", city: "Brussels", country: "Belgium", latitude: 50.9014, longitude: 4.4844 },
60
+ ATH: { iata: "ATH", name: "Athens International Airport", city: "Athens", country: "Greece", latitude: 37.9364, longitude: 23.9445 },
61
+ IST: { iata: "IST", name: "Istanbul Airport", city: "Istanbul", country: "Turkey", latitude: 41.2753, longitude: 28.7519 },
62
+ WAW: { iata: "WAW", name: "Warsaw Chopin Airport", city: "Warsaw", country: "Poland", latitude: 52.1657, longitude: 20.9671 },
63
+ PRG: { iata: "PRG", name: "Václav Havel Airport Prague", city: "Prague", country: "Czech Republic", latitude: 50.1008, longitude: 14.26 },
64
+ BUD: { iata: "BUD", name: "Budapest Ferenc Liszt International Airport", city: "Budapest", country: "Hungary", latitude: 47.4369, longitude: 19.2556 },
65
+ // Middle East
66
+ DXB: { iata: "DXB", name: "Dubai International Airport", city: "Dubai", country: "United Arab Emirates", latitude: 25.2532, longitude: 55.3657 },
67
+ AUH: { iata: "AUH", name: "Abu Dhabi International Airport", city: "Abu Dhabi", country: "United Arab Emirates", latitude: 24.433, longitude: 54.6511 },
68
+ DOH: { iata: "DOH", name: "Hamad International Airport", city: "Doha", country: "Qatar", latitude: 25.2609, longitude: 51.6138 },
69
+ JED: { iata: "JED", name: "King Abdulaziz International Airport", city: "Jeddah", country: "Saudi Arabia", latitude: 21.6796, longitude: 39.1565 },
70
+ RUH: { iata: "RUH", name: "King Khalid International Airport", city: "Riyadh", country: "Saudi Arabia", latitude: 24.9576, longitude: 46.6988 },
71
+ TLV: { iata: "TLV", name: "Ben Gurion Airport", city: "Tel Aviv", country: "Israel", latitude: 32.0055, longitude: 34.8854 },
72
+ AMM: { iata: "AMM", name: "Queen Alia International Airport", city: "Amman", country: "Jordan", latitude: 31.7226, longitude: 35.9932 },
73
+ BAH: { iata: "BAH", name: "Bahrain International Airport", city: "Manama", country: "Bahrain", latitude: 26.2708, longitude: 50.6336 },
74
+ KWI: { iata: "KWI", name: "Kuwait International Airport", city: "Kuwait City", country: "Kuwait", latitude: 29.2266, longitude: 47.9689 },
75
+ MCT: { iata: "MCT", name: "Muscat International Airport", city: "Muscat", country: "Oman", latitude: 23.5933, longitude: 58.2844 },
76
+ // Asia
77
+ HKG: { iata: "HKG", name: "Hong Kong International Airport", city: "Hong Kong", country: "Hong Kong", latitude: 22.308, longitude: 113.9185 },
78
+ SIN: { iata: "SIN", name: "Singapore Changi Airport", city: "Singapore", country: "Singapore", latitude: 1.3644, longitude: 103.9915 },
79
+ NRT: { iata: "NRT", name: "Narita International Airport", city: "Tokyo", country: "Japan", latitude: 35.7653, longitude: 140.3856 },
80
+ HND: { iata: "HND", name: "Tokyo Haneda Airport", city: "Tokyo", country: "Japan", latitude: 35.5494, longitude: 139.7798 },
81
+ KIX: { iata: "KIX", name: "Kansai International Airport", city: "Osaka", country: "Japan", latitude: 34.4347, longitude: 135.244 },
82
+ ICN: { iata: "ICN", name: "Incheon International Airport", city: "Seoul", country: "South Korea", latitude: 37.4602, longitude: 126.4407 },
83
+ GMP: { iata: "GMP", name: "Gimpo International Airport", city: "Seoul", country: "South Korea", latitude: 37.5583, longitude: 126.7906 },
84
+ PEK: { iata: "PEK", name: "Beijing Capital International Airport", city: "Beijing", country: "China", latitude: 40.0799, longitude: 116.6031 },
85
+ PKX: { iata: "PKX", name: "Beijing Daxing International Airport", city: "Beijing", country: "China", latitude: 39.5098, longitude: 116.4105 },
86
+ PVG: { iata: "PVG", name: "Shanghai Pudong International Airport", city: "Shanghai", country: "China", latitude: 31.1443, longitude: 121.8083 },
87
+ SHA: { iata: "SHA", name: "Shanghai Hongqiao International Airport", city: "Shanghai", country: "China", latitude: 31.1979, longitude: 121.3363 },
88
+ CAN: { iata: "CAN", name: "Guangzhou Baiyun International Airport", city: "Guangzhou", country: "China", latitude: 23.3924, longitude: 113.299 },
89
+ SZX: { iata: "SZX", name: "Shenzhen Bao'an International Airport", city: "Shenzhen", country: "China", latitude: 22.6393, longitude: 113.8107 },
90
+ TPE: { iata: "TPE", name: "Taiwan Taoyuan International Airport", city: "Taipei", country: "Taiwan", latitude: 25.0777, longitude: 121.2328 },
91
+ BKK: { iata: "BKK", name: "Suvarnabhumi Airport", city: "Bangkok", country: "Thailand", latitude: 13.6811, longitude: 100.7472 },
92
+ DMK: { iata: "DMK", name: "Don Mueang International Airport", city: "Bangkok", country: "Thailand", latitude: 13.9126, longitude: 100.6068 },
93
+ KUL: { iata: "KUL", name: "Kuala Lumpur International Airport", city: "Kuala Lumpur", country: "Malaysia", latitude: 2.7456, longitude: 101.7099 },
94
+ CGK: { iata: "CGK", name: "Soekarno-Hatta International Airport", city: "Jakarta", country: "Indonesia", latitude: -6.1256, longitude: 106.6558 },
95
+ MNL: { iata: "MNL", name: "Ninoy Aquino International Airport", city: "Manila", country: "Philippines", latitude: 14.5086, longitude: 121.0194 },
96
+ DEL: { iata: "DEL", name: "Indira Gandhi International Airport", city: "New Delhi", country: "India", latitude: 28.5562, longitude: 77.1 },
97
+ BOM: { iata: "BOM", name: "Chhatrapati Shivaji Maharaj International Airport", city: "Mumbai", country: "India", latitude: 19.0896, longitude: 72.8656 },
98
+ BLR: { iata: "BLR", name: "Kempegowda International Airport", city: "Bangalore", country: "India", latitude: 13.1986, longitude: 77.7066 },
99
+ MAA: { iata: "MAA", name: "Chennai International Airport", city: "Chennai", country: "India", latitude: 12.9941, longitude: 80.1709 },
100
+ CCU: { iata: "CCU", name: "Netaji Subhas Chandra Bose International Airport", city: "Kolkata", country: "India", latitude: 22.6547, longitude: 88.4467 },
101
+ HYD: { iata: "HYD", name: "Rajiv Gandhi International Airport", city: "Hyderabad", country: "India", latitude: 17.2403, longitude: 78.4294 },
102
+ CMB: { iata: "CMB", name: "Bandaranaike International Airport", city: "Colombo", country: "Sri Lanka", latitude: 7.1808, longitude: 79.8841 },
103
+ KTM: { iata: "KTM", name: "Tribhuvan International Airport", city: "Kathmandu", country: "Nepal", latitude: 27.6966, longitude: 85.3591 },
104
+ DAC: { iata: "DAC", name: "Hazrat Shahjalal International Airport", city: "Dhaka", country: "Bangladesh", latitude: 23.8433, longitude: 90.3978 },
105
+ SGN: { iata: "SGN", name: "Tan Son Nhat International Airport", city: "Ho Chi Minh City", country: "Vietnam", latitude: 10.8188, longitude: 106.6519 },
106
+ HAN: { iata: "HAN", name: "Noi Bai International Airport", city: "Hanoi", country: "Vietnam", latitude: 21.2187, longitude: 105.807 },
107
+ // Oceania
108
+ SYD: { iata: "SYD", name: "Sydney Kingsford Smith Airport", city: "Sydney", country: "Australia", latitude: -33.9399, longitude: 151.1753 },
109
+ MEL: { iata: "MEL", name: "Melbourne Airport", city: "Melbourne", country: "Australia", latitude: -37.6733, longitude: 144.8433 },
110
+ BNE: { iata: "BNE", name: "Brisbane Airport", city: "Brisbane", country: "Australia", latitude: -27.3942, longitude: 153.1218 },
111
+ PER: { iata: "PER", name: "Perth Airport", city: "Perth", country: "Australia", latitude: -31.9403, longitude: 115.9669 },
112
+ AKL: { iata: "AKL", name: "Auckland Airport", city: "Auckland", country: "New Zealand", latitude: -37.0082, longitude: 174.7917 },
113
+ WLG: { iata: "WLG", name: "Wellington International Airport", city: "Wellington", country: "New Zealand", latitude: -41.3272, longitude: 174.8053 },
114
+ CHC: { iata: "CHC", name: "Christchurch International Airport", city: "Christchurch", country: "New Zealand", latitude: -43.4894, longitude: 172.5322 },
115
+ // Africa
116
+ JNB: { iata: "JNB", name: "O. R. Tambo International Airport", city: "Johannesburg", country: "South Africa", latitude: -26.1392, longitude: 28.246 },
117
+ CPT: { iata: "CPT", name: "Cape Town International Airport", city: "Cape Town", country: "South Africa", latitude: -33.9715, longitude: 18.6021 },
118
+ CAI: { iata: "CAI", name: "Cairo International Airport", city: "Cairo", country: "Egypt", latitude: 30.1219, longitude: 31.4056 },
119
+ CMN: { iata: "CMN", name: "Mohammed V International Airport", city: "Casablanca", country: "Morocco", latitude: 33.3675, longitude: -7.5898 },
120
+ NBO: { iata: "NBO", name: "Jomo Kenyatta International Airport", city: "Nairobi", country: "Kenya", latitude: -1.3192, longitude: 36.9278 },
121
+ ADD: { iata: "ADD", name: "Addis Ababa Bole International Airport", city: "Addis Ababa", country: "Ethiopia", latitude: 8.9779, longitude: 38.7993 },
122
+ LOS: { iata: "LOS", name: "Murtala Muhammed International Airport", city: "Lagos", country: "Nigeria", latitude: 6.5774, longitude: 3.3212 },
123
+ ALG: { iata: "ALG", name: "Houari Boumediene Airport", city: "Algiers", country: "Algeria", latitude: 36.691, longitude: 3.2154 },
124
+ // South America
125
+ GRU: { iata: "GRU", name: "São Paulo–Guarulhos International Airport", city: "São Paulo", country: "Brazil", latitude: -23.4356, longitude: -46.4731 },
126
+ GIG: { iata: "GIG", name: "Rio de Janeiro–Galeão International Airport", city: "Rio de Janeiro", country: "Brazil", latitude: -22.8099, longitude: -43.2505 },
127
+ EZE: { iata: "EZE", name: "Ministro Pistarini International Airport", city: "Buenos Aires", country: "Argentina", latitude: -34.8222, longitude: -58.5358 },
128
+ SCL: { iata: "SCL", name: "Arturo Merino Benítez International Airport", city: "Santiago", country: "Chile", latitude: -33.393, longitude: -70.7858 },
129
+ BOG: { iata: "BOG", name: "El Dorado International Airport", city: "Bogotá", country: "Colombia", latitude: 4.7016, longitude: -74.1469 },
130
+ LIM: { iata: "LIM", name: "Jorge Chávez International Airport", city: "Lima", country: "Peru", latitude: -12.0219, longitude: -77.1143 },
131
+ CCS: { iata: "CCS", name: "Simón Bolívar International Airport", city: "Caracas", country: "Venezuela", latitude: 10.6012, longitude: -66.9912 },
132
+ UIO: { iata: "UIO", name: "Mariscal Sucre International Airport", city: "Quito", country: "Ecuador", latitude: -0.1292, longitude: -78.3575 },
133
+ // Central America & Caribbean
134
+ MEX: { iata: "MEX", name: "Mexico City International Airport", city: "Mexico City", country: "Mexico", latitude: 19.4363, longitude: -99.0721 },
135
+ CUN: { iata: "CUN", name: "Cancún International Airport", city: "Cancún", country: "Mexico", latitude: 21.0365, longitude: -86.8771 },
136
+ GDL: { iata: "GDL", name: "Guadalajara International Airport", city: "Guadalajara", country: "Mexico", latitude: 20.5218, longitude: -103.3111 },
137
+ PTY: { iata: "PTY", name: "Tocumen International Airport", city: "Panama City", country: "Panama", latitude: 9.0714, longitude: -79.3835 },
138
+ SJO: { iata: "SJO", name: "Juan Santamaría International Airport", city: "San José", country: "Costa Rica", latitude: 9.9939, longitude: -84.2088 },
139
+ HAV: { iata: "HAV", name: "José Martí International Airport", city: "Havana", country: "Cuba", latitude: 22.9892, longitude: -82.4091 },
140
+ SJU: { iata: "SJU", name: "Luis Muñoz Marín International Airport", city: "San Juan", country: "Puerto Rico", latitude: 18.4394, longitude: -66.0018 },
141
+ NAS: { iata: "NAS", name: "Lynden Pindling International Airport", city: "Nassau", country: "Bahamas", latitude: 25.0389, longitude: -77.4662 },
142
+ MBJ: { iata: "MBJ", name: "Sangster International Airport", city: "Montego Bay", country: "Jamaica", latitude: 18.5037, longitude: -77.9134 },
143
+ // Canada
144
+ YYZ: { iata: "YYZ", name: "Toronto Pearson International Airport", city: "Toronto", country: "Canada", latitude: 43.6777, longitude: -79.6248 },
145
+ YVR: { iata: "YVR", name: "Vancouver International Airport", city: "Vancouver", country: "Canada", latitude: 49.1947, longitude: -123.1792 },
146
+ YUL: { iata: "YUL", name: "Montréal–Trudeau International Airport", city: "Montreal", country: "Canada", latitude: 45.4706, longitude: -73.7408 },
147
+ YYC: { iata: "YYC", name: "Calgary International Airport", city: "Calgary", country: "Canada", latitude: 51.1215, longitude: -114.0076 },
148
+ YEG: { iata: "YEG", name: "Edmonton International Airport", city: "Edmonton", country: "Canada", latitude: 53.3097, longitude: -113.5792 },
149
+ YOW: { iata: "YOW", name: "Ottawa Macdonald–Cartier International Airport", city: "Ottawa", country: "Canada", latitude: 45.3225, longitude: -75.6692 },
150
+ // Russia
151
+ SVO: { iata: "SVO", name: "Sheremetyevo International Airport", city: "Moscow", country: "Russia", latitude: 55.9726, longitude: 37.4146 },
152
+ DME: { iata: "DME", name: "Domodedovo International Airport", city: "Moscow", country: "Russia", latitude: 55.4088, longitude: 37.9063 },
153
+ LED: { iata: "LED", name: "Pulkovo Airport", city: "Saint Petersburg", country: "Russia", latitude: 59.8003, longitude: 30.2625 },
154
+ };
155
+ /**
156
+ * Look up an airport by its IATA code.
157
+ * First checks built-in database, then falls back to API.
158
+ */
159
+ async function getAirportByIata(iataCode) {
160
+ const code = iataCode.toUpperCase();
161
+ // Check built-in database first
162
+ if (AIRPORTS_DB[code]) {
163
+ return AIRPORTS_DB[code];
164
+ }
165
+ // Try API fallback
166
+ try {
167
+ return await fetchAirportFromApi(code);
168
+ }
169
+ catch {
170
+ return null;
171
+ }
172
+ }
173
+ /**
174
+ * Fetch airport data from a free API.
175
+ * Uses the Airport-Data API (free, no key required for basic lookups).
176
+ */
177
+ async function fetchAirportFromApi(iataCode) {
178
+ try {
179
+ // Using airport-data.com free API
180
+ const response = await fetch(`https://airport-data.com/api/ap_info.json?iata=${iataCode}`);
181
+ if (!response.ok) {
182
+ return null;
183
+ }
184
+ const data = (await response.json());
185
+ if (data.error || !data.latitude || !data.longitude) {
186
+ return null;
187
+ }
188
+ return {
189
+ iata: iataCode.toUpperCase(),
190
+ name: data.name || `${iataCode} Airport`,
191
+ city: data.location?.split(",")[0]?.trim() || "Unknown",
192
+ country: data.country || "Unknown",
193
+ latitude: parseFloat(data.latitude),
194
+ longitude: parseFloat(data.longitude),
195
+ };
196
+ }
197
+ catch {
198
+ return null;
199
+ }
200
+ }
201
+ //# sourceMappingURL=airports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"airports.js","sourceRoot":"","sources":["../src/airports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Aviation route distance module.
3
+ * Calculates estimated flight route distances based on industry-standard factors.
4
+ *
5
+ * Aviation routes differ from great circle distances due to:
6
+ * - Airways and waypoint requirements
7
+ * - Restricted airspace avoidance
8
+ * - Departure/arrival procedures (SIDs/STARs)
9
+ * - Jet streams and wind optimization
10
+ * - Traffic flow management
11
+ */
12
+ import { Distance } from "./haversine";
13
+ export interface AviationDistance extends Distance {
14
+ source: string;
15
+ }
16
+ /**
17
+ * Get the aviation route distance between two airports.
18
+ * Uses industry-standard routing factors to estimate actual flight distance.
19
+ */
20
+ export declare function getAviationRouteDistance(fromIata: string, toIata: string, geoDistance: Distance): AviationDistance;
21
+ //# sourceMappingURL=aviation-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aviation-api.d.ts","sourceRoot":"","sources":["../src/aviation-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAKvC,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,QAAQ,GACpB,gBAAgB,CASlB"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ /**
3
+ * Aviation route distance module.
4
+ * Calculates estimated flight route distances based on industry-standard factors.
5
+ *
6
+ * Aviation routes differ from great circle distances due to:
7
+ * - Airways and waypoint requirements
8
+ * - Restricted airspace avoidance
9
+ * - Departure/arrival procedures (SIDs/STARs)
10
+ * - Jet streams and wind optimization
11
+ * - Traffic flow management
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.getAviationRouteDistance = getAviationRouteDistance;
15
+ const KM_TO_MILES = 0.621371;
16
+ const KM_TO_NAUTICAL_MILES = 0.539957;
17
+ /**
18
+ * Get the aviation route distance between two airports.
19
+ * Uses industry-standard routing factors to estimate actual flight distance.
20
+ */
21
+ function getAviationRouteDistance(fromIata, toIata, geoDistance) {
22
+ const estimatedKm = estimateAviationDistance(geoDistance.km, fromIata, toIata);
23
+ return {
24
+ km: estimatedKm,
25
+ miles: estimatedKm * KM_TO_MILES,
26
+ nauticalMiles: estimatedKm * KM_TO_NAUTICAL_MILES,
27
+ source: "Calculated (Great Circle + industry routing factors)",
28
+ };
29
+ }
30
+ /**
31
+ * Known route corrections for specific airport pairs.
32
+ * These are based on published flight distances from airlines and aviation authorities.
33
+ * Values represent the multiplier to apply to great circle distance.
34
+ */
35
+ const ROUTE_CORRECTIONS = {
36
+ // Transatlantic routes (North Atlantic Tracks add distance)
37
+ "JFK-LHR": 1.02,
38
+ "LHR-JFK": 1.02,
39
+ "LAX-LHR": 1.03,
40
+ "LHR-LAX": 1.03,
41
+ // Transpacific routes
42
+ "LAX-NRT": 1.02,
43
+ "NRT-LAX": 1.02,
44
+ "SFO-HKG": 1.03,
45
+ "HKG-SFO": 1.03,
46
+ // Routes avoiding restricted airspace
47
+ "LHR-SIN": 1.04,
48
+ "SIN-LHR": 1.04,
49
+ "DXB-JFK": 1.03,
50
+ "JFK-DXB": 1.03,
51
+ };
52
+ /**
53
+ * Estimate aviation distance based on great circle distance and routing factors.
54
+ *
55
+ * The estimation uses several factors:
56
+ * 1. Base routing overhead (airways, waypoints)
57
+ * 2. Distance-based adjustments (short flights have proportionally more overhead)
58
+ * 3. Known route corrections for specific airport pairs
59
+ */
60
+ function estimateAviationDistance(greatCircleKm, fromIata, toIata) {
61
+ // Check for known route corrections first
62
+ const routeKey = `${fromIata}-${toIata}`;
63
+ const knownCorrection = ROUTE_CORRECTIONS[routeKey];
64
+ if (knownCorrection) {
65
+ return greatCircleKm * knownCorrection;
66
+ }
67
+ // Calculate base factor based on distance
68
+ // Industry data shows:
69
+ // - Very short flights (<500km): ~10% overhead due to SID/STAR procedures
70
+ // - Short flights (500-1500km): ~7% overhead
71
+ // - Medium flights (1500-5000km): ~5% overhead
72
+ // - Long-haul flights (5000-10000km): ~4% overhead
73
+ // - Ultra long-haul (>10000km): ~3% overhead (more optimized routing)
74
+ let factor;
75
+ if (greatCircleKm < 500) {
76
+ // Very short flights - significant overhead from departure/arrival procedures
77
+ factor = 1.10;
78
+ }
79
+ else if (greatCircleKm < 1500) {
80
+ // Short regional flights
81
+ factor = 1.07;
82
+ }
83
+ else if (greatCircleKm < 5000) {
84
+ // Medium-haul flights
85
+ factor = 1.05;
86
+ }
87
+ else if (greatCircleKm < 10000) {
88
+ // Long-haul flights - more optimized but still need to follow airways
89
+ factor = 1.04;
90
+ }
91
+ else {
92
+ // Ultra long-haul - highly optimized great circle routing
93
+ factor = 1.03;
94
+ }
95
+ return greatCircleKm * factor;
96
+ }
97
+ //# sourceMappingURL=aviation-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aviation-api.js","sourceRoot":"","sources":["../src/aviation-api.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAeH,4DAaC;AAxBD,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC7B,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAMtC;;;GAGG;AACH,SAAgB,wBAAwB,CACtC,QAAgB,EAChB,MAAc,EACd,WAAqB;IAErB,MAAM,WAAW,GAAG,wBAAwB,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE/E,OAAO;QACL,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,WAAW,GAAG,WAAW;QAChC,aAAa,EAAE,WAAW,GAAG,oBAAoB;QACjD,MAAM,EAAE,sDAAsD;KAC/D,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,iBAAiB,GAA2B;IAChD,4DAA4D;IAC5D,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IAEf,sBAAsB;IACtB,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IAEf,sCAAsC;IACtC,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,SAAS,wBAAwB,CAC/B,aAAqB,EACrB,QAAgB,EAChB,MAAc;IAEd,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAC;IACzC,MAAM,eAAe,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,aAAa,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,0CAA0C;IAC1C,uBAAuB;IACvB,0EAA0E;IAC1E,6CAA6C;IAC7C,+CAA+C;IAC/C,mDAAmD;IACnD,sEAAsE;IAEtE,IAAI,MAAc,CAAC;IAEnB,IAAI,aAAa,GAAG,GAAG,EAAE,CAAC;QACxB,8EAA8E;QAC9E,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;SAAM,IAAI,aAAa,GAAG,IAAI,EAAE,CAAC;QAChC,yBAAyB;QACzB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;SAAM,IAAI,aAAa,GAAG,IAAI,EAAE,CAAC;QAChC,sBAAsB;QACtB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;SAAM,IAAI,aAAa,GAAG,KAAK,EAAE,CAAC;QACjC,sEAAsE;QACtE,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;SAAM,CAAC;QACN,0DAA0D;QAC1D,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,aAAa,GAAG,MAAM,CAAC;AAChC,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Haversine formula implementation for calculating great circle distance
3
+ * between two points on Earth given their latitude and longitude.
4
+ */
5
+ export interface Distance {
6
+ km: number;
7
+ miles: number;
8
+ nauticalMiles: number;
9
+ }
10
+ /**
11
+ * Calculate the great circle distance between two points using the Haversine formula.
12
+ * @param lat1 Latitude of point 1 in degrees
13
+ * @param lon1 Longitude of point 1 in degrees
14
+ * @param lat2 Latitude of point 2 in degrees
15
+ * @param lon2 Longitude of point 2 in degrees
16
+ * @returns Distance object with km, miles, and nautical miles
17
+ */
18
+ export declare function calculateHaversineDistance(lat1: number, lon1: number, lat2: number, lon2: number): Distance;
19
+ //# sourceMappingURL=haversine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"haversine.d.ts","sourceRoot":"","sources":["../src/haversine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACvB;AAUD;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,QAAQ,CAoBV"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ /**
3
+ * Haversine formula implementation for calculating great circle distance
4
+ * between two points on Earth given their latitude and longitude.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.calculateHaversineDistance = calculateHaversineDistance;
8
+ const EARTH_RADIUS_KM = 6371;
9
+ const KM_TO_MILES = 0.621371;
10
+ const KM_TO_NAUTICAL_MILES = 0.539957;
11
+ function toRadians(degrees) {
12
+ return degrees * (Math.PI / 180);
13
+ }
14
+ /**
15
+ * Calculate the great circle distance between two points using the Haversine formula.
16
+ * @param lat1 Latitude of point 1 in degrees
17
+ * @param lon1 Longitude of point 1 in degrees
18
+ * @param lat2 Latitude of point 2 in degrees
19
+ * @param lon2 Longitude of point 2 in degrees
20
+ * @returns Distance object with km, miles, and nautical miles
21
+ */
22
+ function calculateHaversineDistance(lat1, lon1, lat2, lon2) {
23
+ const dLat = toRadians(lat2 - lat1);
24
+ const dLon = toRadians(lon2 - lon1);
25
+ const lat1Rad = toRadians(lat1);
26
+ const lat2Rad = toRadians(lat2);
27
+ const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
28
+ Math.cos(lat1Rad) * Math.cos(lat2Rad) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
29
+ const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
30
+ const km = EARTH_RADIUS_KM * c;
31
+ return {
32
+ km,
33
+ miles: km * KM_TO_MILES,
34
+ nauticalMiles: km * KM_TO_NAUTICAL_MILES,
35
+ };
36
+ }
37
+ //# sourceMappingURL=haversine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"haversine.js","sourceRoot":"","sources":["../src/haversine.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAwBH,gEAyBC;AAzCD,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC7B,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAEtC,SAAS,SAAS,CAAC,OAAe;IAChC,OAAO,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,0BAA0B,CACxC,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY;IAEZ,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAEpC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAEhC,MAAM,CAAC,GACL,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAElF,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEzD,MAAM,EAAE,GAAG,eAAe,GAAG,CAAC,CAAC;IAE/B,OAAO;QACL,EAAE;QACF,KAAK,EAAE,EAAE,GAAG,WAAW;QACvB,aAAa,EAAE,EAAE,GAAG,oBAAoB;KACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const commander_1 = require("commander");
5
+ const airports_1 = require("./airports");
6
+ const haversine_1 = require("./haversine");
7
+ const aviation_api_1 = require("./aviation-api");
8
+ const program = new commander_1.Command();
9
+ program
10
+ .name("airport-dist")
11
+ .description("Calculate geographical and aviation route distances between airports")
12
+ .version("1.0.0")
13
+ .requiredOption("-f, --from <code>", "Origin airport IATA code (e.g., JFK)")
14
+ .requiredOption("-t, --to <code>", "Destination airport IATA code (e.g., LAX)")
15
+ .action(async (options) => {
16
+ const fromCode = options.from.toUpperCase();
17
+ const toCode = options.to.toUpperCase();
18
+ console.log(`\nCalculating distances from ${fromCode} to ${toCode}...\n`);
19
+ // Get airport data
20
+ const fromAirport = await (0, airports_1.getAirportByIata)(fromCode);
21
+ const toAirport = await (0, airports_1.getAirportByIata)(toCode);
22
+ if (!fromAirport) {
23
+ console.error(`Error: Airport with IATA code "${fromCode}" not found.`);
24
+ process.exitCode = 1;
25
+ return;
26
+ }
27
+ if (!toAirport) {
28
+ console.error(`Error: Airport with IATA code "${toCode}" not found.`);
29
+ process.exitCode = 1;
30
+ return;
31
+ }
32
+ console.log("Airports Found:");
33
+ console.log(` From: ${fromAirport.name} (${fromAirport.city}, ${fromAirport.country})`);
34
+ console.log(` To: ${toAirport.name} (${toAirport.city}, ${toAirport.country})`);
35
+ console.log("");
36
+ // Calculate geographical distance (great circle)
37
+ const geoDistance = (0, haversine_1.calculateHaversineDistance)(fromAirport.latitude, fromAirport.longitude, toAirport.latitude, toAirport.longitude);
38
+ console.log("=".repeat(60));
39
+ console.log("DISTANCE RESULTS");
40
+ console.log("=".repeat(60));
41
+ console.log("");
42
+ console.log("1. GEOGRAPHICAL DISTANCE (Great Circle / Haversine):");
43
+ console.log(` ${geoDistance.km.toFixed(2)} km`);
44
+ console.log(` ${geoDistance.miles.toFixed(2)} miles`);
45
+ console.log(` ${geoDistance.nauticalMiles.toFixed(2)} nautical miles`);
46
+ console.log("");
47
+ // Get aviation route distance
48
+ const aviationDistance = (0, aviation_api_1.getAviationRouteDistance)(fromCode, toCode, geoDistance);
49
+ console.log("2. AVIATION ROUTE DISTANCE:");
50
+ console.log(` ${aviationDistance.km.toFixed(2)} km`);
51
+ console.log(` ${aviationDistance.miles.toFixed(2)} miles`);
52
+ console.log(` ${aviationDistance.nauticalMiles.toFixed(2)} nautical miles`);
53
+ console.log(` Source: ${aviationDistance.source}`);
54
+ console.log("");
55
+ console.log("=".repeat(60));
56
+ console.log("");
57
+ console.log("Note: Aviation routes may differ from great circle distance due to");
58
+ console.log("airways, restricted airspace, weather patterns, and traffic flow.");
59
+ console.log("");
60
+ });
61
+ program.parse();
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,yCAA8C;AAC9C,2CAAyD;AACzD,iDAA0D;AAE1D,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,cAAc,CAAC;KACpB,WAAW,CAAC,sEAAsE,CAAC;KACnF,OAAO,CAAC,OAAO,CAAC;KAChB,cAAc,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;KAC3E,cAAc,CAAC,iBAAiB,EAAE,2CAA2C,CAAC;KAC9E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;IAExC,OAAO,CAAC,GAAG,CAAC,gCAAgC,QAAQ,OAAO,MAAM,OAAO,CAAC,CAAC;IAE1E,mBAAmB;IACnB,MAAM,WAAW,GAAG,MAAM,IAAA,2BAAgB,EAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,MAAM,IAAA,2BAAgB,EAAC,MAAM,CAAC,CAAC;IAEjD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,kCAAkC,QAAQ,cAAc,CAAC,CAAC;QACxE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,MAAM,cAAc,CAAC,CAAC;QACtE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,WAAW,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,iDAAiD;IACjD,MAAM,WAAW,GAAG,IAAA,sCAA0B,EAC5C,WAAW,CAAC,QAAQ,EACpB,WAAW,CAAC,SAAS,EACrB,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,SAAS,CACpB,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,8BAA8B;IAC9B,MAAM,gBAAgB,GAAG,IAAA,uCAAwB,EAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAEjF,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,MAAM,gBAAgB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,MAAM,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,cAAc,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IAErD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "airport-dist",
3
+ "version": "1.0.0",
4
+ "description": "CLI tool to calculate geographical and aviation route distances between airports",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "airport-dist": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "prepublishOnly": "npm run build",
18
+ "start": "node dist/index.js"
19
+ },
20
+ "keywords": [
21
+ "airport",
22
+ "distance",
23
+ "aviation",
24
+ "flight",
25
+ "cli",
26
+ "iata",
27
+ "haversine",
28
+ "great-circle",
29
+ "travel"
30
+ ],
31
+ "author": "Abdulaziz Almalki",
32
+ "license": "MIT",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": ""
36
+ },
37
+ "engines": {
38
+ "node": ">=18.0.0"
39
+ },
40
+ "devDependencies": {
41
+ "@types/node": "^20.10.0",
42
+ "typescript": "^5.3.0"
43
+ },
44
+ "dependencies": {
45
+ "commander": "^11.1.0"
46
+ }
47
+ }