@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
JavaScript
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;
}
}