UNPKG

@golemio/pid

Version:
94 lines 5.26 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TransferDepartureCacheTransformation = void 0; const RouteTypeEnums_1 = require("../../../../helpers/RouteTypeEnums"); const TransferBoardIconsResolver_1 = require("../../helpers/TransferBoardIconsResolver"); const shared_1 = require("../../../shared"); const AbstractTransformation_1 = require("@golemio/core/dist/helpers/transformation/AbstractTransformation"); const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe"); const HeadsignFormatter_1 = require("../helpers/HeadsignFormatter"); let TransferDepartureCacheTransformation = class TransferDepartureCacheTransformation extends AbstractTransformation_1.AbstractTransformation { constructor() { super(...arguments); this.name = "TransferDepartureCacheTransformation"; this.transformArray = (data) => { const departures = new Map(); const routeDirectionCount = new Map(); const directionIdCache = new Map(); const res = []; for (const { departure, position, stopTime } of data) { const directionId = this.resolveDirectionId(departure, position, directionIdCache); const routeDirectionKey = `${departure.route_short_name}-${departure.route_type}-${directionId}`; if (departure.route_type === RouteTypeEnums_1.GTFSRouteTypeEnum.METRO) { const dep = departures.get(routeDirectionKey); if (dep) { if (dep.departure_timestamp.minutes.length >= 2) { continue; } dep.departure_timestamp.minutes.push(this.calculateDepartureMinutes(departure.predictedDepartureDate)); departures.set(routeDirectionKey, dep); } else { departures.set(routeDirectionKey, this.transformInternal({ departure, position, stopTime })); } } else { const currentCount = routeDirectionCount.get(routeDirectionKey) ?? 0; if (currentCount >= 2) { continue; } res.push(this.transformInternal({ departure, position, stopTime })); routeDirectionCount.set(routeDirectionKey, currentCount + 1); } } return [...Array.from(departures.values()), ...res]; }; this.transformInternal = (data) => { const { departure } = data; return { departure_timestamp: { minutes: [this.calculateDepartureMinutes(departure.predictedDepartureDate)], }, route: { short_name: departure.route_short_name, type: departure.route_type, }, stop: { platform_code: shared_1.PlatformCodeResolver.fromStopTimeCisShort(data.departure, data.stopTime), }, trip: { headsign: HeadsignFormatter_1.HeadsignFormatter.format(departure.trip_headsign), id: departure.trip_id, is_wheelchair_accessible: departure.is_wheelchair_accessible ?? null, is_guaranteed_transfer: departure.is_guaranteed_transfer ?? false, }, icons: TransferBoardIconsResolver_1.TransferBoardIconsResolver.headsignToIconsList(data.departure.trip_headsign_icons, departure.route_type, null), substitution_text: null, }; }; } calculateDepartureMinutes(departureTime) { const departure_minutes = shared_1.DepartureCalculator.getDepartureMinutes(departureTime); if (departure_minutes < 1) { return "<1"; } return departure_minutes.toString(); } resolveDirectionId(departure, position, directionIdCache) { const cacheKey = `${departure.route_short_name}_${departure.trip_headsign}`; const directionId = departure.direction_id ?? position?.detailed_info?.direction_id ?? directionIdCache.get(cacheKey) ?? 0; directionIdCache.set(cacheKey, directionId); return directionId; } }; exports.TransferDepartureCacheTransformation = TransferDepartureCacheTransformation; exports.TransferDepartureCacheTransformation = TransferDepartureCacheTransformation = __decorate([ (0, tsyringe_1.injectable)() ], TransferDepartureCacheTransformation); //# sourceMappingURL=TransferDepartureCacheTransformation.js.map