A minimal, dependency-free A* search over an arbitrary graph, plus a binary heap it builds on. Written in JSY, a syntax preprocessor for JavaScript from the jsy-lang project.
npm install astar-minimalConstruct an AStar with four functions, then call find with a start node:
import { AStar } from 'astar-minimal'
const planner = new AStar(heurFn, goalFn, succFn, costFn)
const path = planner.find(start) // array of nodes start..goal, or [] if noneheurFn(node, start)estimated remaining cost fromnode(return0for plain Dijkstra).goalFn(node)true whennodeis a goal.succFn(node)array of successor nodes.costFn(prev, node)cost of the edge fromprevintonode;previsnullfor the start node. Returnnode.weight(ignoringprev) for per-node costs.
The binary heap AStar is built on is also exported, for direct use as a priority queue:
import { Heap } from 'astar-minimal'
const heap = new Heap(scoreFn, compareFn) // both optional; default to a min-heap over plain valuesnpm install
npm run buildJSY sources in code/ compile to ES modules in esm/.
npm testRuns test_astar (a spatial graph) and test_astar_edges (greedy trap, re-parenting, reopening a
closed node on a cheaper rediscovery, no path, start is goal, plus two cross-checks ported from
ngraph.path's test suite).