From 2e7b1786f91faf2ac7992790337f5f6a2b05ef15 Mon Sep 17 00:00:00 2001 From: Yura Evtushenko Date: Tue, 25 Aug 2015 05:21:41 +0700 Subject: [PATCH 1/3] graph library definitions --- jug/jug-tests.ts | 121 ++++++++++++++++++++++++++++++++++++++++++ jug/jug.d.ts | 135 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 256 insertions(+) create mode 100644 jug/jug-tests.ts create mode 100644 jug/jug.d.ts diff --git a/jug/jug-tests.ts b/jug/jug-tests.ts new file mode 100644 index 000000000..7353428e0 --- /dev/null +++ b/jug/jug-tests.ts @@ -0,0 +1,121 @@ +/// +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); diff --git a/jug/jug.d.ts b/jug/jug.d.ts new file mode 100644 index 000000000..820700b8c --- /dev/null +++ b/jug/jug.d.ts @@ -0,0 +1,135 @@ +// Type definitions for jug +// Project: https://github.com/kaiquewdev/Graph +// Definitions by: yevt +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +declare module "jug" { + /** + * Internal structure of a vertex + */ + interface VertexStructure { + level: number; + edge: Array, + 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 {string} + * @param to {string} + */ + proximity(from, to): Array; + + /** + * Find a node. + * @param {string} type - object type. + * @param {Object} query - _.where query object. + */ + find(type:string|void, query:Object): Array; + + /** + * Get siblings of specified edge. + * @param {number} index - edge index. + */ + getSiblingsOf(index:number): Array; + + /** + * Getting childs of an specified edge. + * @param egde - target vertex; + */ + getChildsOf(egde:number): Array + + /** + * Getting parents of an specified level and edge. + * @param {number} level - max level. + * @param {number} edge - edge index. + */ + getParentsFrom(level:number, edge:number): Array + + /** + * Getting the length of childs of an specified edge. + * @param {number} edge - edge index. + */ + getScopeOf(edge:number): number; + } + + var jug:Graph; + + export = jug; +} From 35f9ae3f620a1ec666c3e35eabac5ccaba8d1d08 Mon Sep 17 00:00:00 2001 From: Yura Evtushenko Date: Tue, 25 Aug 2015 05:26:10 +0700 Subject: [PATCH 2/3] fix from and to params --- jug/jug.d.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/jug/jug.d.ts b/jug/jug.d.ts index 820700b8c..e1d4a6cbf 100644 --- a/jug/jug.d.ts +++ b/jug/jug.d.ts @@ -76,7 +76,7 @@ declare module "jug" { /** * Verify if the current node is the root. */ - isRoot(): boolean + isRoot(): boolean; /** * Set node data. @@ -91,10 +91,10 @@ declare module "jug" { /** * Get distance between nodes. - * @param from {string} - * @param to {string} + * @param from + * @param to */ - proximity(from, to): Array; + proximity(from:string, to:string): Array; /** * Find a node. From 12215ff9f604df6f3093e6cc8736a157a0043faf Mon Sep 17 00:00:00 2001 From: Yura Evtushenko Date: Tue, 25 Aug 2015 05:27:04 +0700 Subject: [PATCH 3/3] commas --- jug/jug.d.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jug/jug.d.ts b/jug/jug.d.ts index e1d4a6cbf..5c7fe4010 100644 --- a/jug/jug.d.ts +++ b/jug/jug.d.ts @@ -87,7 +87,7 @@ declare module "jug" { /** * Get node data. */ - data(): VertexData + data(): VertexData; /** * Get distance between nodes. @@ -113,14 +113,14 @@ declare module "jug" { * Getting childs of an specified edge. * @param egde - target vertex; */ - getChildsOf(egde:number): Array + getChildsOf(egde:number): Array; /** * Getting parents of an specified level and edge. * @param {number} level - max level. * @param {number} edge - edge index. */ - getParentsFrom(level:number, edge:number): Array + getParentsFrom(level:number, edge:number): Array; /** * Getting the length of childs of an specified edge.