Skip to content
This repository was archived by the owner on Dec 12, 2022. It is now read-only.

Commit bf635de

Browse files
committed
upgrade ts-graphviz@0.16.0
1 parent d3221d1 commit bf635de

File tree

8 files changed

+116
-117
lines changed

8 files changed

+116
-117
lines changed

.denolized

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ render/utils.ts
44
render/renderer.ts
55
types.ts
66
model/nodes.ts
7+
model/utils.ts
78
model/edges.ts
89
model/root_clusters.ts
910
model/clusters.ts

model/clusters.ts

Lines changed: 17 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,9 @@
22
import { attribute } from "../attribute.ts";
33
import {
44
ClusterSubgraphAttributes,
5-
Compass,
65
EdgeAttributes,
7-
EdgeTarget,
8-
EdgeTargetLike,
9-
EdgeTargets,
10-
EdgeTargetsLike,
6+
EdgeTargetLikeTuple,
7+
EdgeTargetTuple,
118
ICluster,
129
IClusterCommonAttributes,
1310
IEdge,
@@ -16,13 +13,9 @@ import {
1613
NodeAttributes,
1714
} from "../types.ts";
1815
import { Attributes, AttributesBase } from "./attributes_base.ts";
19-
import {
20-
isEdgeTarget,
21-
isEdgeTargetLike,
22-
isEdgeTargetsLike,
23-
Node,
24-
} from "./nodes.ts";
16+
import { Node } from "./nodes.ts";
2517
import { Edge } from "./edges.ts";
18+
import { isNodeRefGroupLike, toNodeRef, toNodeRefGroup } from "./utils.ts";
2619
/**
2720
* Base class for clusters.
2821
* @hidden
@@ -165,49 +158,19 @@ export abstract class Cluster<T extends string> extends AttributesBase<T>
165158
}
166159
/** Create Edge and add it to the cluster. */
167160
public createEdge(
168-
targets: (EdgeTargetLike | EdgeTargetsLike)[],
161+
targets: EdgeTargetLikeTuple,
169162
attributes?: EdgeAttributes,
170163
): IEdge {
171-
const edge = new Edge(
172-
targets.map((
173-
t,
174-
) => (isEdgeTargetsLike(t)
175-
? this.toEdgeTargets(t)
176-
: this.toEdgeTarget(t))
177-
),
178-
attributes,
179-
);
164+
const ts = targets.map((
165+
t,
166+
) => (isNodeRefGroupLike(t)
167+
? toNodeRefGroup(t)
168+
: toNodeRef(t))
169+
) as EdgeTargetTuple;
170+
const edge = new Edge(ts, attributes);
180171
this.objects.edges.add(edge);
181172
return edge;
182173
}
183-
/** @hidden */
184-
private toEdgeTarget(target: EdgeTargetLike): EdgeTarget {
185-
if (isEdgeTarget(target)) {
186-
return target;
187-
}
188-
const [id, port, compass] = target.split(":");
189-
const n = this.getNode(id);
190-
if (n !== undefined) {
191-
if (port && (compass === undefined || Compass.is(compass))) {
192-
return n.port({ port, compass });
193-
}
194-
return n;
195-
}
196-
if (Compass.is(compass)) {
197-
return { id, port, compass };
198-
}
199-
return { id, port };
200-
}
201-
/** @hidden */
202-
private toEdgeTargets(targets: EdgeTargetsLike): EdgeTargets {
203-
if (
204-
targets.length < 2 &&
205-
(isEdgeTargetLike(targets[0]) && isEdgeTargetLike(targets[1])) === false
206-
) {
207-
throw Error("EdgeTargets must have at least 2 elements.");
208-
}
209-
return targets.map((t) => this.toEdgeTarget(t));
210-
}
211174
/**
212175
* Create a subgraph by specifying its id (or get it if it already exists).
213176
*
@@ -450,7 +413,7 @@ export abstract class Cluster<T extends string> extends AttributesBase<T>
450413
* @param callback Callbacks for manipulating created or retrieved edge.
451414
*/
452415
public edge(
453-
targets: EdgeTargetLike[],
416+
targets: EdgeTargetLikeTuple,
454417
callback?: (edge: IEdge) => void,
455418
): IEdge;
456419
/**
@@ -481,7 +444,7 @@ export abstract class Cluster<T extends string> extends AttributesBase<T>
481444
* @param callback Callbacks for manipulating created or retrieved edge.
482445
*/
483446
public edge(
484-
targets: EdgeTargetLike[],
447+
targets: EdgeTargetLikeTuple,
485448
attributes: EdgeAttributes,
486449
callback?: (edge: IEdge) => void,
487450
): IEdge;
@@ -510,11 +473,11 @@ export abstract class Cluster<T extends string> extends AttributesBase<T>
510473
*/
511474
public edge(attributes: EdgeAttributes): void;
512475
public edge(
513-
firstArg: EdgeTargetLike[] | EdgeAttributes,
476+
firstArg: EdgeTargetLikeTuple | EdgeAttributes,
514477
...args: unknown[]
515478
): IEdge | void {
516479
if (Array.isArray(firstArg)) {
517-
const targets = [...firstArg];
480+
const targets = firstArg;
518481
const attributes = args.find((arg: unknown): arg is EdgeAttributes =>
519482
typeof arg === "object"
520483
);
@@ -574,7 +537,7 @@ export class Subgraph
574537
super();
575538
this.id = args.find((arg): arg is string => typeof arg === "string");
576539
const attributes = args.find((arg): arg is ClusterSubgraphAttributes =>
577-
typeof arg === "object"
540+
typeof arg === "object" && arg !== null
578541
);
579542
if (attributes !== undefined) {
580543
this.apply(attributes);

model/edges.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
import {
22
EdgeAttributes,
3-
EdgeTarget,
4-
EdgeTargets,
3+
EdgeTargetTuple,
54
IAttributes,
5+
IEdge,
66
} from "../types.ts";
77
import { DotObject } from "./abstract.ts";
88
import { attribute } from "../attribute.ts";
99
import { Attributes } from "./attributes_base.ts";
10-
import { isEdgeTargetLike } from "./nodes.ts";
10+
import { isNodeRefLike } from "./utils.ts";
1111
/**
1212
* @category Primary
1313
*/
14-
export class Edge extends DotObject {
14+
export class Edge extends DotObject implements IEdge {
1515
/** Comments to include when outputting with toDot. */
1616
public comment?: string;
1717
public readonly attributes: IAttributes<attribute.Edge>;
1818
constructor(
19-
public readonly targets: ReadonlyArray<EdgeTarget | EdgeTargets>,
19+
public readonly targets: EdgeTargetTuple,
2020
attributes?: EdgeAttributes,
2121
) {
2222
super();
2323
if (
2424
targets.length < 2 &&
25-
(isEdgeTargetLike(targets[0]) && isEdgeTargetLike(targets[1])) === false
25+
(isNodeRefLike(targets[0]) && isNodeRefLike(targets[1])) === false
2626
) {
2727
throw Error(
2828
"The element of Edge target is missing or not satisfied as Edge target.",

model/nodes.ts

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
import {
2-
EdgeTarget,
3-
EdgeTargetLike,
42
IAttributes,
53
IForwardRefNode,
64
INode,
@@ -10,7 +8,6 @@ import {
108
import { DotObject } from "./abstract.ts";
119
import { attribute } from "../attribute.ts";
1210
import { Attributes } from "./attributes_base.ts";
13-
import { EdgeTargetsLike } from "../types.ts";
1411
/**
1512
* Node object.
1613
* @category Primary
@@ -31,27 +28,3 @@ export class Node extends DotObject implements INode {
3128
return { id: this.id, ...port };
3229
}
3330
}
34-
export function isForwardRefNode(object: unknown): object is IForwardRefNode {
35-
return typeof object == "object" && object !== null &&
36-
typeof (object as IForwardRefNode).id === "string";
37-
}
38-
/**
39-
* @hidden
40-
*/
41-
export function isEdgeTarget(node: unknown): node is EdgeTarget {
42-
return node instanceof Node || isForwardRefNode(node);
43-
}
44-
/**
45-
* @hidden
46-
*/
47-
export function isEdgeTargetLike(node: unknown): node is EdgeTargetLike {
48-
return typeof node === "string" || isEdgeTarget(node);
49-
}
50-
/**
51-
* @hidden
52-
*/
53-
export function isEdgeTargetsLike(
54-
target: EdgeTargetLike | EdgeTargetsLike,
55-
): target is EdgeTargetsLike {
56-
return Array.isArray(target) && target.every(isEdgeTargetLike);
57-
}

model/utils.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import {
2+
Compass,
3+
IForwardRefNode,
4+
NodeRef,
5+
NodeRefGroup,
6+
NodeRefGroupLike,
7+
NodeRefLike,
8+
} from "../types.ts";
9+
import { Node } from "./nodes.ts";
10+
/** @hidden */
11+
export function isForwardRefNode(object: unknown): object is IForwardRefNode {
12+
return typeof object == "object" && object !== null &&
13+
typeof (object as IForwardRefNode).id === "string";
14+
}
15+
/** @hidden */
16+
export function isNodeRef(node: unknown): node is NodeRef {
17+
return node instanceof Node || isForwardRefNode(node);
18+
}
19+
/** @hidden */
20+
export function isNodeRefLike(node: unknown): node is NodeRefLike {
21+
return typeof node === "string" || isNodeRef(node);
22+
}
23+
/** @hidden */
24+
export function isNodeRefGroupLike(
25+
target: NodeRefLike | NodeRefGroupLike,
26+
): target is NodeRefGroupLike {
27+
return Array.isArray(target) && target.every(isNodeRefLike);
28+
}
29+
/** @hidden */
30+
export function toNodeRef(target: NodeRefLike): NodeRef {
31+
if (isNodeRef(target)) {
32+
return target;
33+
}
34+
const [id, port, compass] = target.split(":");
35+
if (Compass.is(compass)) {
36+
return { id, port, compass };
37+
}
38+
return { id, port };
39+
}
40+
/** @hidden */
41+
export function toNodeRefGroup(targets: NodeRefGroupLike): NodeRefGroup {
42+
if (
43+
targets.length < 2 &&
44+
(isNodeRefLike(targets[0]) && isNodeRefLike(targets[1])) === false
45+
) {
46+
throw Error("EdgeTargets must have at least 2 elements.");
47+
}
48+
return targets.map((t) => toNodeRef(t));
49+
}

render/renderer.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import {
66
IRootCluster,
77
ISubgraph,
88
} from "../types.ts";
9-
import { isEdgeTargetLike } from "../model/nodes.ts";
10-
import { renderEdgeTargets } from "./utils.ts";
9+
import { isNodeRef } from "../model/utils.ts";
10+
import { renderNodeRefGroup } from "./utils.ts";
1111
import {
1212
commentOutIfExist,
1313
concatWordsWithSpace,
@@ -25,14 +25,14 @@ import {
2525
renderAttributeValue,
2626
renderAttributeWithSemi,
2727
renderClusterType,
28-
renderEdgeTarget,
28+
renderNodeRef,
2929
spaceLeftPad,
3030
} from "./utils.ts";
3131
export class Renderer {
3232
private root?: IRootCluster;
3333
protected renderNode(node: INode): string {
3434
const comment = commentOutIfExist(node.comment);
35-
const target = renderEdgeTarget(node);
35+
const target = renderNodeRef(node);
3636
const attrs = node.attributes.size > 0
3737
? spaceLeftPad(renderAttributes(node.attributes))
3838
: undefined;
@@ -45,7 +45,7 @@ export class Renderer {
4545
isGraph(this.root) ? " -- " : " -> ",
4646
edge.targets.map((
4747
t,
48-
) => (isEdgeTargetLike(t) ? renderEdgeTarget(t) : renderEdgeTargets(t))),
48+
) => (isNodeRef(t) ? renderNodeRef(t) : renderNodeRefGroup(t))),
4949
);
5050
const attrs = edge.attributes.size > 0
5151
? spaceLeftPad(renderAttributes(edge.attributes))

render/utils.ts

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
import {
22
AttributesValue,
3-
EdgeTarget,
4-
EdgeTargets,
53
IAttributes,
64
ICluster,
75
IEdge,
86
INode,
97
IRootCluster,
108
ISubgraph,
9+
NodeRef,
10+
NodeRefGroup,
1111
} from "../types.ts";
1212
import { Subgraph } from "../model/clusters.ts";
1313
import { Edge } from "../model/edges.ts";
14-
import { isForwardRefNode, Node } from "../model/nodes.ts";
14+
import { Node } from "../model/nodes.ts";
1515
import { Digraph, Graph, RootCluster } from "../model/root_clusters.ts";
1616
import { Attributes } from "../model/attributes_base.ts";
17+
import { isForwardRefNode } from "../model/utils.ts";
1718
export function escape(str: string): string {
1819
return str.replace(/\n/g, "\\n").replace(/"/g, '\\"');
1920
}
@@ -154,21 +155,18 @@ export function renderAttributes(attributes: IAttributes): string {
154155
"]",
155156
);
156157
}
157-
export function renderEdgeTarget(edgeTarget: EdgeTarget): string | undefined {
158-
if (isNode(edgeTarget)) {
159-
return renderAttributeValue(edgeTarget.id);
160-
} else if (isForwardRefNode(edgeTarget)) {
161-
const port = edgeTarget.port;
162-
const compass = edgeTarget.compass;
158+
export function renderNodeRef(node: NodeRef): string | undefined {
159+
if (isNode(node)) {
160+
return renderAttributeValue(node.id);
161+
} else if (isForwardRefNode(node)) {
162+
const { id, port, compass } = node;
163163
return concatWordsWithColon(
164-
renderAttributeValue(edgeTarget.id),
164+
renderAttributeValue(id),
165165
port !== undefined ? renderAttributeValue(port) : undefined,
166166
compass !== undefined ? renderAttributeValue(compass) : undefined,
167167
);
168168
}
169169
}
170-
export function renderEdgeTargets(
171-
edgeTargets: EdgeTargets,
172-
): string | undefined {
173-
return "{" + concatWordsWithSpace(...edgeTargets.map(renderEdgeTarget)) + "}";
170+
export function renderNodeRefGroup(group: NodeRefGroup): string | undefined {
171+
return "{" + concatWordsWithSpace(...group.map(renderNodeRef)) + "}";
174172
}

0 commit comments

Comments
 (0)