Merge pull request #5535 from yevt/master

jug graph library definitions
This commit is contained in:
Horiuchi_H
2015-08-25 13:15:16 +09:00
2 changed files with 256 additions and 0 deletions
+121
View File
@@ -0,0 +1,121 @@
/// <reference path='./jug.d.ts' />
import jug = require('jug');
/*
Example 1.
*/
var root = jug.init();
root
.seed()
.seed();
root.data({
interest: {
genre: 'Action',
year: 2014,
stars: [ 'Eva Green', 'Duck Dogers' ]
}
});
root.edge( 0 ).data({
info: {
name: '300: Rise of an Empire',
genre: 'Action',
stars: [ 'Eva Green', 'Duck Dogers' ],
year: 2014
}
});
root.edge( 1 ).data({
info: {
name: 'Man of Steel',
genre: 'Action',
stars: [ 'Henry Cavill' ],
year: 2013
}
});
root.edge(1).seed({
test: {
some: 'value'
}
});
var distance = root.proximity('interest', 'info');
var close = distance.indexOf( 0 );
var nodeData = root.edge( close ).data();
/*
Example 2.
*/
var wire = jug.init({
interest: {
cloth: 't-shirt',
color: 'red',
size: 'medium'
}
});
/*
Seed node
*/
wire.seed();
/*
Seed node with data.
*/
wire.seed({
info: {
cloth: 't-shirt',
color: 'red',
size: 'medium'
}
});
/*
Access node.
*/
wire.edge(0);
/*
Get distance between nodes
*/
// first argument is 'from' object
// second argument is 'to' object
root.proximity('interest', 'info');
/*
Find a node.
*/
wire.find('info', { color: 'red' });
/*
Verify the level.
*/
wire.edge(0).level();
/*
Verify if the current node is the root
*/
wire.isRoot();
/*
Getting childs of an specified edge
*/
wire.getChildsOf(0);
/*
Getting parents of an specified level and edge.
*/
wire.getParentsFrom(1, 0);
/*
Getting the length of childs of an specified edge.
*/
wire.getScopeOf(0);
/*
Getting siblings of current level, excluding the index indicated.
*/
wire.getSiblingsOf(1);
+135
View File
@@ -0,0 +1,135 @@
// Type definitions for jug
// Project: https://github.com/kaiquewdev/Graph
// Definitions by: yevt <https://github.com/yevt>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
declare module "jug" {
/**
* Internal structure of a vertex
*/
interface VertexStructure {
level: number;
edge: Array<Vertex>,
data: VertexData,
parent: Vertex
}
/**
* User data of a vertex.
*/
type VertexData = Object;
/**
* Graph constructor function.
*/
interface GraphConstructor {
new():Graph;
}
/**
* Creates root node of a graph.
*/
interface Graph {
vertex:VertexConstructor;
init(data?:VertexData):Vertex;
}
/**
* Vertex constructor function.
*/
interface VertexConstructor {
new(obj?:VertexData):Vertex;
}
/**
* Represents one node of a graph.
*/
interface Vertex {
/**
* Initial vertex data.
*/
internal: VertexStructure;
/**
* Verify the level.
*/
level(): number;
/**
* Get edge count.
*/
edge(): number;
/**
* Access node.
* @param index - edge index.
*/
edge(index:number): Vertex;
/**
* Seed node.
* @param [data] - created vertex UserData.
*/
seed(data?:VertexData): Vertex;
/**
* Verify if the current node is the root.
*/
isRoot(): boolean;
/**
* Set node data.
* @param obj - data to be set.
*/
data(obj:VertexData): Vertex;
/**
* Get node data.
*/
data(): VertexData;
/**
* Get distance between nodes.
* @param from
* @param to
*/
proximity(from:string, to:string): Array<number>;
/**
* Find a node.
* @param {string} type - object type.
* @param {Object} query - _.where query object.
*/
find(type:string|void, query:Object): Array<VertexData>;
/**
* Get siblings of specified edge.
* @param {number} index - edge index.
*/
getSiblingsOf(index:number): Array<VertexData>;
/**
* Getting childs of an specified edge.
* @param egde - target vertex;
*/
getChildsOf(egde:number): Array<VertexData>;
/**
* Getting parents of an specified level and edge.
* @param {number} level - max level.
* @param {number} edge - edge index.
*/
getParentsFrom(level:number, edge:number): Array<VertexData>;
/**
* Getting the length of childs of an specified edge.
* @param {number} edge - edge index.
*/
getScopeOf(edge:number): number;
}
var jug:Graph;
export = jug;
}