# level-directed-graph-map

> [![CircleCI](https://circleci.com/gh/wehriam/level-directed-graph-map.svg?style=svg)](https://circleci.com/gh/wehriam/level-directed-graph-map) [![npm version](https://badge.fury.io/js/level-directed-graph-map.svg)](http://badge.fury.io/js/level-directed-

Latest version **1.1.1** (published 2018-03-04) · MIT license · 0 weekly downloads

## Install

```sh
npm install level-directed-graph-map
pnpm add level-directed-graph-map
yarn add level-directed-graph-map
bun add level-directed-graph-map
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.1 |
| Published | 2018-03-04 |
| First published | 2018-03-04 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 536.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | John Wehr |
| Maintainers | wehriam |

## Links

- npm: https://www.npmjs.com/package/level-directed-graph-map
- Repository: https://github.com/wehriam/level-directed-graph-map
- Homepage: https://github.com/wehriam/level-directed-graph-map#readme
- Issues: https://github.com/wehriam/level-directed-graph-map/issues
- npm.io page: https://npm.io/package/level-directed-graph-map

## Recent versions

- 1.1.1 (latest) — 2018-03-04
- 1.1.0 — 2018-03-04
- 1.0.2 — 2018-03-04
- 1.0.1 — 2018-03-04
- 1.0.0 — 2018-03-04

## README

# LevelDB Directed Graph Map

[![CircleCI](https://circleci.com/gh/wehriam/level-directed-graph-map.svg?style=svg)](https://circleci.com/gh/wehriam/level-directed-graph-map) [![npm version](https://badge.fury.io/js/level-directed-graph-map.svg)](http://badge.fury.io/js/level-directed-graph-map) [![codecov](https://codecov.io/gh/wehriam/level-directed-graph-map/branch/master/graph/badge.svg)](https://codecov.io/gh/wehriam/level-directed-graph-map)

Directed graph data structure [implemented](https://github.com/wehriam/level-directed-graph-map/blob/master/src/index.js) using LevelDB. Similiar to multi-key maps or bidirectional maps.

See [directed-graph-map](https://www.npmjs.com/package/directed-graph-map) for a synchronous, in-memory version.

```js
const run = async () => {
  const db = level('./optional-db-path');
  const dg = new LevelDirectedGraphMap(db, [], { namespace: 'example' });
  await dg.ready;
                              //  A
  await dg.addEdge('A', 'X'); //  ├── X
  await dg.addEdge('A', 'Y'); //  ├── Y
  await dg.addEdge('A', 'Z'); //  └── Z

  await dg.getTargets('A');   //  X, Y, Z

  await dg.size(); // 3
  await dg.edges(); // [['A', 'X'], ['A', 'Y'], ['A', 'Z']]
  await dg.sources(); // ['A']
  await dg.targets(); // ['X', 'Y', 'Z']
}

run();
```

## Install

`yarn add level-level-directed-graph-map`

## Usage

```js
const level = require('level');
const LevelDirectedGraphMap = require('level-directed-graph-map');

const run = async () => {
  const db = level('./optional-db-path');
  const dgm = new LevelDirectedGraphMap(db, [['A', 'B']], { namespace: 'example' });
  await dgm.ready;

  //  A
  //  └── B
  
  await dgm.hasEdge('A', 'B'); // true
  
  await dgm.addEdge('B', 'C');
  
  //  A
  //  └── B
  //      └── C
  
  await  dgm.hasEdge('B', 'C'); // true
  await  dgm.getTargets('A'); // new Set(['B']);
  await  dgm.getTargets('B'); // new Set(['C']);
  await  dgm.getTargets('C'); // new Set();
  await  dgm.getSources('A'); // new Set();
  await  dgm.getSources('B'); // new Set(['A']);
  await  dgm.getSources('C'); // new Set(['B']);
  
  await  dgm.removeSource('A');
  
  //  B
  //  └── C
  
  await dgm.hasEdge('A', 'B'); // false
  await dgm.getTargets('A'); // new Set();
  
  await dgm.removeTarget('C');
  
  //  Empty
  
  await dgm.getTargets('B'); // new Set();
  await dgm.hasEdge('B', 'C'); // false
  
  await dgm.addEdge('A', 'B');
  
  //  A
  //  └── B
  
  await dgm.hasEdge('A', 'B'); // true
  
  await dgm.removeEdge('A', 'B');
  
  //  Empty
  
  await dgm.hasEdge('A', 'B'); // false
}

run();
```

## API

<!-- Generated by documentation.js. Update this documentation by updating the source code. -->

#### Table of Contents

-   [LevelDirectedGraphMap](#leveldirectedgraphmap)
    -   [addEdge](#addedge)
    -   [removeEdge](#removeedge)
    -   [hasEdge](#hasedge)
    -   [removeSource](#removesource)
    -   [removeTarget](#removetarget)
    -   [hasSource](#hassource)
    -   [hasTarget](#hastarget)
    -   [getSources](#getsources)
    -   [getTargets](#gettargets)
    -   [edges](#edges)
    -   [size](#size)
    -   [sources](#sources)
    -   [targets](#targets)
-   [LevelDirectedGraphMap#ready](#leveldirectedgraphmapready)

### LevelDirectedGraphMap

Class representing a Level Directed Graph Map

**Parameters**

-   `db` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?** Object implementing the LevelUp interface
-   `edges` **Iterable&lt;\[[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String), [string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)]>** Iterable containing source -> target pairs (optional, default `[]`)
-   `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** Options object (optional, default `{}`)

#### addEdge

Add an edge to the graph map.

**Parameters**

-   `source` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Source of the edge
-   `target` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Target of the edge

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;void>** 

#### removeEdge

Remove an edge from the graph map.

**Parameters**

-   `source` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Source of the edge
-   `target` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Target of the edge

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;void>** 

#### hasEdge

Test if a edge exists in the graph map.

**Parameters**

-   `source` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Source of the edge
-   `target` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Target of the edge

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)>** Whether the edge exists in the graph map.

#### removeSource

Remove all edges from a source.

**Parameters**

-   `source` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Source of the edge

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;void>** 

#### removeTarget

Remove all edges to a target.

**Parameters**

-   `target` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Target of the edge

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;void>** 

#### hasSource

Test if a source exists in the graph map.

**Parameters**

-   `source` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Source of the edge

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)>** Whether the source exists in the graph map.

#### hasTarget

Test if a target exists in the graph map.

**Parameters**

-   `target` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Target of the edge

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)>** Whether the target exists in the graph map.

#### getSources

Get all sources with edges to a target.

**Parameters**

-   `target` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Target of the edge

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)&lt;[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>>** Set of sources

#### getTargets

Get all targets with edges from a source.

**Parameters**

-   `source` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Source of the edge

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)&lt;[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>>** Set of targets

#### edges

Array of edges

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)&lt;\[[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String), [string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)]>>** 

#### size

Edge count. Costly operation, use sparingly.

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)>** 

#### sources

Set of sources

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)&lt;[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>>** 

#### targets

Set of targets

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)&lt;[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>>** 

### LevelDirectedGraphMap#ready

Resolves when the map is initialized and ready for use

---
_Source: https://npm.io/package/level-directed-graph-map · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
