API @deepkit/topsort
npm install @deepkit/topsort
A topological sort implementation based on arrays.Classes
export class ArraySort<T = string> extends BaseImplementation<T> {
set(elements: Map<T, T[]>);
add(element: T, dependencies: T[] = []);
reset();
/**
* Sorts dependencies and returns internal used data structure.
*
* @throws CircularDependencyException if a circular dependency has been found
* @throws ElementNotFoundException if a dependency can not be found
*/
sort();
}
export class GroupArraySort<T = string, TYPE = string> extends BaseImplementation<T> {
groups: Group<TYPE>[];
sameTypeExtraGrouping: boolean;
throwOnNonExistingDependency: boolean;
set(elements: Map<{
item: T;
type: TYPE;
}, T[]>);
add(item: T, type: TYPE, dependencies: T[] = []);
visit(element: ItemElement<T, TYPE>, parents?: Set<T>): number;
getGroups();
/**
* Sorts dependencies and returns internal used data structure.
*
* @throws CircularDependencyException if a circular dependency has been found
* @throws ElementNotFoundException if a dependency can not be found
*/
sort();
}
export abstract class BaseImplementation<T> {
circularInterceptor?: (items: T[]) => void;
constructor(public throwCircularDependency: boolean = true);
}
Errors
export class CircularDependencyException<T> extends Error {
constructor(public readonly nodes: T[]);
getStart(): T;
getEnd(): T;
}
export class ElementNotFoundException<T> extends Error {
constructor(public readonly element: T, public readonly dependency: T);
}