{"version":3,"sources":["jsdelivr-header.js","/npm/airports-api@1.0.0/src/index.js"],"names":[],"mappings":"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","file":"/npm/airports-api@1.0.0/src/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.19.2.\n * Original file: /npm/airports-api@1.0.0/src/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const express = require('express')\nconst app = express()\nconst cors = require('cors')\n\nconst raw = require('../data/airports.json')\n\nconst data_arr = []\nconst idx_by_icao = {}\nconst idx_by_iata = {}\nconst idx_by_city = {}\nconst idx_by_country_city = {}\nconst idx_country_by_city = {}\nconst iata_excludes = new Set(['0', '---'])\nfor (let [icao, data] of Object.entries(raw)) {\n  const ind = data_arr.length\n  data_arr.push(data)\n  idx_by_icao[icao] = ind\n  if (data.iata && !iata_excludes.has(data.iata)) idx_by_iata[data.iata] = ind\n  if (data.city) {\n    if (!idx_by_city[data.city]) idx_by_city[data.city] = new Set([ind])\n    else idx_by_city[data.city].add(ind)\n\n    if (!idx_by_country_city[data.country]) idx_by_country_city[data.country] = { [data.city]: new Set([ind]) }\n    else if (!idx_by_country_city[data.country][data.city]) idx_by_country_city[data.country][data.city] = new Set([ind])\n    else idx_by_country_city[data.country][data.city].add(ind)\n\n    if (!idx_country_by_city[data.city]) idx_country_by_city[data.city] = new Set([data.country])\n    else idx_country_by_city[data.city].add(data.country)\n  }\n}\n\nconst getOr = (col, idx) => (ind, substitute) => (ind && idx[ind] && col[idx[ind]]) ? col[idx[ind]] : substitute\nconst getByIata = getOr(data_arr, idx_by_iata)\nconst getByIcao = getOr(data_arr, idx_by_icao)\n\nconst api = express.Router()\n\nconst sendAirport = (res, d) => d ? res.json(d) : res.status(404).json({error: 'Airport Not Found'})\n\napi.get('/iata/:code', (req, res) => {\n  const d = getByIata(req.params.code, null)\n  sendAirport(res, d)\n})\n\napi.get('/iata/?', (req, res) => {\n  res.json({\n    codes: Object.keys(idx_by_iata).sort()\n  })\n})\n\nconst icao_handler = (req, res) => {\n  const d = getByIcao(req.params.code, null)\n  sendAirport(res, d)\n}\n\napi.get('/icao/:code', icao_handler)\n\napi.get('/icao', (req, res) => {\n  res.json({\n    codes: Object.keys(idx_by_icao).sort()\n  })\n})\n\napi.get('/city/:city', (req, res) => {\n  const inds = idx_by_city[req.params.city]\n  const countries = idx_country_by_city[req.params.city]\n  if (inds) {\n    const response = {\n      city: req.params.city,\n      airports: Array.from(inds).map(k => data_arr[k].icao)\n    }\n    if (countries.size > 1) {\n      response.error = 'Multiple countries, results are merged. Use /:country/:city instead'\n      response.countries = Array.from(countries)\n    }\n    res.json(response)\n  } else {\n    res.status(404).json({error: 'City Not Found'})\n  }\n})\n\napp.get('/city', (req, res) => {\n  res.json({\n    cities: Object.keys(idx_by_city).sort()\n  })\n})\n\napi.get('/:country/:city', (req, res) => {\n  const airports = idx_by_country_city[req.params.country] && idx_by_country_city[req.params.country][req.params.city]\n  if (airports) {\n    res.json({\n      country: req.params.country,\n      city: req.params.city,\n      airports: Array.from(airports).map(k => data_arr[k].icao)\n    })\n  } else {\n    res.status(404).json({error: 'Country/City Not Found'})\n  }\n})\n\napi.get('/:country', (req, res) => {\n  const cities = idx_by_country_city[req.params.country]\n  if (cities) {\n    res.json({\n      country: req.params.country,\n      cities: Object.entries(cities).map(([city, airports]) => ({name: city, airports: airports.size}))\n    })\n  } else {\n    res.status(404).json({error: 'Country Not Found'})\n  }\n})\n\napi.get('/:country/:city/:code', icao_handler)\n\nconst index = {\n  endpoints: {\n      iata: '/iata',\n      icao: '/icao',\n      countries: Object.keys(idx_by_country_city).reduce((obj, country) => ((obj[country] = '/' + country), obj), {})\n  }\n}\n\napp.use(cors())\napp.use(api)\napp.get('/', (req, res) => res.json(index))\n\nconst port = process.env.PORT || 8080\napp.listen(port, () => console.log('Started listening on localhost:%s', port))\n"]}