Skip to content

Latest commit

 

History

History

rstream-dot

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

@thi.ng/rstream-dot

npm version npm downloads Mastodon Follow

This project is part of the @thi.ng/umbrella monorepo.

About

Graphviz DOT conversion of @thi.ng/rstream dataflow graph topologies.

Status

STABLE - used in production

Search or submit any issues for this package

Related packages

Installation

yarn add @thi.ng/rstream-dot

ES module import:

<script type="module" src="https://cdn.skypack.dev/@thi.ng/rstream-dot"></script>

Skypack documentation

For Node.js REPL:

const rstreamDot = await import("@thi.ng/rstream-dot");

Package sizes (brotli'd, pre-treeshake): ESM: 807 bytes

Dependencies

Usage examples

Several demos in this repo's /examples directory are using this package.

A selection:

Screenshot Description Live demo Source
Minimal rstream dataflow graph Demo Source
Multi-layer vectorization & dithering of bitmap images Demo Source

API

Generated API docs

import { fromIterable, merge, trace } from "@thi.ng/rstream";
import { serialize } from "@thi.ng/rstream-dot";

// create dummy dataflow
const a = fromIterable([1, 2, 3]);
const b = fromIterable([10, 20, 30]);
a.map((x) => x * 10, { id: "x10" });
merge({ src: [a, b] }).subscribe(trace());

// now capture the topology by walking the graph from its root(s)
// and convert the result to GraphViz DOT format
console.log(serialize([a, b]));

Resulting output:

digraph g {
rankdir=LR;
node[fontname="sans-serif",fontsize=10,style=filled,fontcolor=white];
edge[fontname="sans-serif",fontsize=10];
s0[label="iterable-0\n(Stream)", color="blue"];
s1[label="x10", color="black"];
s2[label="in-iterable-0", color="black"];
s3[label="streammerge-2\n(StreamMerge)", color="red"];
s4[label="sub-3", color="black"];
s5[label="iterable-1\n(Stream)", color="blue"];
s6[label="in-iterable-1", color="black"];
s3 -> s4;
s2 -> s3;
s0 -> s1[label="xform"];
s0 -> s2;
s6 -> s3;
s5 -> s6;
}

Copy output to file graph.dot and then run:

dot -Tsvg -o graph.svg graph.dot

This will generate this diagram:

graphviz output

Authors

If this project contributes to an academic publication, please cite it as:

@misc{thing-rstream-dot,
  title = "@thi.ng/rstream-dot",
  author = "Karsten Schmidt",
  note = "https://thi.ng/rstream-dot",
  year = 2018
}

License

© 2018 - 2023 Karsten Schmidt // Apache License 2.0