[topo] Add types

This commit is contained in:
Dimitri Benin
2018-12-24 17:17:41 +01:00
parent 42e3741a35
commit 8f83b7e09d
4 changed files with 87 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
// Type definitions for topo 3.0
// Project: https://github.com/hapijs/topo#readme
// Definitions by: BendingBender <https://github.com/BendingBender>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.3
export = Topo;
/**
* The Topo object is the container for topologically sorting a list of nodes with non-circular interdependencies.
*/
declare class Topo<TNode = any, TGroup = string> {
/**
* An array of the topologically sorted nodes. This list is renewed upon each call to `topo.add()`.
*/
nodes: TNode[];
/**
* Specifies an additional node or list of nodes to be 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`:
* - `group` - a string naming the group to which `nodes` should be assigned. The group name `'?'` is reserved.
* - `before` - a string or array of strings specifying the groups that `nodes` must precede in the topological sort.
* - `after` - a string or array of strings specifying the groups that `nodes` must succeed in the topological sort.
* - `sort` - a numerical value used to sort items when performing a `topo.merge()`.
* @returns an array of the topologically sorted nodes.
*/
add(
nodes: TNode | TNode[],
options?: {
group?: TGroup;
before?: TGroup | TGroup[];
after?: TGroup | TGroup[];
sort?: number;
}
): TNode[];
/**
* Merges another `Topo` object into the current object.
* If the order in which items have been added to each list matters, use the `sort` option in `topo.add()`
* with an incrementing value providing an absolute sort order among all items added to either object.
*
* @param others the other object or array of objects to be merged into the current one. `null` values are ignored.
* @returns an array of the topologically sorted nodes. Will throw if a dependency error is found as a result of the combined items.
*/
merge(others: Topo<TNode, TGroup> | Array<Topo<TNode, TGroup>>): TNode[];
}
+15
View File
@@ -0,0 +1,15 @@
import Topo = require('topo');
const morning = new Topo<string, 'breakfast' | 'prep' | 'dinner'>();
morning.add('Nap', { after: ['breakfast', 'prep'] }); // $ExpectType string[]
morning.add('Nap', { after: 'foo' }); // $ExpectError
morning.add(['Make toast', 'Pour juice'], { before: 'breakfast', group: 'prep' }); // $ExpectType string[]
morning.add('Eat breakfast', { group: 'breakfast' }); // $ExpectType string[]
morning.nodes; // $ExpectType string[]
const dinner = new Topo<string, 'breakfast' | 'prep' | 'dinner'>();
dinner.add('Eat dinner', { group: 'dinner', after: 'breakfast' }); // $ExpectType string[]
morning.merge(dinner);
+23
View File
@@ -0,0 +1,23 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"es6"
],
"noImplicitAny": true,
"noImplicitThis": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"baseUrl": "../",
"typeRoots": [
"../"
],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
},
"files": [
"index.d.ts",
"topo-tests.ts"
]
}
+1
View File
@@ -0,0 +1 @@
{ "extends": "dtslint/dt.json" }