Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@aeolun/dijkstra-calculator

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aeolun/dijkstra-calculator - npm Package Compare versions

Comparing version 1.3.2 to 1.4.0

build/main/lib/index.test.d.ts

70

build/main/lib/index.d.ts

@@ -5,35 +5,48 @@ /**

export type NodeId = string;
export interface Node {
export interface Node<RESOURCES extends string> {
id: NodeId;
properties: PathProperties;
properties: PathProperties<RESOURCES>;
}
export interface LinkedListItem {
type PartialRecord<K extends keyof any, T> = Partial<Record<K, T>>;
export interface LinkedListItem<RESOURCES extends string> {
source: NodeId;
target: NodeId;
edge?: NodeId;
consumes?: Record<string, number>;
recover?: Record<string, number>;
consumes?: PartialRecord<RESOURCES, number>;
recover?: PartialRecord<RESOURCES, number>;
weight?: number;
weightFromResources?: number;
totalConsumed?: PartialRecord<RESOURCES, number>;
totalRecovered?: PartialRecord<RESOURCES, number>;
}
export interface VertexProperties {
recover?: Record<string, boolean>;
export interface VertexProperties<RESOURCES extends string> {
recover?: PartialRecord<RESOURCES, (currentLevel: number, maxLevel: number) => {
recoverAmount: number;
cost: number;
}>;
}
export interface EdgeProperties {
export interface EdgeProperties<RESOURCES extends string> {
id?: string;
weight: number;
consumes?: Record<string, number>;
recover?: Record<string, number>;
consumes?: PartialRecord<RESOURCES, number>;
recover?: PartialRecord<RESOURCES, number>;
totalConsumed?: PartialRecord<RESOURCES, number>;
totalRecovered?: PartialRecord<RESOURCES, number>;
weightFromResources?: number;
}
export interface PathProperties {
export interface PathProperties<RESOURCES extends string> {
priority: number;
supplies?: Record<string, number>;
maxSupplies?: Record<string, number>;
supplies?: PartialRecord<RESOURCES, number>;
supplyCapacity?: PartialRecord<RESOURCES, number>;
totalConsumed?: PartialRecord<RESOURCES, number>;
totalRecovered?: PartialRecord<RESOURCES, number>;
resourceWeight?: PartialRecord<RESOURCES, number>;
}
export type PathReturnProperties = PathProperties & {
export type PathReturnProperties<RESOURCES extends string> = PathProperties<RESOURCES> & {
timeTaken: number;
};
export type PathNode = {
export type PathNode<RESOURCES extends string> = {
vertexId: NodeId;
} & Partial<EdgeProperties>;
export declare class DijkstraCalculator {
} & Partial<EdgeProperties<RESOURCES>>;
export declare class DijkstraCalculator<RESOURCES extends string> {
private heuristic?;

@@ -44,12 +57,16 @@ private isDebugging;

id: NodeId;
properties: EdgeProperties;
properties: EdgeProperties<RESOURCES>;
}[];
};
vertexProperties: {
[key: NodeId]: VertexProperties;
[key: NodeId]: VertexProperties<RESOURCES>;
};
constructor(heuristic?: ((vertex: NodeId, target: NodeId) => number) | undefined, isDebugging?: boolean);
addVertex(vertex: NodeId, properties?: VertexProperties): void;
addEdge(vertex1: NodeId, vertex2: NodeId, properties?: EdgeProperties): void;
addVertex(vertex: NodeId, properties?: VertexProperties<RESOURCES>): void;
addEdge(vertex1: NodeId, vertex2: NodeId, properties?: EdgeProperties<RESOURCES>): void;
debug(...args: any[]): void;
calculateShortestRouteAsLinkedListResults(nodes: NodeId[], properties?: Omit<PathProperties<RESOURCES>, 'priority'>): {
finalPath: LinkedListItem<RESOURCES>[];
pathProperties: PathReturnProperties<RESOURCES>;
};
/**

@@ -61,5 +78,5 @@ * Given the provided weights of each edge

*/
calculateShortestPathAsLinkedListResult(start: NodeId, finish: NodeId, properties?: Omit<PathProperties, 'priority'>): {
finalPath: LinkedListItem[];
pathProperties: PathReturnProperties;
calculateShortestPathAsLinkedListResult(start: NodeId, finish: NodeId, properties?: Omit<PathProperties<RESOURCES>, 'priority'>): {
finalPath: LinkedListItem<RESOURCES>[];
pathProperties: PathReturnProperties<RESOURCES>;
};

@@ -72,6 +89,7 @@ /**

*/
calculateShortestPath(start: NodeId, finish: NodeId, properties?: Omit<PathProperties, 'priority'>): {
calculateShortestPath(start: NodeId, finish: NodeId, properties?: Omit<PathProperties<RESOURCES>, 'priority'>): {
finalPath: string[];
pathProperties: PathReturnProperties;
pathProperties: PathReturnProperties<RESOURCES>;
};
}
export {};

@@ -91,2 +91,62 @@ "use strict";

}
calculateShortestRouteAsLinkedListResults(nodes, properties = {}) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
// calculate route from first node hitting all specified nodes in order
const startNode = nodes.shift();
if (!startNode) {
throw new Error('No nodes provided');
}
const results = {
finalPath: [],
pathProperties: {
priority: 0,
timeTaken: 0,
supplies: {},
totalConsumed: {},
totalRecovered: {},
resourceWeight: {},
},
};
let currentNode = startNode;
while (nodes.length > 0) {
const nextNode = nodes.shift();
if (!nextNode) {
throw new Error('No nodes provided');
}
const route = this.calculateShortestPathAsLinkedListResult(currentNode, nextNode, Object.assign(Object.assign({}, properties), { supplies: Object.assign(Object.assign({}, properties.supplies), results.pathProperties.supplies) }));
results.finalPath = results.finalPath.concat(route.finalPath);
results.pathProperties.priority += route.pathProperties.priority;
results.pathProperties.timeTaken += route.pathProperties.timeTaken;
for (const supply in route.pathProperties.supplies) {
if (results.pathProperties.supplies) {
results.pathProperties.supplies[supply] =
((_a = results.pathProperties.supplies[supply]) !== null && _a !== void 0 ? _a : 0) +
((_c = (_b = route.pathProperties.supplies) === null || _b === void 0 ? void 0 : _b[supply]) !== null && _c !== void 0 ? _c : 0);
}
}
for (const supply in route.pathProperties.totalConsumed) {
if (results.pathProperties.totalConsumed) {
results.pathProperties.totalConsumed[supply] =
((_d = results.pathProperties.totalConsumed[supply]) !== null && _d !== void 0 ? _d : 0) +
((_f = (_e = route.pathProperties.totalConsumed) === null || _e === void 0 ? void 0 : _e[supply]) !== null && _f !== void 0 ? _f : 0);
}
}
for (const supply in route.pathProperties.totalRecovered) {
if (results.pathProperties.totalRecovered) {
results.pathProperties.totalRecovered[supply] =
((_g = results.pathProperties.totalRecovered[supply]) !== null && _g !== void 0 ? _g : 0) +
((_j = (_h = route.pathProperties.totalRecovered) === null || _h === void 0 ? void 0 : _h[supply]) !== null && _j !== void 0 ? _j : 0);
}
}
for (const supply in route.pathProperties.resourceWeight) {
if (results.pathProperties.resourceWeight) {
results.pathProperties.resourceWeight[supply] =
((_k = results.pathProperties.resourceWeight[supply]) !== null && _k !== void 0 ? _k : 0) +
((_m = (_l = route.pathProperties.resourceWeight) === null || _l === void 0 ? void 0 : _l[supply]) !== null && _m !== void 0 ? _m : 0);
}
}
currentNode = nextNode;
}
return results;
}
/**

@@ -99,3 +159,3 @@ * Given the provided weights of each edge

calculateShortestPathAsLinkedListResult(start, finish, properties = {}) {
var _a, _b;
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
this.debug("Start running Dijkstra's algorithm");

@@ -146,16 +206,22 @@ const startTime = Date.now();

const newSupplies = Object.assign({}, distances[smallest].supplies);
let recoverHere = {};
const totalConsumed = Object.assign({}, distances[smallest].totalConsumed);
const totalRecovered = Object.assign({}, distances[smallest].totalRecovered);
const totalResourceWeight = Object.assign({}, distances[smallest].resourceWeight);
let weightFromResources = 0;
const recoverHere = {};
if (nextNode.properties.consumes) {
for (const supply in nextNode.properties.consumes) {
if (newSupplies[supply]) {
newSupplies[supply] -= nextNode.properties.consumes[supply];
}
else {
newSupplies[supply] = -nextNode.properties.consumes[supply];
}
if (newSupplies[supply] < 0) {
candidate += 1000000000;
}
const consumed = (_a = nextNode.properties.consumes[supply]) !== null && _a !== void 0 ? _a : 0;
const originalSupply = (_b = newSupplies[supply]) !== null && _b !== void 0 ? _b : 0;
newSupplies[supply] = originalSupply - consumed;
totalConsumed[supply] = ((_c = totalConsumed[supply]) !== null && _c !== void 0 ? _c : 0) + consumed;
}
}
// any step with negative supplies is a step we can't take
for (const supply in newSupplies) {
const supp = newSupplies[supply];
if (supp && supp < 0) {
candidate += Math.abs(supp) * 100000;
}
}
if (nextVertexProperties && nextVertexProperties.recover) {

@@ -165,10 +231,22 @@ this.debug('recover found');

const smallestSupplies = distances[smallest].supplies;
if (properties.maxSupplies &&
properties.maxSupplies[supply] &&
smallestSupplies &&
smallestSupplies[supply]) {
const recoverAmount = properties.maxSupplies[supply] - newSupplies[supply];
const supplyFunction = nextVertexProperties.recover[supply];
const supplyCapacity = (_d = properties.supplyCapacity) === null || _d === void 0 ? void 0 : _d[supply];
const currentSupply = (_e = newSupplies[supply]) !== null && _e !== void 0 ? _e : 0;
if (!supplyCapacity) {
throw new Error('No capacity for supply ' + supply + ', cannot recover.');
}
if (smallestSupplies &&
smallestSupplies[supply] &&
supplyFunction) {
const { recoverAmount, cost } = supplyFunction(currentSupply, supplyCapacity);
// increase cost of path by the amount of resources we need to recover times the cost of recovering here
candidate += cost;
weightFromResources += cost;
recoverHere[supply] = recoverAmount;
totalResourceWeight[supply] =
((_f = totalResourceWeight[supply]) !== null && _f !== void 0 ? _f : 0) + cost;
totalRecovered[supply] =
((_g = totalRecovered[supply]) !== null && _g !== void 0 ? _g : 0) + recoverAmount;
}
newSupplies[supply] = (_b = (_a = properties.maxSupplies) === null || _a === void 0 ? void 0 : _a[supply]) !== null && _b !== void 0 ? _b : 0;
newSupplies[supply] = (_j = (_h = properties.supplyCapacity) === null || _h === void 0 ? void 0 : _h[supply]) !== null && _j !== void 0 ? _j : 0;
}

@@ -179,4 +257,7 @@ }

priority: candidate,
totalConsumed,
totalRecovered,
resourceWeight: totalResourceWeight,
};
this.debug('On ', smallest, ' traveling to ', nextNode.id, ' state at end of trip ', newProperties);
this.debug('On ', smallest, ' over ', nextNode.properties.id, ' traveling to ', nextNode.id, ' state at end of trip ', newProperties);
const nextNeighbor = nextNode.id;

@@ -189,3 +270,3 @@ if (candidate < distances[nextNeighbor].priority) {

previous[nextNeighbor] = smallest;
previousEdgeId[nextNeighbor] = Object.assign(Object.assign({}, nextNode.properties), { recover: recoverHere });
previousEdgeId[nextNeighbor] = Object.assign(Object.assign({}, nextNode.properties), { recover: recoverHere, weightFromResources });
//enqueue in priority queue with new priority

@@ -229,2 +310,5 @@ nodes.enqueue(nextNeighbor, newProperties);

weight: finalPath[i + 1].weight,
weightFromResources: finalPath[i + 1].weightFromResources,
totalConsumed: finalPath[i + 1].totalConsumed,
totalRecovered: finalPath[i + 1].totalRecovered,
}

@@ -249,3 +333,3 @@ : {

const result = this.calculateShortestPathAsLinkedListResult(start, finish, properties);
let finalPath = [];
const finalPath = [];
if (result.finalPath.length > 0) {

@@ -265,2 +349,2 @@ result.finalPath.forEach((item, index) => {

exports.DijkstraCalculator = DijkstraCalculator;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBLE1BQU0sYUFBYTtJQUdqQjtRQUNFLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPLENBQUMsRUFBVSxFQUFFLFVBQTBCO1FBQzVDLE1BQU0sT0FBTyxHQUFTLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRTtZQUNkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0QyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUTtnQkFBRSxNQUFNO1lBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQzFCLEdBQUcsR0FBRyxTQUFTLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBQ0QsT0FBTztRQUNMLE1BQU0sR0FBRyxH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
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBLE1BQU0sYUFBYTtJQUdqQjtRQUNFLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPLENBQUMsRUFBVSxFQUFFLFVBQXFDO1FBQ3ZELE1BQU0sT0FBTyxHQUFvQixFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEVBQUU7WUFDZCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVE7Z0JBQUUsTUFBTTtZQUNyRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztZQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUMxQixHQUFHLEdBQUcsU0FBUyxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUNELE9BQU87UUFDTCxNQUFNLEdBQUcs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

@@ -5,35 +5,48 @@ /**

export type NodeId = string;
export interface Node {
export interface Node<RESOURCES extends string> {
id: NodeId;
properties: PathProperties;
properties: PathProperties<RESOURCES>;
}
export interface LinkedListItem {
type PartialRecord<K extends keyof any, T> = Partial<Record<K, T>>;
export interface LinkedListItem<RESOURCES extends string> {
source: NodeId;
target: NodeId;
edge?: NodeId;
consumes?: Record<string, number>;
recover?: Record<string, number>;
consumes?: PartialRecord<RESOURCES, number>;
recover?: PartialRecord<RESOURCES, number>;
weight?: number;
weightFromResources?: number;
totalConsumed?: PartialRecord<RESOURCES, number>;
totalRecovered?: PartialRecord<RESOURCES, number>;
}
export interface VertexProperties {
recover?: Record<string, boolean>;
export interface VertexProperties<RESOURCES extends string> {
recover?: PartialRecord<RESOURCES, (currentLevel: number, maxLevel: number) => {
recoverAmount: number;
cost: number;
}>;
}
export interface EdgeProperties {
export interface EdgeProperties<RESOURCES extends string> {
id?: string;
weight: number;
consumes?: Record<string, number>;
recover?: Record<string, number>;
consumes?: PartialRecord<RESOURCES, number>;
recover?: PartialRecord<RESOURCES, number>;
totalConsumed?: PartialRecord<RESOURCES, number>;
totalRecovered?: PartialRecord<RESOURCES, number>;
weightFromResources?: number;
}
export interface PathProperties {
export interface PathProperties<RESOURCES extends string> {
priority: number;
supplies?: Record<string, number>;
maxSupplies?: Record<string, number>;
supplies?: PartialRecord<RESOURCES, number>;
supplyCapacity?: PartialRecord<RESOURCES, number>;
totalConsumed?: PartialRecord<RESOURCES, number>;
totalRecovered?: PartialRecord<RESOURCES, number>;
resourceWeight?: PartialRecord<RESOURCES, number>;
}
export type PathReturnProperties = PathProperties & {
export type PathReturnProperties<RESOURCES extends string> = PathProperties<RESOURCES> & {
timeTaken: number;
};
export type PathNode = {
export type PathNode<RESOURCES extends string> = {
vertexId: NodeId;
} & Partial<EdgeProperties>;
export declare class DijkstraCalculator {
} & Partial<EdgeProperties<RESOURCES>>;
export declare class DijkstraCalculator<RESOURCES extends string> {
private heuristic?;

@@ -44,12 +57,16 @@ private isDebugging;

id: NodeId;
properties: EdgeProperties;
properties: EdgeProperties<RESOURCES>;
}[];
};
vertexProperties: {
[key: NodeId]: VertexProperties;
[key: NodeId]: VertexProperties<RESOURCES>;
};
constructor(heuristic?: ((vertex: NodeId, target: NodeId) => number) | undefined, isDebugging?: boolean);
addVertex(vertex: NodeId, properties?: VertexProperties): void;
addEdge(vertex1: NodeId, vertex2: NodeId, properties?: EdgeProperties): void;
addVertex(vertex: NodeId, properties?: VertexProperties<RESOURCES>): void;
addEdge(vertex1: NodeId, vertex2: NodeId, properties?: EdgeProperties<RESOURCES>): void;
debug(...args: any[]): void;
calculateShortestRouteAsLinkedListResults(nodes: NodeId[], properties?: Omit<PathProperties<RESOURCES>, 'priority'>): {
finalPath: LinkedListItem<RESOURCES>[];
pathProperties: PathReturnProperties<RESOURCES>;
};
/**

@@ -61,5 +78,5 @@ * Given the provided weights of each edge

*/
calculateShortestPathAsLinkedListResult(start: NodeId, finish: NodeId, properties?: Omit<PathProperties, 'priority'>): {
finalPath: LinkedListItem[];
pathProperties: PathReturnProperties;
calculateShortestPathAsLinkedListResult(start: NodeId, finish: NodeId, properties?: Omit<PathProperties<RESOURCES>, 'priority'>): {
finalPath: LinkedListItem<RESOURCES>[];
pathProperties: PathReturnProperties<RESOURCES>;
};

@@ -72,6 +89,7 @@ /**

*/
calculateShortestPath(start: NodeId, finish: NodeId, properties?: Omit<PathProperties, 'priority'>): {
calculateShortestPath(start: NodeId, finish: NodeId, properties?: Omit<PathProperties<RESOURCES>, 'priority'>): {
finalPath: string[];
pathProperties: PathReturnProperties;
pathProperties: PathReturnProperties<RESOURCES>;
};
}
export {};

@@ -93,2 +93,67 @@ class PriorityQueue {

}
calculateShortestRouteAsLinkedListResults(nodes, properties = {}) {
// calculate route from first node hitting all specified nodes in order
const startNode = nodes.shift();
if (!startNode) {
throw new Error('No nodes provided');
}
const results = {
finalPath: [],
pathProperties: {
priority: 0,
timeTaken: 0,
supplies: {},
totalConsumed: {},
totalRecovered: {},
resourceWeight: {},
},
};
let currentNode = startNode;
while (nodes.length > 0) {
const nextNode = nodes.shift();
if (!nextNode) {
throw new Error('No nodes provided');
}
const route = this.calculateShortestPathAsLinkedListResult(currentNode, nextNode, {
...properties,
supplies: {
...properties.supplies,
...results.pathProperties.supplies,
},
});
results.finalPath = results.finalPath.concat(route.finalPath);
results.pathProperties.priority += route.pathProperties.priority;
results.pathProperties.timeTaken += route.pathProperties.timeTaken;
for (const supply in route.pathProperties.supplies) {
if (results.pathProperties.supplies) {
results.pathProperties.supplies[supply] =
(results.pathProperties.supplies[supply] ?? 0) +
(route.pathProperties.supplies?.[supply] ?? 0);
}
}
for (const supply in route.pathProperties.totalConsumed) {
if (results.pathProperties.totalConsumed) {
results.pathProperties.totalConsumed[supply] =
(results.pathProperties.totalConsumed[supply] ?? 0) +
(route.pathProperties.totalConsumed?.[supply] ?? 0);
}
}
for (const supply in route.pathProperties.totalRecovered) {
if (results.pathProperties.totalRecovered) {
results.pathProperties.totalRecovered[supply] =
(results.pathProperties.totalRecovered[supply] ?? 0) +
(route.pathProperties.totalRecovered?.[supply] ?? 0);
}
}
for (const supply in route.pathProperties.resourceWeight) {
if (results.pathProperties.resourceWeight) {
results.pathProperties.resourceWeight[supply] =
(results.pathProperties.resourceWeight[supply] ?? 0) +
(route.pathProperties.resourceWeight?.[supply] ?? 0);
}
}
currentNode = nextNode;
}
return results;
}
/**

@@ -146,17 +211,31 @@ * Given the provided weights of each edge

(this.heuristic ? this.heuristic(nextNode.id, finish) : 0);
const newSupplies = { ...distances[smallest].supplies };
let recoverHere = {};
const newSupplies = {
...distances[smallest].supplies,
};
const totalConsumed = {
...distances[smallest].totalConsumed,
};
const totalRecovered = {
...distances[smallest].totalRecovered,
};
const totalResourceWeight = {
...distances[smallest].resourceWeight,
};
let weightFromResources = 0;
const recoverHere = {};
if (nextNode.properties.consumes) {
for (const supply in nextNode.properties.consumes) {
if (newSupplies[supply]) {
newSupplies[supply] -= nextNode.properties.consumes[supply];
}
else {
newSupplies[supply] = -nextNode.properties.consumes[supply];
}
if (newSupplies[supply] < 0) {
candidate += 1000000000;
}
const consumed = nextNode.properties.consumes[supply] ?? 0;
const originalSupply = newSupplies[supply] ?? 0;
newSupplies[supply] = originalSupply - consumed;
totalConsumed[supply] = (totalConsumed[supply] ?? 0) + consumed;
}
}
// any step with negative supplies is a step we can't take
for (const supply in newSupplies) {
const supp = newSupplies[supply];
if (supp && supp < 0) {
candidate += Math.abs(supp) * 100000;
}
}
if (nextVertexProperties && nextVertexProperties.recover) {

@@ -166,10 +245,22 @@ this.debug('recover found');

const smallestSupplies = distances[smallest].supplies;
if (properties.maxSupplies &&
properties.maxSupplies[supply] &&
smallestSupplies &&
smallestSupplies[supply]) {
const recoverAmount = properties.maxSupplies[supply] - newSupplies[supply];
const supplyFunction = nextVertexProperties.recover[supply];
const supplyCapacity = properties.supplyCapacity?.[supply];
const currentSupply = newSupplies[supply] ?? 0;
if (!supplyCapacity) {
throw new Error('No capacity for supply ' + supply + ', cannot recover.');
}
if (smallestSupplies &&
smallestSupplies[supply] &&
supplyFunction) {
const { recoverAmount, cost } = supplyFunction(currentSupply, supplyCapacity);
// increase cost of path by the amount of resources we need to recover times the cost of recovering here
candidate += cost;
weightFromResources += cost;
recoverHere[supply] = recoverAmount;
totalResourceWeight[supply] =
(totalResourceWeight[supply] ?? 0) + cost;
totalRecovered[supply] =
(totalRecovered[supply] ?? 0) + recoverAmount;
}
newSupplies[supply] = properties.maxSupplies?.[supply] ?? 0;
newSupplies[supply] = properties.supplyCapacity?.[supply] ?? 0;
}

@@ -180,4 +271,7 @@ }

priority: candidate,
totalConsumed,
totalRecovered,
resourceWeight: totalResourceWeight,
};
this.debug('On ', smallest, ' traveling to ', nextNode.id, ' state at end of trip ', newProperties);
this.debug('On ', smallest, ' over ', nextNode.properties.id, ' traveling to ', nextNode.id, ' state at end of trip ', newProperties);
const nextNeighbor = nextNode.id;

@@ -193,2 +287,3 @@ if (candidate < distances[nextNeighbor].priority) {

recover: recoverHere,
weightFromResources,
};

@@ -233,2 +328,5 @@ //enqueue in priority queue with new priority

weight: finalPath[i + 1].weight,
weightFromResources: finalPath[i + 1].weightFromResources,
totalConsumed: finalPath[i + 1].totalConsumed,
totalRecovered: finalPath[i + 1].totalRecovered,
}

@@ -256,3 +354,3 @@ : {

const result = this.calculateShortestPathAsLinkedListResult(start, finish, properties);
let finalPath = [];
const finalPath = [];
if (result.finalPath.length > 0) {

@@ -271,2 +369,2 @@ result.finalPath.forEach((item, index) => {

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE1BQU0sYUFBYTtJQUNqQixNQUFNLENBQVM7SUFFZjtRQUNFLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPLENBQUMsRUFBVSxFQUFFLFVBQTBCO1FBQzVDLE1BQU0sT0FBTyxHQUFTLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRTtZQUNkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0QyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUTtnQkFBRSxNQUFNO1lBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQzFCLEdBQUcsR0FBRyxTQUFTLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBQ0QsT0FBTztRQUNM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
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE1BQU0sYUFBYTtJQUNqQixNQUFNLENBQW9CO0lBRTFCO1FBQ0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELE9BQU8sQ0FBQyxFQUFVLEVBQUUsVUFBcUM7UUFDdkQsTUFBTSxPQUFPLEdBQW9CLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRTtZQUNkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0QyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUTtnQkFBRSxNQUFNO1lBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQzFCLEdBQUcsR0FBRyxTQUFTLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBQ0QsT0FBTztRQUNMLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDckIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsUUFBUTtRQUNOLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsT0FBTyxJQUFJLEVBQUU7WUFDWCxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNqQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNsQyxJQUFJLFNBQXNDLEVBQ3hDLFVBQXVDLENBQUM7WUFDMUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBRWhCLElBQUksWUFBWSxHQUFHLE1BQU0sRUFBRTtnQkFDekIsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3RDLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7b0JBQy9ELElBQUksR0FBRyxZQUFZLENBQUM7aUJBQ3JCO2FBQ0Y7WUFDRCxJQUFJLGFBQWEsR0FBRyxNQUFNLEVBQUU7Z0JBQzFCLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN4QyxJQUNFLENBQUMsSUFBSSxLQUFLLElBQUk7b0JBQ1osVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7b0JBQy9ELENBQUMsSUFBSSxLQUFLLElBQUk7d0JBQ1osU0FBUzt3QkFDVCxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUNqRTtvQkFDQSxJQUFJLEdBQUcsYUFBYSxDQUFDO2lCQUN0QjthQUNGO1lBQ0QsSUFBSSxJQUFJLEtBQUssSUFBSTtnQkFBRSxNQUFNO1lBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztZQUM1QixHQUFHLEdBQUcsSUFBSSxDQUFDO1NBQ1o7SUFDSCxDQUFDO0NBQ0Y7QUF5REQsTUFBTSxPQUFPLGtCQUFrQjtJQU9uQjtJQUNBO0lBUFYsYUFBYSxDQUVYO0lBQ0YsZ0JBQWdCLENBQWlEO0lBRWpFLFlBQ1UsU0FBc0QsRUFDdEQsY0FBYyxLQUFLO1FBRG5CLGNBQVMsR0FBVCxTQUFTLENBQTZDO1FBQ3RELGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBRTNCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFjLEVBQUUsVUFBd0M7UUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDaEMsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQzthQUM1QztTQUNGO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FDTCxPQUFlLEVBQ2YsT0FBZSxFQUNmLGFBQXdDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtRQUVyRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsSUFBVztRQUNsQixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCx5Q0FBeUMsQ0FDdkMsS0FBZSxFQUNmLGFBQTBELEVBQUU7UUFFNUQsdUVBQXVFO1FBQ3ZFLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ3RDO1FBRUQsTUFBTSxPQUFPLEdBR1Q7WUFDRixTQUFTLEVBQUUsRUFBRTtZQUNiLGNBQWMsRUFBRTtnQkFDZCxRQUFRLEVBQUUsQ0FBQztnQkFDWCxTQUFTLEVBQUUsQ0FBQztnQkFDWixRQUFRLEVBQUUsRUFBRTtnQkFDWixhQUFhLEVBQUUsRUFBRTtnQkFDakIsY0FBYyxFQUFFLEVBQUU7Z0JBQ2xCLGNBQWMsRUFBRSxFQUFFO2FBQ25CO1NBQ0YsQ0FBQztRQUVGLElBQUksV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUM1QixPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQzthQUN0QztZQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyx1Q0FBdUMsQ0FDeEQsV0FBVyxFQUNYLFFBQVEsRUFDUjtnQkFDRSxHQUFHLFVBQVU7Z0JBQ2IsUUFBUSxFQUFFO29CQUNSLEdBQUcsVUFBVSxDQUFDLFFBQVE7b0JBQ3RCLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRO2lCQUNuQzthQUNGLENBQ0YsQ0FBQztZQUNGLE9BQU8sQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlELE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO1lBQ2pFLE9BQU8sQ0FBQyxjQUFjLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO1lBQ25FLEtBQUssTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xELElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7b0JBQ25DLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQzt3QkFDckMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzlDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDbEQ7YUFDRjtZQUNELEtBQUssTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUU7Z0JBQ3ZELElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUU7b0JBQ3hDLE9BQU8sQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQzt3QkFDMUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ25ELENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDdkQ7YUFDRjtZQUNELEtBQUssTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3hELElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUU7b0JBQ3pDLE9BQU8sQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQzt3QkFDM0MsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ3BELENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDeEQ7YUFDRjtZQUNELEtBQUssTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3hELElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUU7b0JBQ3pDLE9BQU8sQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQzt3QkFDM0MsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ3BELENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDeEQ7YUFDRjtZQUNELFdBQVcsR0FBRyxRQUFRLENBQUM7U0FDeEI7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx1Q0FBdUMsQ0FDckMsS0FBYSxFQUNiLE1BQWMsRUFDZCxhQUEwRCxFQUFFO1FBSzVELElBQUksQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUNqRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFNBQVMsR0FBaUQsRUFBRSxDQUFDO1FBQ25FLE1BQU0sUUFBUSxHQUE4QixFQUFFLENBQUM7UUFDL0MsTUFBTSxjQUFjLEdBRWhCLEVBQUUsQ0FBQztRQUNQLE1BQU0sSUFBSSxHQUEwQixFQUFFLENBQUMsQ0FBQyxrQkFBa0I7UUFDMUQsSUFBSSxZQUFZLEdBQTJCLElBQUksQ0FBQztRQUNoRCxJQUFJLFFBQVEsR0FBa0IsSUFBSSxDQUFDO1FBQ25DLHdCQUF3QjtRQUN4QixLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdkMsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFO2dCQUNwQixTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDdkQ7aUJBQU07Z0JBQ0wsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUMxRCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2FBQzlEO1lBQ0QsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDekI7UUFDRCx5Q0FBeUM7UUFDekMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUMxQixZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9CLFFBQVEsR0FBRyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzNCLElBQUksUUFBUSxLQUFLLE1BQU0sRUFBRTtnQkFDdkIsYUFBYTtnQkFDYixnQ0FBZ0M7Z0JBQ2hDLE9BQU8sUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDckMsSUFBSSxDQUFDLElBQUksQ0FDUCxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUN0QixDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dCQUNyRCxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQzNCLENBQUM7b0JBQ0YsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDL0I7Z0JBQ0QsTUFBTTthQUNQO1lBQ0QsSUFBSSxRQUFRLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7Z0JBQ3pELEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDbkQsdUJBQXVCO29CQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN4RCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2hFLDRDQUE0QztvQkFDNUMsSUFBSSxTQUFTLEdBQ1gsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVE7d0JBQzVCLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTt3QkFDMUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM3RCxNQUFNLFdBQVcsR0FBcUM7d0JBQ3BELEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVE7cUJBQ2hDLENBQUM7b0JBQ0YsTUFBTSxhQUFhLEdBQXFDO3dCQUN0RCxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhO3FCQUNyQyxDQUFDO29CQUNGLE1BQU0sY0FBYyxHQUFxQzt3QkFDdkQsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYztxQkFDdEMsQ0FBQztvQkFDRixNQUFNLG1CQUFtQixHQUFxQzt3QkFDNUQsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYztxQkFDdEMsQ0FBQztvQkFDRixJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQztvQkFDNUIsTUFBTSxXQUFXLEdBQTJCLEVBQUUsQ0FBQztvQkFDL0MsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTt3QkFDaEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTs0QkFDakQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUMzRCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNoRCxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsY0FBYyxHQUFHLFFBQVEsQ0FBQzs0QkFDaEQsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQzt5QkFDakU7cUJBQ0Y7b0JBQ0QsMERBQTBEO29CQUMxRCxLQUFLLE1BQU0sTUFBTSxJQUFJLFdBQVcsRUFBRTt3QkFDaEMsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNqQyxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFOzRCQUNwQixTQUFTLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7eUJBQ3RDO3FCQUNGO29CQUVELElBQUksb0JBQW9CLElBQUksb0JBQW9CLENBQUMsT0FBTyxFQUFFO3dCQUN4RCxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO3dCQUM1QixLQUFLLE1BQU0sTUFBTSxJQUFJLG9CQUFvQixDQUFDLE9BQU8sRUFBRTs0QkFDakQsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDOzRCQUN0RCxNQUFNLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQzVELE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFDM0QsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDL0MsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQ0FDbkIsTUFBTSxJQUFJLEtBQUssQ0FDYix5QkFBeUIsR0FBRyxNQUFNLEdBQUcsbUJBQW1CLENBQ3pELENBQUM7NkJBQ0g7NEJBQ0QsSUFDRSxnQkFBZ0I7Z0NBQ2hCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztnQ0FDeEIsY0FBYyxFQUNkO2dDQUNBLE1BQU0sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEdBQUcsY0FBYyxDQUM1QyxhQUFhLEVBQ2IsY0FBYyxDQUNmLENBQUM7Z0NBQ0Ysd0dBQXdHO2dDQUV4RyxTQUFTLElBQUksSUFBSSxDQUFDO2dDQUNsQixtQkFBbUIsSUFBSSxJQUFJLENBQUM7Z0NBQzVCLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxhQUFhLENBQUM7Z0NBQ3BDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztvQ0FDekIsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Z0NBQzVDLGNBQWMsQ0FBQyxNQUFNLENBQUM7b0NBQ3BCLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQzs2QkFDakQ7NEJBQ0QsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ2hFO3FCQUNGO29CQUNELE1BQU0sYUFBYSxHQUE4Qjt3QkFDL0MsUUFBUSxFQUFFLFdBQVc7d0JBQ3JCLFFBQVEsRUFBRSxTQUFTO3dCQUNuQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsY0FBYyxFQUFFLG1CQUFtQjtxQkFDcEMsQ0FBQztvQkFDRixJQUFJLENBQUMsS0FBSyxDQUNSLEtBQUssRUFDTCxRQUFRLEVBQ1IsUUFBUSxFQUNSLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUN0QixnQkFBZ0IsRUFDaEIsUUFBUSxDQUFDLEVBQUUsRUFDWCx3QkFBd0IsRUFDeEIsYUFBYSxDQUNkLENBQUM7b0JBQ0YsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRTt3QkFDaEQsSUFBSSxDQUFDLEtBQUssQ0FDUixjQUFjLEVBQ2QsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxFQUNoQyxLQUFLLEVBQ0wsWUFBWSxFQUNaLGFBQWEsRUFDYixXQUFXLENBQ1osQ0FBQzt3QkFDRiw0Q0FBNEM7d0JBQzVDLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxhQUFhLENBQUM7d0JBQ3hDLDRDQUE0Qzt3QkFDNUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLFFBQVEsQ0FBQzt3QkFDbEMsY0FBYyxDQUFDLFlBQVksQ0FBQyxHQUFHOzRCQUM3QixHQUFHLFFBQVEsQ0FBQyxVQUFVOzRCQUN0QixPQUFPLEVBQUUsV0FBVzs0QkFDcEIsbUJBQW1CO3lCQUNwQixDQUFDO3dCQUNGLDZDQUE2Qzt3QkFDN0MsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7cUJBQzVDO2lCQUNGO2FBQ0Y7U0FDRjtRQUVELElBQUksU0FBUyxHQUEwQixFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDNUI7YUFBTTtZQUNMLFNBQVMsR0FBRyxJQUFJO2lCQUNiLE1BQU0sQ0FBQztnQkFDTixRQUFRLEVBQUUsUUFBUTthQUNuQixDQUFDO2lCQUNELE9BQU8sRUFBRSxDQUFDO1NBQ2Q7UUFFRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3pCLDRGQUE0RjtZQUM1RixPQUFPO2dCQUNMLFNBQVMsRUFBRSxFQUFFO2dCQUNiLGNBQWMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUU7YUFDbkUsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUVoRCxNQUFNLGVBQWUsR0FBZ0MsRUFBRSxDQUFDO1FBQ3hELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixNQUFNO2FBQ1A7WUFDRCxlQUFlLENBQUMsSUFBSSxDQUNsQixTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2pCLENBQUMsQ0FBQztvQkFDRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVE7b0JBQzdCLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVE7b0JBQ2pDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3pCLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVE7b0JBQ25DLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU87b0JBQ2pDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU07b0JBQy9CLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO29CQUN6RCxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhO29CQUM3QyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjO2lCQUNoRDtnQkFDSCxDQUFDLENBQUM7b0JBQ0UsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRO29CQUM3QixNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRO2lCQUNsQyxDQUNOLENBQUM7U0FDSDtRQUNELE9BQU87WUFDTCxTQUFTLEVBQUUsZUFBZTtZQUMxQixjQUFjLEVBQUU7Z0JBQ2QsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO2dCQUNwQixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVM7YUFDbEM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscUJBQXFCLENBQ25CLEtBQWEsRUFDYixNQUFjLEVBQ2QsYUFBMEQsRUFBRTtRQUU1RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsdUNBQXVDLENBQ3pELEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxDQUNYLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBYSxFQUFFLENBQUM7UUFDL0IsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksS0FBSyxLQUFLLENBQUM7b0JBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPO1lBQ0wsU0FBUztZQUNULGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYztTQUN0QyxDQUFDO0lBQ0osQ0FBQztDQUNGIn0=
{
"name": "@aeolun/dijkstra-calculator",
"version": "1.3.2",
"version": "1.4.0",
"description": "Dijkstra calculator for the shortest path in a graph of nodes given a weight.",

@@ -15,8 +15,7 @@ "main": "build/main/index.js",

"devDependencies": {
"@types/node": "^18.15.3",
"@ava/typescript": "^1.1.1",
"@istanbuljs/nyc-config-typescript": "^1.0.1",
"@types/node": "^18.15.3",
"@typescript-eslint/eslint-plugin": "^4.0.1",
"@typescript-eslint/parser": "^4.0.1",
"ava": "5.3.1",
"codecov": "^3.5.0",

@@ -37,4 +36,6 @@ "cspell": "^4.1.0",

"ts-node": "^9.0.0",
"tsx": "^3.14.0",
"typedoc": "^0.24.8",
"typescript": "^4.5.5"
"typescript": "^4.5.5",
"vitest": "^0.34.6"
},

@@ -50,14 +51,2 @@ "files": [

],
"ava": {
"failFast": true,
"timeout": "60s",
"typescript": {
"rewritePaths": {
"src/": "build/main/"
}
},
"files": [
"!build/module/**"
]
},
"config": {},

@@ -82,5 +71,3 @@ "prettier": {

"test:lint": "eslint src --ext .ts",
"test:prettier": "prettier \"src/**/*.ts\" --list-different",
"test:spelling": "cspell \"{README.md,.github/*.md,src/**/*.ts}\"",
"test:unit": "nyc --silent ava",
"test:unit": "vitest",
"check-cli": "./node_modules/.bin/npm-run-all -s test diff-integration-tests check-integration-tests",

@@ -87,0 +74,0 @@ "check-integration-tests": "./node_modules/.bin/npm-run-all -s check-integration-test:*",

@@ -5,3 +5,3 @@ ![Dijkstra's Calculator](./banner.jpg)

> @aeolun: This is mildly modified from the original to return the final weight for a route
> @aeolun: This is fairly seriously modified from the original to return the final weight for a route, and take into account a variety of limits like fuel

@@ -8,0 +8,0 @@ - **GitHub URL**: https://github.com/getditto/dijkstra-calculator

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc