mirror of
https://github.com/gosticks/DefinitelyTyped.git
synced 2026-08-11 20:40:20 +00:00
[topo] Add types
This commit is contained in:
Vendored
+48
@@ -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[];
|
||||
}
|
||||
@@ -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);
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{ "extends": "dtslint/dt.json" }
|
||||
Reference in New Issue
Block a user