UNPKG

nextbus-graphql

Version:

A GraphQL interface to the NextBus XML Feed

89 lines (74 loc) 3.2 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; exports.default = function () { const getAgencies = (0, _memoizeId2.default)(nb.getAgencies); const agencyLoader = new _dataloader2.default((() => { var _ref = _asyncToGenerator(function* (agencyTags) { const agencies = yield getAgencies(); return agencyTags.map(function (tag) { return agencies.find(function (agency) { return agency.tag === tag; }) || new Error(`No agency with tag: "${ tag }"`); }); }); return function (_x) { return _ref.apply(this, arguments); }; })()); const routeLoader = new _dataloader2.default(agencyTags => Promise.all(agencyTags.map((() => { var _ref2 = _asyncToGenerator(function* (agencyTag) { const routes = yield nb.getRoutes(agencyTag); return routes.map(function (route) { return _extends({}, route, { agencyTag }); }); }); return function (_x2) { return _ref2.apply(this, arguments); }; })()))); const routeConfigLoader = new _dataloader2.default(compositeKeys => Promise.all(compositeKeys.map((() => { var _ref3 = _asyncToGenerator(function* (compositeKey) { const [agencyTag, routeTag] = compositeKey.split(':'); return _extends({}, (yield nb.getRoute(agencyTag, routeTag)), { agencyTag }); }); return function (_x3) { return _ref3.apply(this, arguments); }; })()))); return { getAgencies() { return _asyncToGenerator(function* () { const agencies = yield getAgencies(); agencies.forEach(function (agency) { return agencyLoader.prime(agency.tag, agency); }); return agencies; })(); }, getAgency(tag) { return agencyLoader.load(tag); }, getRoutes(agencyTag) { return routeLoader.load(agencyTag); }, getRoute(agencyTag, routeTag) { return routeConfigLoader.load(`${ agencyTag }:${ routeTag }`); } }; }; var _dataloader = require('dataloader'); var _dataloader2 = _interopRequireDefault(_dataloader); var _memoizeId = require('memoize-id'); var _memoizeId2 = _interopRequireDefault(_memoizeId); var _nextbus = require('nextbus'); var _nextbus2 = _interopRequireDefault(_nextbus); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } const nb = (0, _nextbus2.default)({ onRequest(uri) { console.info('Request to NextBus:', uri); } });