# API `@deepkit/topsort`

```shell
npm install @deepkit/topsort
```

## API reference of @deepkit/topsort

### ArraySort (class)

A topological sort implementation based on  arrays.

```typescript
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();
}
```

Source: https://github.com/deepkit/deepkit-framework/blob/master/packages/topsort/src/array-sort.ts#L24

### GroupArraySort (class)

```typescript
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();
}
```

Source: https://github.com/deepkit/deepkit-framework/blob/master/packages/topsort/src/group-array-sort.ts#L29

### CircularDependencyException (error)

```typescript
export class CircularDependencyException<T> extends Error {
    constructor(public readonly nodes: T[]);
    getStart(): T;
    getEnd(): T;
}
```

Source: https://github.com/deepkit/deepkit-framework/blob/master/packages/topsort/src/base.ts#L11

### ElementNotFoundException (error)

```typescript
export class ElementNotFoundException<T> extends Error {
    constructor(public readonly element: T, public readonly dependency: T);
}
```

Source: https://github.com/deepkit/deepkit-framework/blob/master/packages/topsort/src/base.ts#L25

### BaseImplementation (class)

```typescript
export abstract class BaseImplementation<T> {
    circularInterceptor?: (items: T[]) => void;
    constructor(public throwCircularDependency: boolean = true);
}
```

Source: https://github.com/deepkit/deepkit-framework/blob/master/packages/topsort/src/base.ts#L31
