@twinmatrix/spatialverse-sdk-web 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js +2 -2
  2. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js.map +1 -1
  3. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js +4 -3
  4. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js.map +1 -1
  5. package/lib/cjs/meta-atlas-sdk/3DMap/MainMap.js +202 -198
  6. package/lib/cjs/meta-atlas-sdk/3DMap/MainMap.js.map +1 -1
  7. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js +3 -3
  8. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js.map +1 -1
  9. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js +32 -29
  10. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js.map +1 -1
  11. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js +10 -13
  12. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js.map +1 -1
  13. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js +55 -68
  14. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js.map +1 -1
  15. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js +12 -12
  16. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js.map +1 -1
  17. package/lib/cjs/meta-atlas-sdk/meta-atlas-sdk.js +73 -69
  18. package/lib/cjs/meta-atlas-sdk/meta-atlas-sdk.js.map +1 -1
  19. package/lib/cjs/meta-atlas-sdk/utils/helpers.js +1 -1
  20. package/lib/cjs/meta-atlas-sdk/utils/helpers.js.map +1 -1
  21. package/lib/cjs/meta-atlas-sdk/utils/local-storage.js +6 -1
  22. package/lib/cjs/meta-atlas-sdk/utils/local-storage.js.map +1 -1
  23. package/lib/cjs/meta-atlas-sdk/utils/routing-visualizer/index.js +103 -103
  24. package/lib/cjs/meta-atlas-sdk/utils/routing-visualizer/index.js.map +1 -1
  25. package/lib/cjs/react/MetaAtlasMap.js +4 -4
  26. package/lib/cjs/react/MetaAtlasMap.js.map +1 -1
  27. package/lib/cjs/react/hooks/useMapEvents/index.js +6 -3
  28. package/lib/cjs/react/hooks/useMapEvents/index.js.map +1 -1
  29. package/lib/cjs/react/hooks/useStampRally/index.js +7 -5
  30. package/lib/cjs/react/hooks/useStampRally/index.js.map +1 -1
  31. package/lib/cjs/react/hooks/useStampRally/utils.js +1 -1
  32. package/lib/cjs/react/hooks/useStampRally/utils.js.map +1 -1
  33. package/lib/cjs/react/stores/useMapDataStore.js +17 -21
  34. package/lib/cjs/react/stores/useMapDataStore.js.map +1 -1
  35. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js +2 -2
  36. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js.map +1 -1
  37. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js +4 -3
  38. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js.map +1 -1
  39. package/lib/esm/meta-atlas-sdk/3DMap/MainMap.js +202 -198
  40. package/lib/esm/meta-atlas-sdk/3DMap/MainMap.js.map +1 -1
  41. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js +3 -3
  42. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js.map +1 -1
  43. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js +34 -31
  44. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js.map +1 -1
  45. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js +10 -8
  46. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js.map +1 -1
  47. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js +55 -68
  48. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js.map +1 -1
  49. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js +12 -12
  50. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js.map +1 -1
  51. package/lib/esm/meta-atlas-sdk/meta-atlas-sdk.js +73 -68
  52. package/lib/esm/meta-atlas-sdk/meta-atlas-sdk.js.map +1 -1
  53. package/lib/esm/meta-atlas-sdk/utils/helpers.js +1 -1
  54. package/lib/esm/meta-atlas-sdk/utils/helpers.js.map +1 -1
  55. package/lib/esm/meta-atlas-sdk/utils/local-storage.js +6 -1
  56. package/lib/esm/meta-atlas-sdk/utils/local-storage.js.map +1 -1
  57. package/lib/esm/meta-atlas-sdk/utils/routing-visualizer/index.js +103 -101
  58. package/lib/esm/meta-atlas-sdk/utils/routing-visualizer/index.js.map +1 -1
  59. package/lib/esm/react/MetaAtlasMap.js +4 -4
  60. package/lib/esm/react/MetaAtlasMap.js.map +1 -1
  61. package/lib/esm/react/hooks/useMapEvents/index.js +6 -3
  62. package/lib/esm/react/hooks/useMapEvents/index.js.map +1 -1
  63. package/lib/esm/react/hooks/useStampRally/index.js +7 -5
  64. package/lib/esm/react/hooks/useStampRally/index.js.map +1 -1
  65. package/lib/esm/react/hooks/useStampRally/utils.js +1 -1
  66. package/lib/esm/react/hooks/useStampRally/utils.js.map +1 -1
  67. package/lib/esm/react/stores/useMapDataStore.js +17 -21
  68. package/lib/esm/react/stores/useMapDataStore.js.map +1 -1
  69. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.d.ts +30 -0
  70. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.d.ts.map +1 -0
  71. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.d.ts +5 -0
  72. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.d.ts.map +1 -0
  73. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.d.ts +21 -0
  74. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.d.ts.map +1 -0
  75. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.d.ts +27 -0
  76. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.d.ts.map +1 -0
  77. package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.d.ts +18 -0
  78. package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.d.ts.map +1 -0
  79. package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.d.ts +37 -0
  80. package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.d.ts.map +1 -0
  81. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["aStar","createGraph","point","multiPoint","turf","cloneDeep","isEmpty","toInteger","LineDirection","RouteDimension","WALK_SPEED","getNetworkFeatures","getEdge","getPortalDataForDimension","isMovingPortalTaxonomy","isPortalTaxonomy","DEFAULT_DIMENSION","filterPortalEdgeDataByList","filterPortalEdgeDataByWhere","getParentDimension","optimized","RoutingCore","wheelChairAccessibleRouteOnly","startNode","endNode","changeZoneCheckEnabled","runIntersection","portalData","edgeData","lines","addVertex","graph","coords","mapObjectId","where","what","zone","updateMapObjectId","arguments","length","undefined","vertexName","toString","vertex","getNode","data","zoneUnionVertex","addNode","addLink","vertex1","vertex2","cost","description","timeInSeconds","isPortal","wheelChairAccesible","id","weight","getDistance","coords1","coords2","point1","point2","distance","units","addEdgeToGraph","edge","node","index","line","getCoords","i","Edge","properties","direction","Forward","TwoWay","wheelchair","Backward","addNetworkToGraph","networkFeatures","feature","geometry","type","lineCoords","dimension_where","Network","addVertexByEdge","addPortalLinksToGraph","portalEdgeData","mapObjectId1","portal","links","portalLink","portal1","portal2","initLineString","coordinates","pathToFeatures","source","destination","vertices","segments","segmentStartVertexData","geojsonPaths","curVertex","prevVertex","segment","console","warn","portalPath","getPortalPath","invertStart","prevVertexMapObjId","set","Set","add","portalDataForSet","prevVertexPortalData","j","link","pathFeatures","start","end","distanceToStart","distanceToEnd","coordsToUse","slice","reverse","lineString","getLink","geojson","edges","startFloor","endFloor","push","nextVertex","log","pop","copyOfCurrentVertex","result","routes","findPath","pathFinder","oriented","fromNode","toNode","blocked","isZoneCrossing","parentWhereDimensionOfFromNode","parentWhereDimensionOfStartNode","parentWhereDimensionOfToNode","path","find","setupGraphAndFindPath","networkData","geojsonPath","getRouteWithAllPortals","performance","now","concatenatedEdgeFeatures","concat","concatenatedNetworkFeatures","getRouteWithSpecificPortals","routeWithAllAvailablePortals","portalsToUse","portalDataForList","getDirectRoute","networkFeaturesSourceNode","networkFeaturesDestinationNode","portalDataSourceNode","portalDataDestinationNode","getRoute","mapObjectId2","wheelChairAccessibleRouteOnlyParam","node1","node2","runRouteIteration","directRoute","routeWithAllPortals","finalRoute","route"],"sources":["../../../../../src/meta-atlas-sdk/MetaAtlasCore/routing-core/index.ts"],"sourcesContent":["/* eslint-disable guard-for-in */\n/* eslint-disable no-restricted-syntax */\nimport { aStar } from 'ngraph.path';\nimport createGraph, { Graph, Node } from 'ngraph.graph';\nimport {\n point,\n multiPoint,\n} from '@turf/helpers';\nimport { Feature, LineString, MultiPoint } from 'geojson';\n// import turfDistance from '@turf/distance';\nimport * as turf from '@turf/turf';\nimport { cloneDeep, isEmpty, toInteger } from 'lodash';\nimport {\n CalculationResult, Edge, LineDirection, RouteDimension, RouteResult, WALK_SPEED, EdgeLine, Portal, PortalEdgeData, UserPosition\n} from './interfaces';\nimport {\n getNetworkFeatures, getEdge,\n getPortalDataForDimension,\n} from './mapObjectsHelper';\nimport { isMovingPortalTaxonomy, isPortalTaxonomy } from './routing-helpers';\nimport {\n DEFAULT_DIMENSION, filterPortalEdgeDataByList, filterPortalEdgeDataByWhere, getParentDimension, getPortalEdgeData, optimized,\n} from './utils';\n\n/* eslint-disable @typescript-eslint/no-shadow */\n\nconst RoutingCore = (function () {\n let wheelChairAccessibleRouteOnly = true;\n let startNode: Edge | undefined;\n let endNode: Edge | undefined;\n let changeZoneCheckEnabled = true;\n let runIntersection = false;\n\n let portalData: {\n edgeData: PortalEdgeData,\n lines: EdgeLine[],\n } = { edgeData: {}, lines: [] };\n\n function addVertex(\n graph: Graph,\n coords: number[],\n mapObjectId: string,\n where: string,\n what: string,\n zone: string,\n updateMapObjectId = false,\n ) {\n const vertexName = `${(coords).toString()},${where}`;\n let vertex = graph.getNode(vertexName);\n if (vertex === undefined) {\n const data = {\n mapObjectId,\n coords,\n where,\n what,\n zone,\n zoneUnionVertex: false,\n };\n vertex = graph.addNode(vertexName, data);\n } else if (updateMapObjectId) {\n vertex.data.mapObjectId = mapObjectId;\n\n // Mark the vertex as common vertex between zones\n if (vertex.data.zone !== zone) vertex.data.zoneUnionVertex = true;\n vertex.data.zone = zone;\n }\n return vertex;\n }\n\n function addLink(graph: Graph<any, any>, vertex1 : Node<any>, vertex2 : Node<any>, data :{\n wheelChairAccesible: number,\n cost: number,\n isPortal: boolean,\n description: string | null,\n }) {\n const { cost, description } = data;\n const timeInSeconds = data.isPortal ? cost / WALK_SPEED : cost;\n if (!wheelChairAccessibleRouteOnly || (wheelChairAccessibleRouteOnly && data.wheelChairAccesible)) { graph.addLink(vertex1.id, vertex2.id, { weight: timeInSeconds, cost, description }); }\n }\n\n function getDistance(coords1: number[], coords2: number[]) {\n const point1 = point(coords1);\n const point2 = point(coords2);\n const distance = turf.distance(point1, point2, { units: 'meters' });\n return distance;\n }\n\n function addEdgeToGraph(graph: Graph, edge: Edge) {\n const node = edge;\n if (node) {\n const vertex = addVertex(\n graph,\n node.coords,\n node.id,\n node.where,\n node.what,\n node.zone,\n true,\n );\n for (let index = 0; index < node.lines.length; index += 1) {\n const line = node.lines[index];\n // add edges for coord pairs\n const coords = turf.getCoords(line);\n for (let i = 0; i < coords.length - 1; i += 1) {\n const vertex1 = addVertex(\n graph,\n coords[i],\n 'vertex',\n node.where,\n RouteDimension.Edge,\n line.properties.zone,\n );\n const vertex2 = addVertex(\n graph,\n coords[i + 1],\n 'vertex',\n node.where,\n RouteDimension.Edge,\n line.properties.zone,\n );\n if (vertex1.id !== vertex2.id) {\n const distance = getDistance(coords[i], coords[i + 1]);\n if (line.properties.direction === LineDirection.Forward || line.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex1, vertex2, {\n wheelChairAccesible: line.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n if (line.properties.direction === LineDirection.Backward || line.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex2, vertex1, {\n wheelChairAccesible: line.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n }\n }\n }\n return vertex;\n }\n\n return undefined;\n }\n\n function addNetworkToGraph(graph: Graph, networkFeatures: Feature[]) {\n for (let index = 0; index < networkFeatures.length; index += 1) {\n const feature = networkFeatures[index];\n if (feature.geometry.type === 'LineString') {\n // get line\n const lineCoords = turf.getCoords(feature as any);\n if (feature.properties) {\n const where = feature.properties.dimension_where;\n const what = RouteDimension.Network; // feature.properties.dimension_what;\n const { zone } = feature.properties;\n // add edges for coord pairs\n for (let i = 0; i < lineCoords.length - 1; i += 1) {\n const vertex1 = addVertex(graph, lineCoords[i], 'vertex', where, what, zone, true);\n const vertex2 = addVertex(\n graph,\n lineCoords[i + 1],\n 'vertex',\n where,\n what,\n zone,\n true,\n );\n if (vertex1.id !== vertex2.id) {\n const distance = getDistance(lineCoords[i], lineCoords[i + 1]);\n if (feature.properties.direction === LineDirection.Forward || feature.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex1, vertex2, {\n wheelChairAccesible: feature.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n if (feature.properties.direction === LineDirection.Backward || feature.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex2, vertex1, {\n wheelChairAccesible: feature.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n }\n }\n }\n }\n }\n }\n\n function addVertexByEdge(graph: Graph, edge: Edge) {\n const node = edge;\n if (node === undefined) {\n return undefined;\n }\n return addVertex(\n graph,\n node.coords,\n node.id,\n node.where,\n node.what,\n node.zone,\n true,\n );\n }\n\n function addPortalLinksToGraph(graph: Graph, portalEdgeData: PortalEdgeData) {\n for (const mapObjectId1 in portalEdgeData) {\n const portal = portalEdgeData[mapObjectId1];\n\n for (let index = 0; index < portal.links.length; index += 1) {\n const portalLink = portal.links[index];\n let { cost } = portalLink;\n cost = toInteger(cost);\n // if (cost <= 1) {\n // cost = portalWeight;\n // }\n const { direction, wheelchair, description } = portalLink;\n const portal1 = addVertexByEdge(graph, portal);\n const portal2 = addVertexByEdge(graph, portalLink);\n if (portal1 !== undefined && portal2 !== undefined && portal1.id !== portal2.id) {\n if (direction === LineDirection.Forward || direction === LineDirection.TwoWay) {\n addLink(graph, portal1, portal2, {\n wheelChairAccesible: wheelchair,\n cost,\n description,\n isPortal: true,\n });\n }\n if (direction === LineDirection.Backward || direction === LineDirection.TwoWay) {\n addLink(graph, portal2, portal1, {\n wheelChairAccesible: wheelchair,\n cost,\n description,\n isPortal: true,\n });\n }\n\n addEdgeToGraph(graph, portalLink);\n }\n }\n\n addEdgeToGraph(graph, portal);\n }\n }\n\n function initLineString(vertex: any) {\n return {\n type: 'Feature',\n geometry: { type: 'LineString', coordinates: [vertex.data.coords] },\n properties: {\n dimension_where: vertex.data.where,\n zone: vertex.data.zone,\n cost: 0,\n },\n } as Feature<LineString | MultiPoint, any>;\n }\n\n function pathToFeatures(source: Edge, destination : Edge, vertices: Node<any>[], graph: Graph) {\n if (vertices.length <= 1) {\n return {} as CalculationResult;\n } // if no path found\n\n const startNode = source;\n const endNode = destination;\n\n const segments: RouteResult[] = [];\n let segmentStartVertexData = vertices[0].data;\n const geojsonPaths = [initLineString(vertices[0])];\n\n for (let i = 1; i < vertices.length; i += 1) {\n const curVertex = vertices[i];\n const prevVertex = vertices[i - 1];\n const line = geojsonPaths[geojsonPaths.length - 1];\n\n // if vertex is map object\n if (curVertex.data.mapObjectId !== 'vertex' || curVertex.data.zoneUnionVertex) {\n let segment;\n if (isPortalTaxonomy(prevVertex.data.what) && isPortalTaxonomy(curVertex.data.what)) {\n if (prevVertex.data.zone !== curVertex.data.zone) {\n console.warn('A portal is triggering a change in zone');\n }\n\n // check if portal path is available to visualize\n let portalPath;\n if (isMovingPortalTaxonomy(prevVertex.data.what)) {\n const getPortalPath = (portalEdgeData: PortalEdgeData, curVertex: Node<any>, prevVertex: Node<any>, invertStart = false) => {\n const prevVertexMapObjId = prevVertex.data.mapObjectId;\n const set = new Set<string>().add(prevVertexMapObjId);\n const portalDataForSet = filterPortalEdgeDataByList(portalEdgeData, set);\n if (portalDataForSet && portalDataForSet.edgeData[prevVertexMapObjId]) {\n const prevVertexPortalData = portalDataForSet.edgeData[prevVertexMapObjId];\n for (let j = 0; j < prevVertexPortalData.links.length; j += 1) {\n const link = prevVertexPortalData.links[j];\n if (link.id === curVertex.data.mapObjectId) {\n if (link.pathFeatures && link.pathFeatures.length > 0) {\n const line = link.pathFeatures[0];\n const start = invertStart === false ? prevVertex.data.coords : curVertex.data.coords;\n const end = invertStart === false ? curVertex.data.coords : prevVertex.data.coords;\n\n const distanceToStart = turf.distance(start, line.geometry.coordinates[0]);\n const distanceToEnd = turf.distance(end, line.geometry.coordinates[0]);\n const coordsToUse = distanceToStart < distanceToEnd ? line.geometry.coordinates : line.geometry.coordinates.slice().reverse();\n return turf.lineString(coordsToUse);\n }\n }\n }\n }\n\n return null;\n };\n\n portalPath = getPortalPath(portalData.edgeData, curVertex, prevVertex, false);\n if (!portalPath) portalPath = getPortalPath(portalData.edgeData, prevVertex, curVertex, true);\n }\n\n // TODO: read description here\n const link = graph.getLink(prevVertex.id, curVertex.id);\n const cost = link ? link.data.cost ? link.data.cost : undefined : undefined;\n const description = link ? link.data.description ? link.data.description : undefined : undefined;\n segment = {\n geojson: multiPoint([\n prevVertex.data.coords,\n curVertex.data.coords,\n ], {\n zone: curVertex.data.zone,\n }),\n edges: [prevVertex.data.mapObjectId, curVertex.data.mapObjectId],\n startFloor: prevVertex.data.where,\n endFloor: curVertex.data.where,\n isPortal: true,\n portalPath,\n cost,\n description,\n } as RouteResult;\n\n segments.push(segment);\n segmentStartVertexData = curVertex.data;\n } else {\n const nextVertex = (i + 1 < vertices.length) ? vertices[i + 1] : undefined;\n if (curVertex.data.zoneUnionVertex\n && (prevVertex && nextVertex && prevVertex?.data.zone === nextVertex?.data.zone)) {\n console.log('ignore zoneUnionVertex in segment');\n } else {\n segment = {\n geojson: line,\n edges: [segmentStartVertexData.mapObjectId, curVertex.data.mapObjectId],\n startFloor: segmentStartVertexData.where,\n endFloor: segmentStartVertexData.where,\n isPortal: false,\n portalPath: undefined,\n cost: line.properties.cost,\n };\n\n segments.push(segment);\n segmentStartVertexData = curVertex.data;\n }\n }\n }\n\n // same line\n if (!(isPortalTaxonomy(prevVertex.data.what) && isPortalTaxonomy(curVertex.data.what))) {\n const link = graph.getLink(prevVertex.id, curVertex.id); // returns a link from 'hello' to 'world'\n const cost = link ? link.data.cost ? link.data.cost : undefined : undefined;\n\n line.geometry.coordinates.push(curVertex.data.coords);\n line.properties.cost += cost;\n } else {\n // new line\n if (line.geometry.coordinates.length < 2) {\n geojsonPaths.pop();\n }\n geojsonPaths.push(initLineString(curVertex));\n }\n\n // new line due to change in zone\n if (curVertex.data.zoneUnionVertex) {\n const prevVertex = (i > 0) ? vertices[i - 1] : undefined;\n const nextVertex = (i + 1 < vertices.length) ? vertices[i + 1] : undefined;\n if (prevVertex && nextVertex && prevVertex?.data.zone === nextVertex?.data.zone) {\n console.log('ignore zoneUnionVertex');\n } else\n // Use zone value of next vertex (when available) as current vertex is a common vertex and can have either of the zone values\n if (nextVertex) {\n const copyOfCurrentVertex = cloneDeep(curVertex);\n copyOfCurrentVertex.data.zone = nextVertex.data.zone;\n geojsonPaths.push(initLineString(copyOfCurrentVertex));\n } else {\n geojsonPaths.push(initLineString(curVertex));\n }\n }\n }\n\n const result: CalculationResult = {\n startNode,\n endNode,\n routes: segments,\n distance: 0,\n };\n\n return result;\n }\n\n function findPath(vertex1: Node<any>, vertex2: Node<any>, graph: Graph) {\n // setup ngraph pathfinder\n const pathFinder = aStar(graph, {\n oriented: true,\n distance(fromNode, toNode, link) {\n return link.data.weight;\n },\n blocked(fromNode, toNode, link) {\n if (changeZoneCheckEnabled) {\n const isZoneCrossing = fromNode?.data.zone !== toNode?.data.zone;\n if (isZoneCrossing) {\n const parentWhereDimensionOfFromNode = getParentDimension(fromNode.data.where);\n const parentWhereDimensionOfStartNode = getParentDimension((startNode as Edge).where);\n const parentWhereDimensionOfToNode = getParentDimension(toNode.data.where);\n if (parentWhereDimensionOfFromNode !== parentWhereDimensionOfStartNode && parentWhereDimensionOfToNode !== parentWhereDimensionOfStartNode) {\n return true;\n }\n }\n }\n return false;\n },\n });\n\n // get shortest path\n const path = pathFinder.find(vertex1.id, vertex2.id).reverse();\n return path;\n }\n\n function setupGraphAndFindPath(source: Edge, destination: Edge, portalEdgeData: PortalEdgeData, networkData: Feature[]) {\n // create ngraph graph\n const graph = createGraph();\n\n // add node & node lines to graph\n const vertex1 = addEdgeToGraph(graph, source);\n const vertex2 = addEdgeToGraph(graph, destination);\n\n if (vertex1 && vertex2) {\n // Add portal links\n addPortalLinksToGraph(graph, portalEdgeData);\n\n // add networks to graph\n addNetworkToGraph(graph, networkData);\n\n const path = findPath(vertex1, vertex2, graph);\n // reconstruct path into geojson features\n const geojsonPath = pathToFeatures(source, destination, path, graph);\n return geojsonPath;\n }\n\n return {} as CalculationResult;\n }\n\n function getRouteWithAllPortals(source: Edge, destination: Edge) {\n let start = performance.now();\n\n // Load network data\n const networkFeatures = getNetworkFeatures(DEFAULT_DIMENSION);\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalData.lines);\n const concatenatedNetworkFeatures = networkFeatures;\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeatures.length);\n\n return setupGraphAndFindPath(source, destination, portalData.edgeData, concatenatedNetworkFeatures);\n }\n\n function getRouteWithSpecificPortals(source: Edge, destination: Edge, routeWithAllAvailablePortals: CalculationResult) {\n const portalsToUse = new Set<string>();\n for (let index = 0; routeWithAllAvailablePortals.routes && index < routeWithAllAvailablePortals.routes.length; index += 1) {\n const segment = routeWithAllAvailablePortals.routes[index];\n if (segment.isPortal) {\n portalsToUse.add(segment.edges[0]);\n portalsToUse.add(segment.edges[1]);\n }\n }\n\n let start = performance.now();\n // Load data\n // Load network data\n const networkFeatures = getNetworkFeatures(DEFAULT_DIMENSION);\n // Load portal data\n const portalDataForList = filterPortalEdgeDataByList(portalData.edgeData, portalsToUse);\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalDataForList.lines);\n const concatenatedNetworkFeatures = networkFeatures;\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeatures.length);\n\n return setupGraphAndFindPath(source, destination, portalDataForList.edgeData, concatenatedNetworkFeatures);\n }\n\n function getDirectRoute(source: Edge, destination: Edge) {\n let start = performance.now();\n // Load data\n // Load network data\n const networkFeaturesSourceNode = getNetworkFeatures(getParentDimension(source.where));\n const networkFeaturesDestinationNode = getNetworkFeatures(getParentDimension(destination.where));\n // Load portal data\n const portalDataSourceNode = filterPortalEdgeDataByWhere(portalData.edgeData, getParentDimension(source.where));\n const portalDataDestinationNode = filterPortalEdgeDataByWhere(portalData.edgeData, getParentDimension(destination.where));\n\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalDataSourceNode.lines, portalDataDestinationNode.lines);\n const concatenatedNetworkFeatures = networkFeaturesSourceNode.concat(networkFeaturesDestinationNode);\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeaturesSourceNode.length);\n\n const portalEdgeData = {\n ...portalDataSourceNode.edgeData,\n ...portalDataDestinationNode.edgeData,\n };\n return setupGraphAndFindPath(source, destination, portalEdgeData, concatenatedNetworkFeatures);\n }\n\n // function to get shortest route\n function getRoute(\n mapObjectId1: string | UserPosition,\n mapObjectId2: string,\n wheelChairAccessibleRouteOnlyParam: boolean\n ) {\n wheelChairAccessibleRouteOnly = wheelChairAccessibleRouteOnlyParam;\n // if same start & end\n if (mapObjectId1 === mapObjectId2) {\n return {} as CalculationResult;\n }\n\n if(typeof(mapObjectId1) !== 'string'\n || typeof(mapObjectId2) !== 'string'\n ) runIntersection = true;\n\n const node1 = getEdge(mapObjectId1);\n const node2 = getEdge(mapObjectId2);\n\n startNode = node1;\n endNode = node2;\n\n let start = performance.now();\n portalData = getPortalDataForDimension(DEFAULT_DIMENSION);\n console.log('time portal load with extrapolation: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n if (startNode && endNode) {\n changeZoneCheckEnabled = true;\n const runRouteIteration = () => {\n const directRoute = getDirectRoute(startNode as Edge, endNode as Edge);\n console.log('Direct route', directRoute);\n if (isEmpty(directRoute)) {\n const routeWithAllPortals = getRouteWithAllPortals(startNode as Edge, endNode as Edge);\n const finalRoute = getRouteWithSpecificPortals(startNode as Edge, endNode as Edge, routeWithAllPortals);\n return finalRoute;\n }\n\n const finalRoute = getRouteWithSpecificPortals(startNode as Edge, endNode as Edge, directRoute);\n return finalRoute;\n };\n\n let route = runRouteIteration();\n if (isEmpty(route)) {\n changeZoneCheckEnabled = false;\n route = runRouteIteration();\n }\n\n console.log('time total: ', (performance.now() - start) / 1000);\n return route;\n }\n\n return {} as CalculationResult;\n }\n\n return { getRoute };\n}());\n\nexport default RoutingCore;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["aStar","createGraph","point","multiPoint","turf","cloneDeep","isEmpty","toInteger","LineDirection","RouteDimension","WALK_SPEED","getNetworkFeatures","getEdge","getPortalDataForDimension","isMovingPortalTaxonomy","isPortalTaxonomy","DEFAULT_DIMENSION","filterPortalEdgeDataByList","filterPortalEdgeDataByWhere","getParentDimension","optimized","RoutingCore","wheelChairAccessibleRouteOnly","startNode","endNode","changeZoneCheckEnabled","runIntersection","portalData","edgeData","lines","addVertex","graph","coords","mapObjectId","where","what","zone","updateMapObjectId","arguments","length","undefined","vertexName","concat","toString","vertex","getNode","data","zoneUnionVertex","addNode","addLink","vertex1","vertex2","cost","description","timeInSeconds","isPortal","wheelChairAccesible","id","weight","getDistance","coords1","coords2","point1","point2","distance","units","addEdgeToGraph","edge","node","index","line","getCoords","i","Edge","properties","direction","Forward","TwoWay","wheelchair","Backward","addNetworkToGraph","networkFeatures","feature","geometry","type","lineCoords","dimension_where","Network","addVertexByEdge","addPortalLinksToGraph","portalEdgeData","mapObjectId1","portal","links","portalLink","portal1","portal2","initLineString","coordinates","pathToFeatures","source","destination","vertices","segments","segmentStartVertexData","geojsonPaths","curVertex","prevVertex","segment","console","warn","portalPath","getPortalPath","invertStart","prevVertexMapObjId","set","Set","add","portalDataForSet","prevVertexPortalData","j","link","pathFeatures","start","end","distanceToStart","distanceToEnd","coordsToUse","slice","reverse","lineString","getLink","geojson","edges","startFloor","endFloor","push","nextVertex","log","pop","copyOfCurrentVertex","result","routes","findPath","pathFinder","oriented","fromNode","toNode","blocked","isZoneCrossing","parentWhereDimensionOfFromNode","parentWhereDimensionOfStartNode","parentWhereDimensionOfToNode","path","find","setupGraphAndFindPath","networkData","geojsonPath","getRouteWithAllPortals","performance","now","concatenatedEdgeFeatures","concatenatedNetworkFeatures","getRouteWithSpecificPortals","routeWithAllAvailablePortals","portalsToUse","portalDataForList","getDirectRoute","networkFeaturesSourceNode","networkFeaturesDestinationNode","portalDataSourceNode","portalDataDestinationNode","_objectSpread","getRoute","mapObjectId2","wheelChairAccessibleRouteOnlyParam","node1","node2","runRouteIteration","directRoute","routeWithAllPortals","finalRoute","route"],"sources":["../../../../../src/meta-atlas-sdk/MetaAtlasCore/routing-core/index.ts"],"sourcesContent":["/* eslint-disable guard-for-in */\n/* eslint-disable no-restricted-syntax */\nimport { aStar } from 'ngraph.path';\nimport createGraph, { Graph, Node } from 'ngraph.graph';\nimport {\n point,\n multiPoint,\n} from '@turf/helpers';\nimport { Feature, LineString, MultiPoint } from 'geojson';\n// import turfDistance from '@turf/distance';\nimport * as turf from '@turf/turf';\nimport { cloneDeep, isEmpty, toInteger } from 'lodash';\nimport {\n CalculationResult, Edge, LineDirection, RouteDimension, RouteResult, WALK_SPEED, EdgeLine, Portal, PortalEdgeData, UserPosition\n} from './interfaces';\nimport {\n getNetworkFeatures, getEdge,\n getPortalDataForDimension,\n} from './mapObjectsHelper';\nimport { isMovingPortalTaxonomy, isPortalTaxonomy } from './routing-helpers';\nimport {\n DEFAULT_DIMENSION, filterPortalEdgeDataByList, filterPortalEdgeDataByWhere, getParentDimension, getPortalEdgeData, optimized,\n} from './utils';\n\n/* eslint-disable @typescript-eslint/no-shadow */\n\nconst RoutingCore = (function () {\n let wheelChairAccessibleRouteOnly = true;\n let startNode: Edge | undefined;\n let endNode: Edge | undefined;\n let changeZoneCheckEnabled = true;\n let runIntersection = false;\n\n let portalData: {\n edgeData: PortalEdgeData,\n lines: EdgeLine[],\n } = { edgeData: {}, lines: [] };\n\n function addVertex(\n graph: Graph,\n coords: number[],\n mapObjectId: string,\n where: string,\n what: string,\n zone: string,\n updateMapObjectId = false,\n ) {\n const vertexName = `${(coords).toString()},${where}`;\n let vertex = graph.getNode(vertexName);\n if (vertex === undefined) {\n const data = {\n mapObjectId,\n coords,\n where,\n what,\n zone,\n zoneUnionVertex: false,\n };\n vertex = graph.addNode(vertexName, data);\n } else if (updateMapObjectId) {\n vertex.data.mapObjectId = mapObjectId;\n\n // Mark the vertex as common vertex between zones\n if (vertex.data.zone !== zone) vertex.data.zoneUnionVertex = true;\n vertex.data.zone = zone;\n }\n return vertex;\n }\n\n function addLink(graph: Graph<any, any>, vertex1 : Node<any>, vertex2 : Node<any>, data :{\n wheelChairAccesible: number,\n cost: number,\n isPortal: boolean,\n description: string | null,\n }) {\n const { cost, description } = data;\n const timeInSeconds = data.isPortal ? cost / WALK_SPEED : cost;\n if (!wheelChairAccessibleRouteOnly || (wheelChairAccessibleRouteOnly && data.wheelChairAccesible)) { graph.addLink(vertex1.id, vertex2.id, { weight: timeInSeconds, cost, description }); }\n }\n\n function getDistance(coords1: number[], coords2: number[]) {\n const point1 = point(coords1);\n const point2 = point(coords2);\n const distance = turf.distance(point1, point2, { units: 'meters' });\n return distance;\n }\n\n function addEdgeToGraph(graph: Graph, edge: Edge) {\n const node = edge;\n if (node) {\n const vertex = addVertex(\n graph,\n node.coords,\n node.id,\n node.where,\n node.what,\n node.zone,\n true,\n );\n for (let index = 0; index < node.lines.length; index += 1) {\n const line = node.lines[index];\n // add edges for coord pairs\n const coords = turf.getCoords(line);\n for (let i = 0; i < coords.length - 1; i += 1) {\n const vertex1 = addVertex(\n graph,\n coords[i],\n 'vertex',\n node.where,\n RouteDimension.Edge,\n line.properties.zone,\n );\n const vertex2 = addVertex(\n graph,\n coords[i + 1],\n 'vertex',\n node.where,\n RouteDimension.Edge,\n line.properties.zone,\n );\n if (vertex1.id !== vertex2.id) {\n const distance = getDistance(coords[i], coords[i + 1]);\n if (line.properties.direction === LineDirection.Forward || line.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex1, vertex2, {\n wheelChairAccesible: line.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n if (line.properties.direction === LineDirection.Backward || line.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex2, vertex1, {\n wheelChairAccesible: line.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n }\n }\n }\n return vertex;\n }\n\n return undefined;\n }\n\n function addNetworkToGraph(graph: Graph, networkFeatures: Feature[]) {\n for (let index = 0; index < networkFeatures.length; index += 1) {\n const feature = networkFeatures[index];\n if (feature.geometry.type === 'LineString') {\n // get line\n const lineCoords = turf.getCoords(feature as any);\n if (feature.properties) {\n const where = feature.properties.dimension_where;\n const what = RouteDimension.Network; // feature.properties.dimension_what;\n const { zone } = feature.properties;\n // add edges for coord pairs\n for (let i = 0; i < lineCoords.length - 1; i += 1) {\n const vertex1 = addVertex(graph, lineCoords[i], 'vertex', where, what, zone, true);\n const vertex2 = addVertex(\n graph,\n lineCoords[i + 1],\n 'vertex',\n where,\n what,\n zone,\n true,\n );\n if (vertex1.id !== vertex2.id) {\n const distance = getDistance(lineCoords[i], lineCoords[i + 1]);\n if (feature.properties.direction === LineDirection.Forward || feature.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex1, vertex2, {\n wheelChairAccesible: feature.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n if (feature.properties.direction === LineDirection.Backward || feature.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex2, vertex1, {\n wheelChairAccesible: feature.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n }\n }\n }\n }\n }\n }\n\n function addVertexByEdge(graph: Graph, edge: Edge) {\n const node = edge;\n if (node === undefined) {\n return undefined;\n }\n return addVertex(\n graph,\n node.coords,\n node.id,\n node.where,\n node.what,\n node.zone,\n true,\n );\n }\n\n function addPortalLinksToGraph(graph: Graph, portalEdgeData: PortalEdgeData) {\n for (const mapObjectId1 in portalEdgeData) {\n const portal = portalEdgeData[mapObjectId1];\n\n for (let index = 0; index < portal.links.length; index += 1) {\n const portalLink = portal.links[index];\n let { cost } = portalLink;\n cost = toInteger(cost);\n // if (cost <= 1) {\n // cost = portalWeight;\n // }\n const { direction, wheelchair, description } = portalLink;\n const portal1 = addVertexByEdge(graph, portal);\n const portal2 = addVertexByEdge(graph, portalLink);\n if (portal1 !== undefined && portal2 !== undefined && portal1.id !== portal2.id) {\n if (direction === LineDirection.Forward || direction === LineDirection.TwoWay) {\n addLink(graph, portal1, portal2, {\n wheelChairAccesible: wheelchair,\n cost,\n description,\n isPortal: true,\n });\n }\n if (direction === LineDirection.Backward || direction === LineDirection.TwoWay) {\n addLink(graph, portal2, portal1, {\n wheelChairAccesible: wheelchair,\n cost,\n description,\n isPortal: true,\n });\n }\n\n addEdgeToGraph(graph, portalLink);\n }\n }\n\n addEdgeToGraph(graph, portal);\n }\n }\n\n function initLineString(vertex: any) {\n return {\n type: 'Feature',\n geometry: { type: 'LineString', coordinates: [vertex.data.coords] },\n properties: {\n dimension_where: vertex.data.where,\n zone: vertex.data.zone,\n cost: 0,\n },\n } as Feature<LineString | MultiPoint, any>;\n }\n\n function pathToFeatures(source: Edge, destination : Edge, vertices: Node<any>[], graph: Graph) {\n if (vertices.length <= 1) {\n return {} as CalculationResult;\n } // if no path found\n\n const startNode = source;\n const endNode = destination;\n\n const segments: RouteResult[] = [];\n let segmentStartVertexData = vertices[0].data;\n const geojsonPaths = [initLineString(vertices[0])];\n\n for (let i = 1; i < vertices.length; i += 1) {\n const curVertex = vertices[i];\n const prevVertex = vertices[i - 1];\n const line = geojsonPaths[geojsonPaths.length - 1];\n\n // if vertex is map object\n if (curVertex.data.mapObjectId !== 'vertex' || curVertex.data.zoneUnionVertex) {\n let segment;\n if (isPortalTaxonomy(prevVertex.data.what) && isPortalTaxonomy(curVertex.data.what)) {\n if (prevVertex.data.zone !== curVertex.data.zone) {\n console.warn('A portal is triggering a change in zone');\n }\n\n // check if portal path is available to visualize\n let portalPath;\n if (isMovingPortalTaxonomy(prevVertex.data.what)) {\n const getPortalPath = (portalEdgeData: PortalEdgeData, curVertex: Node<any>, prevVertex: Node<any>, invertStart = false) => {\n const prevVertexMapObjId = prevVertex.data.mapObjectId;\n const set = new Set<string>().add(prevVertexMapObjId);\n const portalDataForSet = filterPortalEdgeDataByList(portalEdgeData, set);\n if (portalDataForSet && portalDataForSet.edgeData[prevVertexMapObjId]) {\n const prevVertexPortalData = portalDataForSet.edgeData[prevVertexMapObjId];\n for (let j = 0; j < prevVertexPortalData.links.length; j += 1) {\n const link = prevVertexPortalData.links[j];\n if (link.id === curVertex.data.mapObjectId) {\n if (link.pathFeatures && link.pathFeatures.length > 0) {\n const line = link.pathFeatures[0];\n const start = invertStart === false ? prevVertex.data.coords : curVertex.data.coords;\n const end = invertStart === false ? curVertex.data.coords : prevVertex.data.coords;\n\n const distanceToStart = turf.distance(start, line.geometry.coordinates[0]);\n const distanceToEnd = turf.distance(end, line.geometry.coordinates[0]);\n const coordsToUse = distanceToStart < distanceToEnd ? line.geometry.coordinates : line.geometry.coordinates.slice().reverse();\n return turf.lineString(coordsToUse);\n }\n }\n }\n }\n\n return null;\n };\n\n portalPath = getPortalPath(portalData.edgeData, curVertex, prevVertex, false);\n if (!portalPath) portalPath = getPortalPath(portalData.edgeData, prevVertex, curVertex, true);\n }\n\n // TODO: read description here\n const link = graph.getLink(prevVertex.id, curVertex.id);\n const cost = link ? link.data.cost ? link.data.cost : undefined : undefined;\n const description = link ? link.data.description ? link.data.description : undefined : undefined;\n segment = {\n geojson: multiPoint([\n prevVertex.data.coords,\n curVertex.data.coords,\n ], {\n zone: curVertex.data.zone,\n }),\n edges: [prevVertex.data.mapObjectId, curVertex.data.mapObjectId],\n startFloor: prevVertex.data.where,\n endFloor: curVertex.data.where,\n isPortal: true,\n portalPath,\n cost,\n description,\n } as RouteResult;\n\n segments.push(segment);\n segmentStartVertexData = curVertex.data;\n } else {\n const nextVertex = (i + 1 < vertices.length) ? vertices[i + 1] : undefined;\n if (curVertex.data.zoneUnionVertex\n && (prevVertex && nextVertex && prevVertex?.data.zone === nextVertex?.data.zone)) {\n console.log('ignore zoneUnionVertex in segment');\n } else {\n segment = {\n geojson: line,\n edges: [segmentStartVertexData.mapObjectId, curVertex.data.mapObjectId],\n startFloor: segmentStartVertexData.where,\n endFloor: segmentStartVertexData.where,\n isPortal: false,\n portalPath: undefined,\n cost: line.properties.cost,\n };\n\n segments.push(segment);\n segmentStartVertexData = curVertex.data;\n }\n }\n }\n\n // same line\n if (!(isPortalTaxonomy(prevVertex.data.what) && isPortalTaxonomy(curVertex.data.what))) {\n const link = graph.getLink(prevVertex.id, curVertex.id); // returns a link from 'hello' to 'world'\n const cost = link ? link.data.cost ? link.data.cost : undefined : undefined;\n\n line.geometry.coordinates.push(curVertex.data.coords);\n line.properties.cost += cost;\n } else {\n // new line\n if (line.geometry.coordinates.length < 2) {\n geojsonPaths.pop();\n }\n geojsonPaths.push(initLineString(curVertex));\n }\n\n // new line due to change in zone\n if (curVertex.data.zoneUnionVertex) {\n const prevVertex = (i > 0) ? vertices[i - 1] : undefined;\n const nextVertex = (i + 1 < vertices.length) ? vertices[i + 1] : undefined;\n if (prevVertex && nextVertex && prevVertex?.data.zone === nextVertex?.data.zone) {\n console.log('ignore zoneUnionVertex');\n } else\n // Use zone value of next vertex (when available) as current vertex is a common vertex and can have either of the zone values\n if (nextVertex) {\n const copyOfCurrentVertex = cloneDeep(curVertex);\n copyOfCurrentVertex.data.zone = nextVertex.data.zone;\n geojsonPaths.push(initLineString(copyOfCurrentVertex));\n } else {\n geojsonPaths.push(initLineString(curVertex));\n }\n }\n }\n\n const result: CalculationResult = {\n startNode,\n endNode,\n routes: segments,\n distance: 0,\n };\n\n return result;\n }\n\n function findPath(vertex1: Node<any>, vertex2: Node<any>, graph: Graph) {\n // setup ngraph pathfinder\n const pathFinder = aStar(graph, {\n oriented: true,\n distance(fromNode, toNode, link) {\n return link.data.weight;\n },\n blocked(fromNode, toNode, link) {\n if (changeZoneCheckEnabled) {\n const isZoneCrossing = fromNode?.data.zone !== toNode?.data.zone;\n if (isZoneCrossing) {\n const parentWhereDimensionOfFromNode = getParentDimension(fromNode.data.where);\n const parentWhereDimensionOfStartNode = getParentDimension((startNode as Edge).where);\n const parentWhereDimensionOfToNode = getParentDimension(toNode.data.where);\n if (parentWhereDimensionOfFromNode !== parentWhereDimensionOfStartNode && parentWhereDimensionOfToNode !== parentWhereDimensionOfStartNode) {\n return true;\n }\n }\n }\n return false;\n },\n });\n\n // get shortest path\n const path = pathFinder.find(vertex1.id, vertex2.id).reverse();\n return path;\n }\n\n function setupGraphAndFindPath(source: Edge, destination: Edge, portalEdgeData: PortalEdgeData, networkData: Feature[]) {\n // create ngraph graph\n const graph = createGraph();\n\n // add node & node lines to graph\n const vertex1 = addEdgeToGraph(graph, source);\n const vertex2 = addEdgeToGraph(graph, destination);\n\n if (vertex1 && vertex2) {\n // Add portal links\n addPortalLinksToGraph(graph, portalEdgeData);\n\n // add networks to graph\n addNetworkToGraph(graph, networkData);\n\n const path = findPath(vertex1, vertex2, graph);\n // reconstruct path into geojson features\n const geojsonPath = pathToFeatures(source, destination, path, graph);\n return geojsonPath;\n }\n\n return {} as CalculationResult;\n }\n\n function getRouteWithAllPortals(source: Edge, destination: Edge) {\n let start = performance.now();\n\n // Load network data\n const networkFeatures = getNetworkFeatures(DEFAULT_DIMENSION);\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalData.lines);\n const concatenatedNetworkFeatures = networkFeatures;\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeatures.length);\n\n return setupGraphAndFindPath(source, destination, portalData.edgeData, concatenatedNetworkFeatures);\n }\n\n function getRouteWithSpecificPortals(source: Edge, destination: Edge, routeWithAllAvailablePortals: CalculationResult) {\n const portalsToUse = new Set<string>();\n for (let index = 0; routeWithAllAvailablePortals.routes && index < routeWithAllAvailablePortals.routes.length; index += 1) {\n const segment = routeWithAllAvailablePortals.routes[index];\n if (segment.isPortal) {\n portalsToUse.add(segment.edges[0]);\n portalsToUse.add(segment.edges[1]);\n }\n }\n\n let start = performance.now();\n // Load data\n // Load network data\n const networkFeatures = getNetworkFeatures(DEFAULT_DIMENSION);\n // Load portal data\n const portalDataForList = filterPortalEdgeDataByList(portalData.edgeData, portalsToUse);\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalDataForList.lines);\n const concatenatedNetworkFeatures = networkFeatures;\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeatures.length);\n\n return setupGraphAndFindPath(source, destination, portalDataForList.edgeData, concatenatedNetworkFeatures);\n }\n\n function getDirectRoute(source: Edge, destination: Edge) {\n let start = performance.now();\n // Load data\n // Load network data\n const networkFeaturesSourceNode = getNetworkFeatures(getParentDimension(source.where));\n const networkFeaturesDestinationNode = getNetworkFeatures(getParentDimension(destination.where));\n // Load portal data\n const portalDataSourceNode = filterPortalEdgeDataByWhere(portalData.edgeData, getParentDimension(source.where));\n const portalDataDestinationNode = filterPortalEdgeDataByWhere(portalData.edgeData, getParentDimension(destination.where));\n\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalDataSourceNode.lines, portalDataDestinationNode.lines);\n const concatenatedNetworkFeatures = networkFeaturesSourceNode.concat(networkFeaturesDestinationNode);\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeaturesSourceNode.length);\n\n const portalEdgeData = {\n ...portalDataSourceNode.edgeData,\n ...portalDataDestinationNode.edgeData,\n };\n return setupGraphAndFindPath(source, destination, portalEdgeData, concatenatedNetworkFeatures);\n }\n\n // function to get shortest route\n function getRoute(\n mapObjectId1: string | UserPosition,\n mapObjectId2: string,\n wheelChairAccessibleRouteOnlyParam: boolean\n ) {\n wheelChairAccessibleRouteOnly = wheelChairAccessibleRouteOnlyParam;\n // if same start & end\n if (mapObjectId1 === mapObjectId2) {\n return {} as CalculationResult;\n }\n\n if(typeof(mapObjectId1) !== 'string'\n || typeof(mapObjectId2) !== 'string'\n ) runIntersection = true;\n\n const node1 = getEdge(mapObjectId1);\n const node2 = getEdge(mapObjectId2);\n\n startNode = node1;\n endNode = node2;\n\n let start = performance.now();\n portalData = getPortalDataForDimension(DEFAULT_DIMENSION);\n console.log('time portal load with extrapolation: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n if (startNode && endNode) {\n changeZoneCheckEnabled = true;\n const runRouteIteration = () => {\n const directRoute = getDirectRoute(startNode as Edge, endNode as Edge);\n console.log('Direct route', directRoute);\n if (isEmpty(directRoute)) {\n const routeWithAllPortals = getRouteWithAllPortals(startNode as Edge, endNode as Edge);\n const finalRoute = getRouteWithSpecificPortals(startNode as Edge, endNode as Edge, routeWithAllPortals);\n return finalRoute;\n }\n\n const finalRoute = getRouteWithSpecificPortals(startNode as Edge, endNode as Edge, directRoute);\n return finalRoute;\n };\n\n let route = runRouteIteration();\n if (isEmpty(route)) {\n changeZoneCheckEnabled = false;\n route = runRouteIteration();\n }\n\n console.log('time total: ', (performance.now() - start) / 1000);\n return route;\n }\n\n return {} as CalculationResult;\n }\n\n return { getRoute };\n}());\n\nexport default RoutingCore;\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,8 @@
1
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
4
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
1
6
  import { point, lineString } from '@turf/helpers';
2
7
  import length from '@turf/length';
3
8
  import { booleanDisjoint, booleanPointInPolygon, getCoord, getCoords, lineIntersect, lineSlice } from '@turf/turf';
@@ -113,18 +118,15 @@ function getRouteLine(coordinates, segmentNumber, isHighlighted, patchNumber, zo
113
118
  zone
114
119
  };
115
120
  // const curved = smooth(coordinates, {iteration: 1});
116
- const line = lineString(coordinates, {
117
- ...properties,
121
+ const line = lineString(coordinates, _objectSpread(_objectSpread({}, properties), {}, {
118
122
  featureBelongsToLineString: true
119
- });
120
- const startPoint = point(coordinates[0], {
121
- ...properties,
123
+ }));
124
+ const startPoint = point(coordinates[0], _objectSpread(_objectSpread({}, properties), {}, {
122
125
  featureBelongsToLineString: false
123
- });
124
- const endPoint = point(coordinates[coordinates.length - 1], {
125
- ...properties,
126
+ }));
127
+ const endPoint = point(coordinates[coordinates.length - 1], _objectSpread(_objectSpread({}, properties), {}, {
126
128
  featureBelongsToLineString: false
127
- });
129
+ }));
128
130
  const features = [];
129
131
  features.push(startPoint, line, endPoint);
130
132
  updateFeatureHighlightState(features, isHighlighted);
@@ -204,11 +206,10 @@ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAc
204
206
 
205
207
  // Only add the starting static node for the very first node of route
206
208
  if (optimizedPath.length === 0) {
207
- const firstSegment = {
208
- ...createDefaultSegment(pathSegment),
209
+ const firstSegment = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
209
210
  maneuverType: ManeuverType.Static,
210
211
  coordinates: [path[0]]
211
- };
212
+ });
212
213
  optimizedPath.push(firstSegment);
213
214
  }
214
215
  if (segmentIndex > 0 && optimizedPath.length > 0) {
@@ -216,12 +217,11 @@ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAc
216
217
  const prevZone = prevPathSegment.geojson.properties.zone;
217
218
  if (currentZone !== prevZone) {
218
219
  const prevPath = prevPathSegment.geojson.geometry.coordinates;
219
- const pathPoint = {
220
- ...createDefaultSegment(prevPathSegment),
220
+ const pathPoint = _objectSpread(_objectSpread({}, createDefaultSegment(prevPathSegment)), {}, {
221
221
  maneuverType: ManeuverType.ChangeZone,
222
222
  zone: currentZone,
223
223
  coordinates: [prevPath[prevPath.length - 1]]
224
- };
224
+ });
225
225
  optimizedPath.push(pathPoint);
226
226
  lastManeuverType = ManeuverType.ChangeZone;
227
227
  }
@@ -233,12 +233,11 @@ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAc
233
233
  const endPoint = path[index + 2];
234
234
 
235
235
  // Keep updating endSegment on each iteration
236
- endSegment = {
237
- ...createDefaultSegment(pathSegment),
236
+ endSegment = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
238
237
  maneuverType: ManeuverType.Static,
239
238
  coordinates: [endPoint],
240
239
  zone: currentZone
241
- };
240
+ });
242
241
 
243
242
  // const line = lineString([startPoint, midPoint]);
244
243
  // const segmentDistance = length(line, { units: DISTANCE_UNIT });
@@ -279,11 +278,10 @@ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAc
279
278
  // }
280
279
  // }
281
280
 
282
- const pathPoint = {
283
- ...createDefaultSegment(pathSegment),
281
+ const pathPoint = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
284
282
  maneuverType: currentManeuverType,
285
283
  zone: currentZone
286
- };
284
+ });
287
285
  if (lastManeuverType === ManeuverType.ContinueStraight) {
288
286
  // If last iteration of loop then use the end point as segment end else use mid point
289
287
  // Use index + 3 because last two points are skipped by loop
@@ -304,24 +302,22 @@ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAc
304
302
  if (currentManeuverType === ManeuverType.ContinueStraight) {
305
303
  optimizedPath[optimizedPath.length - 1].coordinates.push(endPoint);
306
304
  } else {
307
- optimizedPath.push({
308
- ...createDefaultSegment(pathSegment),
305
+ optimizedPath.push(_objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
309
306
  maneuverType: ManeuverType.ContinueStraight,
310
307
  coordinates: [midPoint, endPoint],
311
308
  zone: currentZone
312
- });
309
+ }));
313
310
  }
314
311
  }
315
312
  }
316
313
  lastManeuverType = currentManeuverType;
317
314
  }
318
315
  } else {
319
- const pathPoint = {
320
- ...createDefaultSegment(pathSegment),
316
+ const pathPoint = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
321
317
  maneuverType: ManeuverType.ContinueStraight,
322
318
  coordinates: path,
323
319
  zone: currentZone
324
- };
320
+ });
325
321
  optimizedPath.push(pathPoint);
326
322
  }
327
323
  const removeExtraChangeZoneSegment = () => {
@@ -351,12 +347,11 @@ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAc
351
347
  });
352
348
  // Only add if length greater then min limit
353
349
  if (lengthOfLineBeforeImmigration >= 10) {
354
- const segmentBeforeImmigration = {
355
- ...createDefaultSegment(pathSegment),
350
+ const segmentBeforeImmigration = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
356
351
  maneuverType: ManeuverType.ContinueStraight,
357
352
  zone: currentZone,
358
353
  coordinates: getCoords(lineBeforeImmigration)
359
- };
354
+ });
360
355
  optimizedPath.push(segmentBeforeImmigration);
361
356
  } else if (optimizedPath.length > 0) {
362
357
  lastSegmentAdded = optimizedPath[optimizedPath.length - 1];
@@ -373,12 +368,11 @@ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAc
373
368
  }
374
369
  }
375
370
  const immigrationLine = lineSlice(getCoord(intersects.features[0]), getCoord(intersects.features[1]), line);
376
- const immigrationSegment = {
377
- ...createDefaultSegment(pathSegment),
371
+ const immigrationSegment = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
378
372
  maneuverType: ManeuverType.PassThroughImmigration,
379
373
  zone: currentZone,
380
374
  coordinates: getCoords(immigrationLine)
381
- };
375
+ });
382
376
  // The lineBeforeImmigration might not have been added due to length limit
383
377
  // And if lineBeforeImmigration was supposed to be the the first segment then prepend this segment with coordinates of lineBeforeImmigration
384
378
  if (optimizedPath.length === 0) {
@@ -390,12 +384,11 @@ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAc
390
384
  optimizedPath.push(immigrationSegment);
391
385
  const lineCoords = getCoords(line);
392
386
  const lineAfterImmigration = lineSlice(getCoord(intersects.features[1]), lineCoords[lineCoords.length - 1], line);
393
- const segmentAfterImmigration = {
394
- ...createDefaultSegment(pathSegment),
387
+ const segmentAfterImmigration = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
395
388
  maneuverType: ManeuverType.ContinueStraight,
396
389
  zone: currentZone,
397
390
  coordinates: getCoords(lineAfterImmigration)
398
- };
391
+ });
399
392
  optimizedPath.push(segmentAfterImmigration);
400
393
  // line = segmentAfterImmigration;
401
394
  } else if (intersects.features.length > 0) {
@@ -407,12 +400,11 @@ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAc
407
400
  // One intersection point and start point is within polygon
408
401
  // Means line start inside and exits the polygon
409
402
  const immigrationLine = lineSlice(getCoords(line)[0], getCoord(intersects.features[0]), line);
410
- const immigrationSegment = {
411
- ...createDefaultSegment(pathSegment),
403
+ const immigrationSegment = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
412
404
  maneuverType: ManeuverType.PassThroughImmigration,
413
405
  zone: currentZone,
414
406
  coordinates: getCoords(immigrationLine)
415
- };
407
+ });
416
408
  lastSegmentAdded = optimizedPath.length > 0 ? optimizedPath[optimizedPath.length - 1] : undefined;
417
409
  if (lastSegmentAdded && lastSegmentAdded.maneuverType === ManeuverType.ChangeZone) {
418
410
  // Remove change zone segment
@@ -434,12 +426,11 @@ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAc
434
426
  optimizedPath.push(immigrationSegment);
435
427
  const lineCoords = getCoords(line);
436
428
  const lineAfterImmigration = lineSlice(getCoord(intersects.features[0]), lineCoords[lineCoords.length - 1], line);
437
- const segmentAfterImmigration = {
438
- ...createDefaultSegment(pathSegment),
429
+ const segmentAfterImmigration = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
439
430
  maneuverType: ManeuverType.ContinueStraight,
440
431
  zone: currentZone,
441
432
  coordinates: getCoords(lineAfterImmigration)
442
- };
433
+ });
443
434
  optimizedPath.push(segmentAfterImmigration);
444
435
  } else {
445
436
  // line starts outside immigration and ends inside immigration
@@ -449,12 +440,11 @@ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAc
449
440
  lastSegmentAdded.coordinates = getCoords(previousLine);
450
441
  const lineCoords = getCoords(line);
451
442
  const lineAfterImmigration = lineSlice(getCoord(intersects.features[0]), lineCoords[lineCoords.length - 1], line);
452
- const segmentAfterImmigration = {
453
- ...createDefaultSegment(pathSegment),
443
+ const segmentAfterImmigration = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
454
444
  maneuverType: ManeuverType.PassThroughImmigration,
455
445
  zone: currentZone,
456
446
  coordinates: getCoords(lineAfterImmigration)
457
- };
447
+ });
458
448
  optimizedPath.push(segmentAfterImmigration);
459
449
  // line = segmentAfterImmigration;
460
450
  }
@@ -464,18 +454,16 @@ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAc
464
454
  }
465
455
  } else {
466
456
  // Keep updating endSegment on each iteration
467
- endSegment = {
468
- ...createDefaultSegment(pathSegment),
457
+ endSegment = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
469
458
  maneuverType: ManeuverType.Static,
470
459
  coordinates: [pathSegment.geojson.geometry.coordinates[1]],
471
460
  zone: currentZone,
472
461
  isPortal: false
473
- };
474
- const enterPortalSegment = {
475
- ...createDefaultSegment(pathSegment),
462
+ });
463
+ const enterPortalSegment = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
476
464
  maneuverType: ManeuverType.EnterPortal,
477
465
  coordinates: [pathSegment.geojson.geometry.coordinates[0]]
478
- };
466
+ });
479
467
  // // Only add this EnterPortal segment if previously same what dimension portal is not being continued
480
468
  // // This is done to ensure Take Lift at A, Exit Lift at B, Take lift at B, Exit Lift at C is generated only as Take lift at A, Exit lift at C
481
469
  // let lastSegmentAdded = (optimizedPath.length > 0) ? optimizedPath[optimizedPath.length - 1] : undefined;
@@ -487,11 +475,10 @@ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAc
487
475
  // }
488
476
 
489
477
  optimizedPath.push(enterPortalSegment);
490
- const exitPortalSegment = {
491
- ...createDefaultSegment(pathSegment),
478
+ const exitPortalSegment = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
492
479
  maneuverType: ManeuverType.ExitPortal,
493
480
  coordinates: [pathSegment.geojson.geometry.coordinates[1]]
494
- };
481
+ });
495
482
  // // This logic is tied to the above similar logic for EnterPortal
496
483
  // // Only add this ExitPortal segment if previously same what dimension portal is not being continued
497
484
  // // This is done to ensure Take Lift at A, Exit Lift at B, Take lift at B, Exit Lift at C is generated only as Take lift at A, Exit lift at C
@@ -513,12 +500,11 @@ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAc
513
500
  if (lastSegmentAdded && lastSegmentAdded.maneuverType === ManeuverType.ExitPortal) {
514
501
  optimizedPath.pop();
515
502
  if (pathSegment.portalPath) {
516
- const travelPortalSegment = {
517
- ...createDefaultSegment(pathSegment),
503
+ const travelPortalSegment = _objectSpread(_objectSpread({}, createDefaultSegment(pathSegment)), {}, {
518
504
  maneuverType: ManeuverType.TravelPortal,
519
505
  coordinates: pathSegment.portalPath.geometry.coordinates,
520
506
  zone: currentZone
521
- };
507
+ });
522
508
  optimizedPath.push(travelPortalSegment);
523
509
  }
524
510
  optimizedPath.push(exitPortalSegment);
@@ -682,8 +668,9 @@ export function getFeaturesForPatch(route, patchNumber, overviewSegmentInfo) {
682
668
  const nonHighlightedOverviewFeatures = [];
683
669
  const highlightedOverviewFeatures = [];
684
670
  for (let j = 0; j < routeSegment.features.length; j++) {
671
+ var _feature$properties;
685
672
  const feature = routeSegment.features[j];
686
- if (feature.properties?.patchNumber !== undefined && feature.properties.patchNumber === overviewSegmentInfo.patchNumberForOverviewFeatures) {
673
+ if (((_feature$properties = feature.properties) === null || _feature$properties === void 0 ? void 0 : _feature$properties.patchNumber) !== undefined && feature.properties.patchNumber === overviewSegmentInfo.patchNumberForOverviewFeatures) {
687
674
  if (feature.properties.isNonHighlightedOverview !== undefined) {
688
675
  if (feature.properties.isNonHighlightedOverview === '1') {
689
676
  nonHighlightedOverviewFeatures.push(feature);
@@ -769,7 +756,7 @@ function getTerminalAndLevelName(whereDimension) {
769
756
  terminalName = 'Level';
770
757
  break;
771
758
  }
772
- const terminal = terminalName === 'Terminal' ? `${terminalName} ${match[1][1]}` : `${terminalName}`;
759
+ const terminal = terminalName === 'Terminal' ? "".concat(terminalName, " ").concat(match[1][1]) : "".concat(terminalName);
773
760
  const levelIdentifier = match[2][0];
774
761
  let levelName;
775
762
  switch (levelIdentifier) {
@@ -783,7 +770,7 @@ function getTerminalAndLevelName(whereDimension) {
783
770
  levelName = 'Level';
784
771
  break;
785
772
  }
786
- const level = `${levelName} ${match[2].substring(1)}`;
773
+ const level = "".concat(levelName, " ").concat(match[2].substring(1));
787
774
  return {
788
775
  Terminal: terminal,
789
776
  Level: level
@@ -821,7 +808,7 @@ function convertSecondsToMinutes(timeInSeconds) {
821
808
  }
822
809
  export function formatTime(value) {
823
810
  if (value < 60) return '<1 minute';
824
- return `~${convertSecondsToMinutes(value)} ${convertSecondsToMinutes(value) > 1 ? 'minutes' : 'minute'}`;
811
+ return "~".concat(convertSecondsToMinutes(value), " ").concat(convertSecondsToMinutes(value) > 1 ? 'minutes' : 'minute');
825
812
  }
826
813
  export function generateInstructions(route) {
827
814
  const isFirstSegment = index => {
@@ -851,7 +838,7 @@ export function generateInstructions(route) {
851
838
  }
852
839
  rotueSegment.instructions.push(instruction);
853
840
  } else if (rotueSegment.maneuverType === ManeuverType.ContinueStraight || rotueSegment.maneuverType === ManeuverType.PassThroughImmigration) {
854
- const postfix = rotueSegment.maneuverType === ManeuverType.ContinueStraight ? `Walk for ${Math.ceil(rotueSegment.distance)} ${route.distanceUnit}` : getImmigrationInstruction(rotueSegment);
841
+ const postfix = rotueSegment.maneuverType === ManeuverType.ContinueStraight ? "Walk for ".concat(Math.ceil(rotueSegment.distance), " ").concat(route.distanceUnit) : getImmigrationInstruction(rotueSegment);
855
842
 
856
843
  // 0th index if overview segment was not included, else 1st index
857
844
  // if (index === 0
@@ -907,15 +894,15 @@ export function generateInstructions(route) {
907
894
  // }
908
895
  } else if (rotueSegment.maneuverType === ManeuverType.Static) {
909
896
  if (isFirstSegment(index)) {
910
- rotueSegment.instructions.push(`Start at ${rotueSegment.startEdge.name}`);
897
+ rotueSegment.instructions.push("Start at ".concat(rotueSegment.startEdge.name));
911
898
  }
912
899
  if (index === route.segments.length - 1) {
913
- rotueSegment.instructions.push(`Arrive at ${rotueSegment.endEdge.name}`);
900
+ rotueSegment.instructions.push("Arrive at ".concat(rotueSegment.endEdge.name));
914
901
  }
915
902
  } else if (rotueSegment.maneuverType === ManeuverType.EnterPortal) {
916
- let instruction = `Enter ${rotueSegment.startEdge.name} at ${rotueSegment.startEdge.whereDimension.split('.').slice(-2).join(' ').toUpperCase()}`;
903
+ let instruction = "Enter ".concat(rotueSegment.startEdge.name, " at ").concat(rotueSegment.startEdge.whereDimension.split('.').slice(-2).join(' ').toUpperCase());
917
904
  if (isNonMovingPortalTaxonomy(rotueSegment.startEdge.whatDimension)) {
918
- instruction = `Continue to ${getWhereDimensionNameForPortal(rotueSegment.startEdge.whatDimension, rotueSegment.endEdge.whereDimension)}`;
905
+ instruction = "Continue to ".concat(getWhereDimensionNameForPortal(rotueSegment.startEdge.whatDimension, rotueSegment.endEdge.whereDimension));
919
906
  rotueSegment.instructions.push(instruction);
920
907
  } else if (isMovingPortalTaxonomy(rotueSegment.startEdge.whatDimension)) {
921
908
  const nextRouteSegment = index + 1 <= route.segments.length - 1 ? route.segments[index + 1] : undefined;
@@ -924,12 +911,12 @@ export function generateInstructions(route) {
924
911
  rotueSegment.instructions.push(instruction);
925
912
  index += 1;
926
913
  const name = getPortalName(nextRouteSegment.startEdge.whatDimension);
927
- instruction = `Take ${name} to ${getWhereDimensionNameForPortal(rotueSegment.startEdge.whatDimension, rotueSegment.endEdge.whereDimension)}`;
914
+ instruction = "Take ".concat(name, " to ").concat(getWhereDimensionNameForPortal(rotueSegment.startEdge.whatDimension, rotueSegment.endEdge.whereDimension));
928
915
  nextRouteSegment.instructions.push(instruction);
929
916
  if (rotueSegment.description) nextRouteSegment.instructions.push(rotueSegment.description);
930
917
  } else {
931
918
  const name = getPortalName(rotueSegment.startEdge.whatDimension);
932
- instruction = `Take ${name} to ${getWhereDimensionNameForPortal(rotueSegment.startEdge.whatDimension, rotueSegment.endEdge.whereDimension)}`;
919
+ instruction = "Take ".concat(name, " to ").concat(getWhereDimensionNameForPortal(rotueSegment.startEdge.whatDimension, rotueSegment.endEdge.whereDimension));
933
920
  rotueSegment.instructions.push(instruction);
934
921
  }
935
922
  }