export interface Options { /** The sorting group the added items belong to */ group?: string /** The group or groups the added items must come before */ before?: string | Array<string> /** The group or groups the added items must come after */ after?: string | Array<string> /** A number used to sort items with equal before/after requirements */ sort?: number } export class Topo<T> { /** An array of the topologically sorted nodes. This list is renewed upon each call to topo.add() */ nodes: Array<T> /** Adds a node or list of nodes to be added and topologically sorted @param nodes - A mixed value or array of mixed values to be added as nodes to the topologically sorted list @param options - Optional sorting information about the nodes @returns Returns an array of the topologically sorted nodes */ add(nodes: T | Array<T>, options?: Options): Array<T> /** Merges another Topo object into the current object @param others - The other object or array of objects to be merged into the current one @returns Returns an array of the topologically sorted nodes */ merge(others: Topo<T> | Array<Topo<T>>): Array<T> }