A TypeScript library for working with OurAirports Data data. This library provides easy access to airport information, including IATA/ICAO codes, geographical coordinates, and more.
Warning
🔧 This library is not yet ready for production use. It is still under development.
This project uses only clean data containing IATA Code airports in order to reduce the size of the package.
Important
This is not an official project of OurAirports.com!
- 🌐 Universal package that works in both Node.js and browser environments
- 🔍 Search airports by IATA/ICAO codes
- 🗺️ Find airports by country or within a radius
- ✨ TypeScript support with full type definitions
- 🚀 Modern ESM package with tree-shaking support
- ⚡ Efficient data loading with sharding
- 🔒 Data validation using Zod schemas
- 📦 Automatic environment detection and optimization
npm install ourairports-data-js
# or
yarn add ourairports-data-js
# or
pnpm add ourairports-data-js
# or
bun add ourairports-data-js
<!-- Using unpkg -->
<script type="module">
import OurAirports from 'https://unpkg.com/ourairports-data-js/dist/browser/index.js';
const airports = new OurAirports();
await airports.init();
</script>
<!-- Using jsDelivr -->
<script type="module">
import OurAirports from 'https://cdn.jsdelivr.net/npm/ourairports-data-js/dist/browser/index.js';
const airports = new OurAirports();
await airports.init();
</script>
The library automatically detects your environment (Node.js or browser) and uses the appropriate implementation:
import OurAirports from 'ourairports-data-js';
async function main() {
// Create instance
const airports = new OurAirports();
// Initialize (auto-detects environment)
await airports.init();
// Find airport by IATA code
const pek = airports.findByIataCode('PEK');
console.log(pek?.name); // "Beijing Capital International Airport"
console.log(pek?.type); // "large_airport"
// Find airport by ICAO code
const zbaa = airports.findByIcaoCode('ZBAA');
console.log(zbaa?.name); // "Beijing Capital International Airport"
// Find airports in China
const chineseAirports = airports.findByCountry('CN');
console.log(`Found ${chineseAirports.length} airports in China`);
// Find airports within 100km radius of Beijing Capital Airport
const nearbyAirports = airports.findAirportsInRadius(40.0799, 116.6031, 100);
console.log(
'Nearby airports:',
nearbyAirports.map(a => a.name)
);
// Search airports with filters
const largeAirports = airports.searchAirports({
type: 'large_airport',
hasIataCode: true,
hasScheduledService: true,
country: 'CN',
continent: 'AS',
});
}
main().catch(console.error);
You can explicitly import the environment-specific version if needed:
// Browser-specific import
import OurAirports from 'ourairports-data-js/browser';
// Node.js-specific import
import OurAirports from 'ourairports-data-js/node';
// Import types
import type {
BasicInfo, // Airport basic information
AirportFilter, // Search filter interface
AirportType, // Airport type enum
Coordinates, // Airport coordinates
Region, // Airport region information
} from 'ourairports-data-js';
// Import validation schemas
import { BasicInfoSchema, CoordinatesSchema, RegionSchema } from 'ourairports-data-js';
// Find by IATA code
const pek = airports.findByIataCode('PEK');
console.log(pek?.name); // "Beijing Capital International Airport"
// Find by ICAO code
const zbaa = airports.findByIcaoCode('ZBAA');
console.log(zbaa?.name); // "Beijing Capital International Airport"
// Search for major airports in China
const majorAirports = airports.searchAirports({
type: 'large_airport',
country: 'CN',
hasIataCode: true,
hasScheduledService: true,
continent: 'AS',
});
// Find airports within radius
const nearbyAirports = airports.findAirportsInRadius(
40.0799, // latitude
116.6031, // longitude
100 // radius in kilometers
);
// Get access to raw data for advanced usage
const { basicInfo, codes, coordinates, region, references } = airports.data;
// Check current environment
if (airports.isInBrowser) {
console.log('Running in browser');
} else {
console.log('Running in Node.js');
}
new OurAirports()
- Create a new instance
init()
- Auto-detect environment and initialize (recommended)initialize()
- Explicit Node.js initializationinitializeAsync()
- Explicit browser initialization
findByIataCode(code: string): BasicInfo | undefined
- Find airport by IATA codefindByIcaoCode(code: string): BasicInfo | undefined
- Find airport by ICAO codefindByCountry(countryCode: string): BasicInfo[]
- Find airports by country codefindAirportsInRadius(lat: number, lon: number, radiusKm: number): BasicInfo[]
- Find airports within radiussearchAirports(filter: AirportFilter): BasicInfo[]
- Search airports with filters
isInitialized: boolean
- Check if the instance is initializedisInBrowser: boolean
- Check if running in browser environmentdata: AirportData
- Get raw data for advanced usage
interface AirportFilter {
type?: string; // e.g., 'large_airport', 'medium_airport', 'small_airport'
country?: string; // ISO country code, e.g., 'US', 'CN'
continent?: string; // Continent code, e.g., 'NA', 'AS'
hasIataCode?: boolean; // Whether the airport has an IATA code
hasScheduledService?: boolean; // Whether the airport has scheduled service
}
interface BasicInfo {
id: number; // Unique identifier
ident: string; // Airport identifier (usually ICAO code)
type: string; // Airport type
name: string; // Airport name
// ... more fields available in ./src/types.ts
}
The library uses data from OurAirports, which is updated periodically:
- Node.js: Data is bundled with the package
- Browser: Data is automatically fetched from CDN
- Updates are delivered with each package release
- Synchronous data loading available
- File system access for data files
- Better performance with local data
- CommonJS and ESM support
- Automatic CDN data loading
- No file system dependencies
- Optimized bundle size
- Modern ESM format
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - see the LICENSE file for details.
- Data provided by OurAirports
- Built with TypeScript and Zod
- Powered by jsDelivr CDN for browser environments