UNPKG

@geoapify/route-planner-sdk

Version:

TypeScript SDK for the Geoapify Route Planner API. Supports route optimization, delivery planning, and timeline visualization in browser and Node.js

93 lines (92 loc) 3.06 kB
import { AgentNotFound, JobNotFound, ShipmentNotFound } from "../models/entities/route-editor-exceptions"; /** * Helper class for converting IDs to indexes and vice versa */ export class IndexConverter { /** * Converts agent ID or index to index */ static convertAgentToIndex(data, agentIdOrIndex, throwExceptionIfNotFound = false) { if (typeof agentIdOrIndex === "number") { return agentIdOrIndex; } let index = data.properties.params.agents.findIndex(agent => agent.id === agentIdOrIndex); if (index === -1) { if (throwExceptionIfNotFound) { throw new AgentNotFound(`Agent with id ${agentIdOrIndex} not found`, agentIdOrIndex); } return -1; } else { return index; } } /** * Converts job ID or index to index */ static convertJobToIndex(data, jobIdOrIndex) { if (typeof jobIdOrIndex === "number") { return jobIdOrIndex; } let jobIndex = data.properties.params.jobs.findIndex(job => job.id === jobIdOrIndex); if (jobIndex < 0) { return -1; } else { return jobIndex; } } /** * Converts shipment ID or index to index */ static convertShipmentToIndex(data, shipmentIdOrIndex) { if (typeof shipmentIdOrIndex === "number") { return shipmentIdOrIndex; } let shipmentIndex = data.properties.params.shipments.findIndex(shipment => shipment.id === shipmentIdOrIndex); if (shipmentIndex < 0) { return -1; } else { return shipmentIndex; } } /** * Converts multiple job IDs or indexes to indexes */ static convertJobsToIndexes(data, jobIndexesOrIds) { if (typeof jobIndexesOrIds[0] === "number") { return jobIndexesOrIds; } let jobIndexes = []; jobIndexesOrIds.forEach(jobId => { let jobIndex = data.properties.params.jobs.findIndex(job => job.id === jobId); if (jobIndex < 0) { throw new JobNotFound(`Job with id ${jobId} not found`, jobId); } else { jobIndexes.push(jobIndex); } }); return jobIndexes; } /** * Converts multiple shipment IDs or indexes to indexes */ static convertShipmentsToIndexes(data, shipmentIds) { if (typeof shipmentIds[0] === "number") { return shipmentIds; } let shipmentIndexes = []; shipmentIds.forEach(shipmentId => { let shipmentIndex = data.properties.params.shipments.findIndex(shipment => shipment.id === shipmentId); if (shipmentIndex < 0) { throw new ShipmentNotFound(`Shipment with id ${shipmentId} not found`, shipmentId); } else { shipmentIndexes.push(shipmentIndex); } }); return shipmentIndexes; } }