cdk-dia 0.2.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +40 -4
- package/{bin → dist/bin}/cli.d.ts +0 -0
- package/{bin → dist/bin}/cli.js +17 -18
- package/dist/bin/cli.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/{src → dist/src}/cdk/cdk-tree.d.ts +8 -6
- package/{src → dist/src}/cdk/cdk-tree.js +28 -12
- package/dist/src/cdk/cdk-tree.js.map +1 -0
- package/{src → dist/src}/cdk/construct-decorator.d.ts +4 -0
- package/{src → dist/src}/cdk/construct-decorator.js +10 -1
- package/{src → dist/src}/cdk/construct-decorator.js.map +1 -1
- package/{src → dist/src}/cdk/index.d.ts +0 -0
- package/{src → dist/src}/cdk/index.js +0 -0
- package/{src → dist/src}/cdk/index.js.map +0 -0
- package/{src/diagram/tests/aws-edge-resolver.test.d.ts → dist/src/cdk/tests/cdk-tree.test.d.ts} +0 -0
- package/dist/src/cdk/tests/cdk-tree.test.js +65 -0
- package/dist/src/cdk/tests/cdk-tree.test.js.map +1 -0
- package/{src → dist/src}/cdk/tree-json-loader.d.ts +0 -0
- package/{src → dist/src}/cdk/tree-json-loader.js +0 -0
- package/{src → dist/src}/cdk/tree-json-loader.js.map +0 -0
- package/dist/src/cdk-dia.d.ts +9 -0
- package/{src → dist/src}/cdk-dia.js +23 -5
- package/dist/src/cdk-dia.js.map +1 -0
- package/{src → dist/src}/diagram/aws/aws-diagram-generator.d.ts +3 -2
- package/{src → dist/src}/diagram/aws/aws-diagram-generator.js +43 -10
- package/dist/src/diagram/aws/aws-diagram-generator.js.map +1 -0
- package/{src → dist/src}/diagram/aws/aws-edge-resolver.d.ts +3 -2
- package/{src → dist/src}/diagram/aws/aws-edge-resolver.js +45 -29
- package/dist/src/diagram/aws/aws-edge-resolver.js.map +1 -0
- package/{src → dist/src}/diagram/aws/aws-icon-supplier.d.ts +0 -0
- package/{src → dist/src}/diagram/aws/aws-icon-supplier.js +0 -0
- package/{src → dist/src}/diagram/aws/aws-icon-supplier.js.map +0 -0
- package/{src → dist/src}/diagram/aws/awsResouceIconMatches.json +21 -4
- package/dist/src/diagram/aws/edge-target.d.ts +17 -0
- package/dist/src/diagram/aws/edge-target.js +45 -0
- package/dist/src/diagram/aws/edge-target.js.map +1 -0
- package/dist/src/diagram/aws/stack-exports-container.d.ts +8 -0
- package/dist/src/diagram/aws/stack-exports-container.js +35 -0
- package/dist/src/diagram/aws/stack-exports-container.js.map +1 -0
- package/{src → dist/src}/diagram/component/component.d.ts +3 -1
- package/{src → dist/src}/diagram/component/component.js +6 -1
- package/{src → dist/src}/diagram/component/component.js.map +1 -1
- package/{src → dist/src}/diagram/component/customizable-attribute.d.ts +0 -0
- package/{src → dist/src}/diagram/component/customizable-attribute.js +0 -0
- package/{src → dist/src}/diagram/component/customizable-attribute.js.map +0 -0
- package/{src → dist/src}/diagram/component/diagram-component.d.ts +0 -0
- package/{src → dist/src}/diagram/component/diagram-component.js +0 -0
- package/{src → dist/src}/diagram/component/diagram-component.js.map +0 -0
- package/{src → dist/src}/diagram/component/icon.d.ts +0 -0
- package/{src → dist/src}/diagram/component/icon.js +0 -0
- package/{src → dist/src}/diagram/component/icon.js.map +0 -0
- package/{src → dist/src}/diagram/component/link.d.ts +0 -0
- package/{src → dist/src}/diagram/component/link.js +0 -0
- package/{src → dist/src}/diagram/component/link.js.map +0 -0
- package/{src → dist/src}/diagram/component/root-component.d.ts +0 -0
- package/{src → dist/src}/diagram/component/root-component.js +0 -0
- package/{src → dist/src}/diagram/component/root-component.js.map +0 -0
- package/{src → dist/src}/diagram/component-links.d.ts +0 -0
- package/{src → dist/src}/diagram/component-links.js +0 -0
- package/{src → dist/src}/diagram/component-links.js.map +0 -0
- package/{src → dist/src}/diagram/diagram.d.ts +0 -0
- package/{src → dist/src}/diagram/diagram.js +0 -0
- package/{src → dist/src}/diagram/diagram.js.map +0 -0
- package/{src → dist/src}/diagram/index.d.ts +1 -0
- package/{src → dist/src}/diagram/index.js +1 -0
- package/{src → dist/src}/diagram/index.js.map +1 -1
- package/{src/graphviz/tests/generator.test.d.ts → dist/src/diagram/tests/aws-edge-resolver.test.d.ts} +0 -0
- package/{src → dist/src}/diagram/tests/aws-edge-resolver.test.js +75 -14
- package/dist/src/diagram/tests/aws-edge-resolver.test.js.map +1 -0
- package/{src → dist/src}/diagram/tests/generator.test.d.ts +0 -0
- package/{src → dist/src}/diagram/tests/generator.test.js +0 -0
- package/{src → dist/src}/diagram/tests/generator.test.js.map +0 -0
- package/dist/src/diagram/tests/stack-exports-container.test.d.ts +1 -0
- package/dist/src/diagram/tests/stack-exports-container.test.js +50 -0
- package/dist/src/diagram/tests/stack-exports-container.test.js.map +1 -0
- package/dist/src/render/cytoscape/base/bundle.css +4 -0
- package/dist/src/render/cytoscape/base/bundle.css.map +1 -0
- package/dist/src/render/cytoscape/base/index.html +1 -0
- package/dist/src/render/cytoscape/base/js/app.8e9fe77f.js +39504 -0
- package/dist/src/render/cytoscape/base/js/app.8e9fe77f.js.map +1 -0
- package/dist/src/render/cytoscape/cytoscape-element.d.ts +16 -0
- package/dist/src/render/cytoscape/cytoscape-element.js +3 -0
- package/dist/src/render/cytoscape/cytoscape-element.js.map +1 -0
- package/dist/src/render/cytoscape/cytoscape-generator.d.ts +8 -0
- package/dist/src/render/cytoscape/cytoscape-generator.js +126 -0
- package/dist/src/render/cytoscape/cytoscape-generator.js.map +1 -0
- package/dist/src/render/cytoscape/cytoscape.d.ts +18 -0
- package/dist/src/render/cytoscape/cytoscape.js +75 -0
- package/dist/src/render/cytoscape/cytoscape.js.map +1 -0
- package/dist/src/render/cytoscape/index.d.ts +1 -0
- package/{src/graphviz → dist/src/render/cytoscape}/index.js +1 -2
- package/dist/src/render/cytoscape/index.js.map +1 -0
- package/dist/src/render/cytoscape/tests/generator.test.d.ts +1 -0
- package/dist/src/render/cytoscape/tests/generator.test.js +56 -0
- package/dist/src/render/cytoscape/tests/generator.test.js.map +1 -0
- package/dist/src/render/diagram-renderer.d.ts +15 -0
- package/{src/graphviz/rendering-error.js → dist/src/render/diagram-renderer.js} +5 -2
- package/dist/src/render/diagram-renderer.js.map +1 -0
- package/dist/src/render/graphviz/GraphvizGenerator.d.ts +11 -0
- package/{src/graphviz/generator.js → dist/src/render/graphviz/GraphvizGenerator.js} +16 -69
- package/dist/src/render/graphviz/GraphvizGenerator.js.map +1 -0
- package/dist/src/render/graphviz/graphviz.d.ts +20 -0
- package/dist/src/render/graphviz/graphviz.js +115 -0
- package/dist/src/render/graphviz/graphviz.js.map +1 -0
- package/dist/src/render/graphviz/index.d.ts +1 -0
- package/dist/src/render/graphviz/index.js +14 -0
- package/dist/src/render/graphviz/index.js.map +1 -0
- package/{src → dist/src/render}/graphviz/styling.d.ts +1 -4
- package/{src → dist/src/render}/graphviz/styling.js +4 -15
- package/dist/src/render/graphviz/styling.js.map +1 -0
- package/dist/src/render/graphviz/tests/generator.test.d.ts +1 -0
- package/{src → dist/src/render}/graphviz/tests/generator.test.js +8 -13
- package/dist/src/render/graphviz/tests/generator.test.js.map +1 -0
- package/dist/src/render/index.d.ts +1 -0
- package/dist/src/render/index.js +14 -0
- package/dist/src/render/index.js.map +1 -0
- package/dist/src/render/styling.d.ts +3 -0
- package/dist/src/render/styling.js +16 -0
- package/dist/src/render/styling.js.map +1 -0
- package/{src → dist/src}/test-fixtures/testCases.d.ts +0 -0
- package/{src → dist/src}/test-fixtures/testCases.js +19 -1
- package/{src → dist/src}/test-fixtures/testCases.js.map +1 -1
- package/icons/aws/Resource/Res_Compute/Res_48_Dark/Res_Amazon-EC2_C6g-Instance_48_Dark.png +0 -0
- package/icons/aws/Resource/Res_Compute/Res_48_Dark/Res_Amazon-EC2_D3-Instance_48_Dark.png +0 -0
- package/icons/aws/Resource/Res_Compute/Res_48_Dark/Res_Amazon-EC2_D3en-Instance_48_Dark.png +0 -0
- package/icons/aws/Resource/Res_Compute/Res_48_Dark/Res_Amazon-EC2_G4ad-Instance_48_Dark.png +0 -0
- package/icons/aws/Resource/Res_Compute/Res_48_Dark/Res_Amazon-EC2_M6g-Instance_48_Dark.png +0 -0
- package/icons/aws/Resource/Res_Compute/Res_48_Dark/Res_Amazon-EC2_Mac-Instance_48_Dark.png +0 -0
- package/icons/aws/Resource/Res_Compute/Res_48_Dark/Res_Amazon-EC2_P3dn-Instance_48_Dark.png +0 -0
- package/icons/aws/Resource/Res_Compute/Res_48_Dark/Res_Amazon-EC2_P4-Instance_48_Dark.png +0 -0
- package/icons/aws/Resource/Res_Compute/Res_48_Dark/Res_Amazon-EC2_P4d-Instance_48_Dark.png +0 -0
- package/icons/aws/Resource/Res_Compute/Res_48_Dark/Res_Amazon-EC2_R6g-Instance_48_Dark.png +0 -0
- package/icons/aws/Resource/Res_Compute/Res_48_Dark/Res_Amazon-EC2_T3a-Instance_48_Dark.png +0 -0
- package/icons/aws/Resource/Res_Compute/Res_48_Dark/Res_Amazon-EC2_T4g-Instance_48_Dark.png +0 -0
- package/icons/aws/Resource/Res_Compute/Res_48_Dark/Res_Amazon-EC2_Trainium-Instance_48_Dark.png +0 -0
- package/icons/aws/Service/Arch_Security-Identity-Compliance/64/Arch_Amazon-Cognito_64.png +0 -0
- package/icons/aws/cloudwatch_metric_filter.png +0 -0
- package/icons/aws/security_group.png +0 -0
- package/package.json +13 -6
- package/bin/cli.js.map +0 -1
- package/src/cdk/cdk-tree.js.map +0 -1
- package/src/cdk-dia.d.ts +0 -3
- package/src/cdk-dia.js.map +0 -1
- package/src/diagram/aws/aws-diagram-generator.js.map +0 -1
- package/src/diagram/aws/aws-edge-resolver.js.map +0 -1
- package/src/diagram/tests/aws-edge-resolver.test.js.map +0 -1
- package/src/graphviz/generator.d.ts +0 -15
- package/src/graphviz/generator.js.map +0 -1
- package/src/graphviz/index.d.ts +0 -2
- package/src/graphviz/index.js.map +0 -1
- package/src/graphviz/rendering-error.d.ts +0 -5
- package/src/graphviz/rendering-error.js.map +0 -1
- package/src/graphviz/styling.js.map +0 -1
- package/src/graphviz/tests/generator.test.js.map +0 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface CytoscapeElementNode {
|
|
2
|
+
data: {
|
|
3
|
+
id: string;
|
|
4
|
+
[x: string]: any;
|
|
5
|
+
};
|
|
6
|
+
[x: string]: any;
|
|
7
|
+
}
|
|
8
|
+
export interface CytoscapeElementEdge {
|
|
9
|
+
data: {
|
|
10
|
+
source: string;
|
|
11
|
+
target: string;
|
|
12
|
+
[x: string]: any;
|
|
13
|
+
};
|
|
14
|
+
[x: string]: any;
|
|
15
|
+
}
|
|
16
|
+
export declare type CytoscapeElement = CytoscapeElementNode | CytoscapeElementEdge;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cytoscape-element.js","sourceRoot":"","sources":["../../../../src/render/cytoscape/cytoscape-element.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.CytoscapeGenerator = void 0;
|
|
23
|
+
const _ = __importStar(require("lodash"));
|
|
24
|
+
const styling_1 = require("../styling");
|
|
25
|
+
class CytoscapeGenerator {
|
|
26
|
+
static generate(dia) {
|
|
27
|
+
const elements = this.elements(dia);
|
|
28
|
+
const styles = CytoscapeGenerator.styles();
|
|
29
|
+
return [elements, styles];
|
|
30
|
+
}
|
|
31
|
+
static styles() {
|
|
32
|
+
const styles = [
|
|
33
|
+
{
|
|
34
|
+
selector: 'node',
|
|
35
|
+
style: {
|
|
36
|
+
'label': 'data(id)',
|
|
37
|
+
'border-style': 'solid',
|
|
38
|
+
'border-width': '1px',
|
|
39
|
+
'border-color': 'green',
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
selector: 'edge',
|
|
44
|
+
style: {
|
|
45
|
+
"width": 2,
|
|
46
|
+
"line-color": "#D58714",
|
|
47
|
+
"target-arrow-color": "#D58714",
|
|
48
|
+
"target-arrow-shape": "circle",
|
|
49
|
+
"curve-style": "taxi",
|
|
50
|
+
"taxi-direction": "auto",
|
|
51
|
+
"taxi-turn": 50,
|
|
52
|
+
"taxi-turn-min-distance": 5
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
];
|
|
56
|
+
for (let depth = 0; depth < 16; depth++) {
|
|
57
|
+
styles.push({
|
|
58
|
+
selector: `node.depth${depth}`,
|
|
59
|
+
style: {
|
|
60
|
+
'background-color': styling_1.ColorPalette.byInd(depth)
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return styles;
|
|
65
|
+
}
|
|
66
|
+
static elements(diagram) {
|
|
67
|
+
const nodes = this.generateNodes(diagram.root);
|
|
68
|
+
const edges = this.addEdges(diagram.root);
|
|
69
|
+
return [...nodes, ...edges];
|
|
70
|
+
}
|
|
71
|
+
static generateNodes(node, parentId = undefined) {
|
|
72
|
+
const data = {
|
|
73
|
+
id: node.id
|
|
74
|
+
};
|
|
75
|
+
if (parentId)
|
|
76
|
+
data.parent = parentId;
|
|
77
|
+
const style = {
|
|
78
|
+
'shape': 'rectangle',
|
|
79
|
+
'label': node.label
|
|
80
|
+
};
|
|
81
|
+
if (node.subComponents().length > 0) {
|
|
82
|
+
const nodeElement = {
|
|
83
|
+
data, style, classes: 'depth' + node.depth()
|
|
84
|
+
};
|
|
85
|
+
const subComponentsNodeElements = _.flatten(node.subComponents().map(sub => this.generateNodes(sub, node.id)));
|
|
86
|
+
return [nodeElement, ...subComponentsNodeElements];
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
style.width = '100px';
|
|
90
|
+
style.height = '100px';
|
|
91
|
+
if (node.icon != null && node.icon.path != null) {
|
|
92
|
+
let cleanedIconPath = node.icon.path;
|
|
93
|
+
const iconsCleaningRe = /\/icons\/(.*)/;
|
|
94
|
+
const matches = node.icon.path.match(iconsCleaningRe);
|
|
95
|
+
if (matches) {
|
|
96
|
+
cleanedIconPath = `icons/${matches[1]}`;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
cleanedIconPath = `../${cleanedIconPath}`;
|
|
100
|
+
}
|
|
101
|
+
style['background-fit'] = 'cover';
|
|
102
|
+
style['background-image'] = cleanedIconPath;
|
|
103
|
+
}
|
|
104
|
+
const nodeElement = {
|
|
105
|
+
data, style, classes: 'depth' + node.depth()
|
|
106
|
+
};
|
|
107
|
+
return [nodeElement];
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
static addEdges(node) {
|
|
111
|
+
const linkedComponentEdges = node.links.getLinkedComponents().map(edgeNode => {
|
|
112
|
+
return {
|
|
113
|
+
data: {
|
|
114
|
+
source: node.id,
|
|
115
|
+
target: edgeNode.id
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
});
|
|
119
|
+
const subComponentEdges = node.subComponents().map(sub => {
|
|
120
|
+
return this.addEdges(sub);
|
|
121
|
+
});
|
|
122
|
+
return [...linkedComponentEdges, ..._.flatten(subComponentEdges)];
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
exports.CytoscapeGenerator = CytoscapeGenerator;
|
|
126
|
+
//# sourceMappingURL=cytoscape-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cytoscape-generator.js","sourceRoot":"","sources":["../../../../src/render/cytoscape/cytoscape-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as diagram from "../../diagram";
|
|
2
|
+
import { DiagramRenderer, RenderingOutput } from "../diagram-renderer";
|
|
3
|
+
export declare class CytoscapeJsOutput implements RenderingOutput {
|
|
4
|
+
private staticFolderName;
|
|
5
|
+
private staticSiteFullPath;
|
|
6
|
+
constructor(staticFolderName: string, staticSiteFullPath: string);
|
|
7
|
+
userOutput(): void;
|
|
8
|
+
}
|
|
9
|
+
interface CytoscapeProps {
|
|
10
|
+
diagram: diagram.Diagram;
|
|
11
|
+
path: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class Cytoscape implements DiagramRenderer {
|
|
14
|
+
render(props: CytoscapeProps): Promise<CytoscapeJsOutput>;
|
|
15
|
+
private renderToCytoscape;
|
|
16
|
+
private copyFolder;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.Cytoscape = exports.CytoscapeJsOutput = void 0;
|
|
26
|
+
const fs = __importStar(require("fs"));
|
|
27
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
28
|
+
const path_1 = __importStar(require("path"));
|
|
29
|
+
const cytoscape_generator_1 = require("./cytoscape-generator");
|
|
30
|
+
const ncp = require('ncp').ncp;
|
|
31
|
+
ncp.limit = 8;
|
|
32
|
+
class CytoscapeJsOutput {
|
|
33
|
+
constructor(staticFolderName, staticSiteFullPath) {
|
|
34
|
+
this.staticFolderName = staticFolderName;
|
|
35
|
+
this.staticSiteFullPath = staticSiteFullPath;
|
|
36
|
+
}
|
|
37
|
+
userOutput() {
|
|
38
|
+
console.log(chalk_1.default.green(`generated a static website with your diagram at ${this.staticSiteFullPath}' }`));
|
|
39
|
+
console.log(chalk_1.default.green(`run 'npx http-server ${this.staticFolderName} -o' to view your interactive diagram`));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.CytoscapeJsOutput = CytoscapeJsOutput;
|
|
43
|
+
class Cytoscape {
|
|
44
|
+
async render(props) {
|
|
45
|
+
const basePath = props.path.replace(/\.[^/.]+$/, "");
|
|
46
|
+
let iconsPath;
|
|
47
|
+
if (__dirname.includes("dist")) {
|
|
48
|
+
iconsPath = (0, path_1.dirname)((0, path_1.dirname)((0, path_1.dirname)((0, path_1.dirname)(__dirname))));
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
iconsPath = (0, path_1.dirname)((0, path_1.dirname)((0, path_1.dirname)(__dirname)));
|
|
52
|
+
}
|
|
53
|
+
await this.renderToCytoscape(props.diagram, basePath, iconsPath);
|
|
54
|
+
return new CytoscapeJsOutput(path_1.default.basename(basePath), path_1.default.resolve(basePath));
|
|
55
|
+
}
|
|
56
|
+
async renderToCytoscape(dia, targetFolder, iconsPath) {
|
|
57
|
+
await this.copyFolder(__dirname + '/base', targetFolder);
|
|
58
|
+
await this.copyFolder(iconsPath + '/icons', targetFolder + '/icons');
|
|
59
|
+
const [cyElements, cyStyles] = cytoscape_generator_1.CytoscapeGenerator.generate(dia);
|
|
60
|
+
fs.writeFileSync(`${targetFolder}/cy-elements.json`, JSON.stringify(cyElements));
|
|
61
|
+
fs.writeFileSync(`${targetFolder}/cy-styles.json`, JSON.stringify(cyStyles));
|
|
62
|
+
}
|
|
63
|
+
copyFolder(src, dst) {
|
|
64
|
+
return new Promise((resolve, reject) => {
|
|
65
|
+
ncp(src, dst, function (err) {
|
|
66
|
+
if (err) {
|
|
67
|
+
reject(err);
|
|
68
|
+
}
|
|
69
|
+
resolve(undefined);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.Cytoscape = Cytoscape;
|
|
75
|
+
//# sourceMappingURL=cytoscape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cytoscape.js","sourceRoot":"","sources":["../../../../src/render/cytoscape/cytoscape.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAwB;AACxB,kDAAyB;AACzB,6CAAkC;AAGlC,+DAAwD;AAExD,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAA;AAC9B,GAAG,CAAC,KAAK,GAAG,CAAC,CAAA;AAEb,MAAa,iBAAiB;IAC1B,YAAoB,gBAAwB,EAAU,kBAA0B;QAA5D,qBAAgB,GAAhB,gBAAgB,CAAQ;QAAU,uBAAkB,GAAlB,kBAAkB,CAAQ;IAAG,CAAC;IAEpF,UAAU;QACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,mDAAmD,IAAI,CAAC,kBAAkB,KAAK,CAAC,CAAC,CAAA;QACzG,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC,gBAAgB,uCAAuC,CAAC,CAAC,CAAA;IACtH,CAAC;CACJ;AAPD,8CAOC;AAOD,MAAa,SAAS;IAElB,KAAK,CAAC,MAAM,CAAC,KAAqB;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QAEpD,IAAI,SAAiB,CAAA;QACrB,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAC;YAC3B,SAAS,GAAG,IAAA,cAAO,EAAC,IAAA,cAAO,EAAC,IAAA,cAAO,EAAC,IAAA,cAAO,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;SAC5D;aAAM;YACH,SAAS,GAAG,IAAA,cAAO,EAAC,IAAA,cAAO,EAAC,IAAA,cAAO,EAAC,SAAS,CAAC,CAAC,CAAC,CAAA;SACnD;QAED,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;QAChE,OAAO,IAAI,iBAAiB,CAAC,cAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;IAClF,CAAC;IAKO,KAAK,CAAC,iBAAiB,CAAC,GAAoB,EAAE,YAAoB,EAAE,SAAiB;QAGzF,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,OAAO,EAAE,YAAY,CAAC,CAAA;QAExD,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,QAAQ,EAAG,YAAY,GAAE,QAAQ,CAAC,CAAA;QAGpE,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,wCAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC/D,EAAE,CAAC,aAAa,CAAC,GAAG,YAAY,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAA;QAChF,EAAE,CAAC,aAAa,CAAC,GAAG,YAAY,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;IAChF,CAAC;IAEO,UAAU,CAAC,GAAW,EAAE,GAAW;QACvC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,GAAG;gBACnB,IAAI,GAAG,EAAE;oBACL,MAAM,CAAC,GAAG,CAAC,CAAA;iBACd;gBACD,OAAO,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC,CACJ,CAAA;QACL,CAAC,CAAC,CAAA;IACN,CAAC;CACJ;AA3CD,8BA2CC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./cytoscape";
|
|
@@ -10,6 +10,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
10
10
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
__exportStar(require("./
|
|
14
|
-
__exportStar(require("./rendering-error"), exports);
|
|
13
|
+
__exportStar(require("./cytoscape"), exports);
|
|
15
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/render/cytoscape/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAA2B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
const fs = __importStar(require("fs"));
|
|
23
|
+
const testCases_1 = require("../../../test-fixtures/testCases");
|
|
24
|
+
const generator_test_1 = require("../../../diagram/tests/generator.test");
|
|
25
|
+
const cytoscape_1 = require("../cytoscape");
|
|
26
|
+
const basePath = `${process.cwd()}/test-generated`;
|
|
27
|
+
describe('Cytoscape static website generated as expected', () => {
|
|
28
|
+
it.each(testCases_1.testCases)(`%# - %p`, async (testCase) => {
|
|
29
|
+
const diagram = (0, generator_test_1.givenDiagram)(testCase);
|
|
30
|
+
const filePath = `${basePath}/${testCase.jsonTreeFile}-${testCase.id}`;
|
|
31
|
+
await new cytoscape_1.Cytoscape().render({
|
|
32
|
+
diagram: diagram,
|
|
33
|
+
path: filePath
|
|
34
|
+
});
|
|
35
|
+
const index = new File(`${filePath}/index.html`);
|
|
36
|
+
expect(index.stats.size).toBeGreaterThanOrEqual(300);
|
|
37
|
+
expect(index.body).toContain("CDK-Dia");
|
|
38
|
+
const icons = new File(`${filePath}/icons`);
|
|
39
|
+
expect(icons.stats.isDirectory()).toBeTruthy();
|
|
40
|
+
const js = new File(`${filePath}/js`);
|
|
41
|
+
expect(js.stats.isDirectory()).toBeTruthy();
|
|
42
|
+
const elementsJson = new File(`${filePath}/cy-elements.json`);
|
|
43
|
+
expect(JSON.parse(elementsJson.body).length).toBeGreaterThanOrEqual(2);
|
|
44
|
+
const stylesJson = new File(`${filePath}/cy-styles.json`);
|
|
45
|
+
expect(JSON.parse(stylesJson.body).length).toBeGreaterThanOrEqual(15);
|
|
46
|
+
}, 100000);
|
|
47
|
+
});
|
|
48
|
+
class File {
|
|
49
|
+
constructor(path) {
|
|
50
|
+
this.stats = fs.statSync(path);
|
|
51
|
+
if (!this.stats.isDirectory()) {
|
|
52
|
+
this.body = fs.readFileSync(path).toString();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=generator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.test.js","sourceRoot":"","sources":["../../../../../src/render/cytoscape/tests/generator.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,uCAAwB;AACxB,gEAA0D;AAC1D,0EAAkE;AAClE,4CAAsC;AAGtC,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAA;AAElD,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAE5D,EAAE,CAAC,IAAI,CAAC,qBAAS,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QAE7C,MAAM,OAAO,GAAG,IAAA,6BAAY,EAAC,QAAQ,CAAC,CAAA;QAEtC,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAA;QAEtE,MAAM,IAAI,qBAAS,EAAE,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,QAAQ;SACjB,CAAC,CAAA;QAEF,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,QAAQ,aAAa,CAAC,CAAA;QAChD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAA;QACpD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QAEvC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,QAAQ,QAAQ,CAAC,CAAA;QAC3C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,UAAU,EAAE,CAAA;QAE9C,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,QAAQ,KAAK,CAAC,CAAA;QACrC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,UAAU,EAAE,CAAA;QAE3C,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,GAAG,QAAQ,mBAAmB,CAAC,CAAA;QAC7D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;QAEtE,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,GAAG,QAAQ,iBAAiB,CAAC,CAAA;QACzD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAA;IACzE,CAAC,EAAE,MAAM,CAAC,CAAA;AACd,CAAC,CAAC,CAAA;AAEF,MAAM,IAAI;IAIN,YAAY,IAAY;QACpB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAE9B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE;YAC3B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAA;SAC/C;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as diagram from "../diagram/index";
|
|
2
|
+
export interface DiagramRenderer {
|
|
3
|
+
render(props: RenderingProps): Promise<RenderingOutput>;
|
|
4
|
+
}
|
|
5
|
+
export declare abstract class RenderingProps {
|
|
6
|
+
diagram: diagram.Diagram;
|
|
7
|
+
}
|
|
8
|
+
export interface RenderingOutput {
|
|
9
|
+
userOutput(): any;
|
|
10
|
+
}
|
|
11
|
+
export declare class RenderingError extends Error {
|
|
12
|
+
readonly debugInfo: string[];
|
|
13
|
+
readonly fixTips: string[];
|
|
14
|
+
constructor(message: string, debugInfo?: string[], fixTips?: string[]);
|
|
15
|
+
}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RenderingError = void 0;
|
|
3
|
+
exports.RenderingError = exports.RenderingProps = void 0;
|
|
4
|
+
class RenderingProps {
|
|
5
|
+
}
|
|
6
|
+
exports.RenderingProps = RenderingProps;
|
|
4
7
|
class RenderingError extends Error {
|
|
5
8
|
constructor(message, debugInfo = [], fixTips = []) {
|
|
6
9
|
super(message);
|
|
@@ -11,4 +14,4 @@ class RenderingError extends Error {
|
|
|
11
14
|
}
|
|
12
15
|
}
|
|
13
16
|
exports.RenderingError = RenderingError;
|
|
14
|
-
//# sourceMappingURL=
|
|
17
|
+
//# sourceMappingURL=diagram-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagram-renderer.js","sourceRoot":"","sources":["../../../src/render/diagram-renderer.ts"],"names":[],"mappings":";;;AAMA,MAAsB,cAAc;CAEnC;AAFD,wCAEC;AAKD,MAAa,cAAe,SAAQ,KAAK;IAKrC,YAAY,OAAe,EAAE,YAAsB,EAAE,EAAE,UAAoB,EAAE;QACzE,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;QAEhC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IAC1B,CAAC;CACJ;AAdD,wCAcC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Digraph } from "ts-graphviz";
|
|
2
|
+
import * as diagram from "../../diagram";
|
|
3
|
+
export declare class GraphvizGenerator {
|
|
4
|
+
generate(dia: diagram.Diagram): Digraph;
|
|
5
|
+
private breakLineEveryMaxChars;
|
|
6
|
+
private wordsToLabel;
|
|
7
|
+
private diagramGraph;
|
|
8
|
+
private addToGraph;
|
|
9
|
+
private addEdges;
|
|
10
|
+
private findFirstArbitraryClusterDirectLeaf;
|
|
11
|
+
}
|
|
@@ -22,51 +22,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
22
22
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
23
|
};
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.
|
|
26
|
-
const fs = __importStar(require("fs"));
|
|
27
|
-
const util = __importStar(require("util"));
|
|
28
|
-
const _ = __importStar(require("lodash"));
|
|
29
|
-
const hasbin = __importStar(require("hasbin"));
|
|
30
|
-
const word_wrap_1 = __importDefault(require("word-wrap"));
|
|
31
|
-
const child_process_1 = __importDefault(require("child_process"));
|
|
25
|
+
exports.GraphvizGenerator = void 0;
|
|
32
26
|
const ts_graphviz_1 = require("ts-graphviz");
|
|
33
27
|
const styling = __importStar(require("./styling"));
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
class
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
styling.applyBaseGraphStyling(
|
|
40
|
-
this.diagramGraph(dia);
|
|
41
|
-
|
|
42
|
-
async generatePng(path) {
|
|
43
|
-
const dotFileName = this.generateDot(path);
|
|
44
|
-
try {
|
|
45
|
-
await this.dotToPng(dotFileName, path);
|
|
46
|
-
}
|
|
47
|
-
catch (e) {
|
|
48
|
-
if (!hasbin.sync(Generator.graphvizBinary)) {
|
|
49
|
-
throw new rendering_error_1.RenderingError("Graphvig '" + Generator.graphvizBinary + "' binary does not exist locally or in PATH", [], [
|
|
50
|
-
"Install Graphviz and make sure it is available in PATH",
|
|
51
|
-
"Using brew: 'brew install graphviz'"
|
|
52
|
-
]);
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
if (e instanceof rendering_error_1.RenderingError) {
|
|
56
|
-
throw e;
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
throw new rendering_error_1.RenderingError(e.message);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return path;
|
|
64
|
-
}
|
|
65
|
-
generateDot(path) {
|
|
66
|
-
const data = ts_graphviz_1.toDot(this.rootGraph);
|
|
67
|
-
const fullPath = `${path}.dot`;
|
|
68
|
-
fs.writeFileSync(fullPath, data);
|
|
69
|
-
return fullPath;
|
|
28
|
+
const _ = __importStar(require("lodash"));
|
|
29
|
+
const word_wrap_1 = __importDefault(require("word-wrap"));
|
|
30
|
+
class GraphvizGenerator {
|
|
31
|
+
generate(dia) {
|
|
32
|
+
const rootGraph = (0, ts_graphviz_1.digraph)('Diagram');
|
|
33
|
+
styling.applyBaseGraphStyling(rootGraph);
|
|
34
|
+
this.diagramGraph(rootGraph, dia);
|
|
35
|
+
return rootGraph;
|
|
70
36
|
}
|
|
71
37
|
breakLineEveryMaxChars(label, charsPerLine) {
|
|
72
38
|
let fullWords;
|
|
@@ -109,7 +75,7 @@ class Generator {
|
|
|
109
75
|
words.push(word);
|
|
110
76
|
}
|
|
111
77
|
else {
|
|
112
|
-
const wrapped = word_wrap_1.default(word, {
|
|
78
|
+
const wrapped = (0, word_wrap_1.default)(word, {
|
|
113
79
|
cut: true,
|
|
114
80
|
width: charsPerLine
|
|
115
81
|
}).trim();
|
|
@@ -118,10 +84,10 @@ class Generator {
|
|
|
118
84
|
});
|
|
119
85
|
return words;
|
|
120
86
|
}
|
|
121
|
-
diagramGraph(
|
|
122
|
-
const root =
|
|
123
|
-
this.addToGraph(root,
|
|
124
|
-
this.addEdges(
|
|
87
|
+
diagramGraph(rootGraph, diagram1) {
|
|
88
|
+
const root = rootGraph.createSubgraph(diagram1.root.id);
|
|
89
|
+
this.addToGraph(root, diagram1.root);
|
|
90
|
+
this.addEdges(rootGraph, diagram1.root);
|
|
125
91
|
}
|
|
126
92
|
addToGraph(g, node) {
|
|
127
93
|
const labelFontSize = 12;
|
|
@@ -168,25 +134,6 @@ class Generator {
|
|
|
168
134
|
findFirstArbitraryClusterDirectLeaf(node) {
|
|
169
135
|
return node.subComponents().find(sub => { return sub.subComponents().length == 0; });
|
|
170
136
|
}
|
|
171
|
-
async dotToPng(sourceDotFile, targetPngFile) {
|
|
172
|
-
const cmd = `${Generator.graphvizBinary} ${sourceDotFile} -T png > ${targetPngFile}`;
|
|
173
|
-
try {
|
|
174
|
-
const { stdout, stderr } = await exec(cmd);
|
|
175
|
-
const fileExists = fs.existsSync(targetPngFile);
|
|
176
|
-
if (!fileExists) {
|
|
177
|
-
throw new rendering_error_1.RenderingError("Failed to generate PNG: file does not exist.");
|
|
178
|
-
}
|
|
179
|
-
const stats = fs.lstatSync(targetPngFile);
|
|
180
|
-
if (stats.size < 2) {
|
|
181
|
-
throw new rendering_error_1.RenderingError("Generated PNG doesn't seem valid: file size is too small.", [stdout, stderr], [". make sure Graphviz is installed and available in the PATH"]);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
catch (e) {
|
|
185
|
-
throw new rendering_error_1.RenderingError(e.message);
|
|
186
|
-
}
|
|
187
|
-
return true;
|
|
188
|
-
}
|
|
189
137
|
}
|
|
190
|
-
exports.
|
|
191
|
-
|
|
192
|
-
//# sourceMappingURL=generator.js.map
|
|
138
|
+
exports.GraphvizGenerator = GraphvizGenerator;
|
|
139
|
+
//# sourceMappingURL=GraphvizGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphvizGenerator.js","sourceRoot":"","sources":["../../../../src/render/graphviz/GraphvizGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as diagram from "../../diagram";
|
|
2
|
+
import { DiagramRenderer, RenderingOutput, RenderingProps } from "../diagram-renderer";
|
|
3
|
+
export declare class GraphvizRenderingProps extends RenderingProps {
|
|
4
|
+
diagram: diagram.Diagram;
|
|
5
|
+
path: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class GraphvizRenderingOutput implements RenderingOutput {
|
|
8
|
+
private imagePath;
|
|
9
|
+
private imageType;
|
|
10
|
+
constructor(imagePath: string, imageType: string);
|
|
11
|
+
userOutput(): void;
|
|
12
|
+
}
|
|
13
|
+
export declare class Graphviz implements DiagramRenderer {
|
|
14
|
+
render(props: GraphvizRenderingProps): Promise<GraphvizRenderingOutput>;
|
|
15
|
+
renderToDot(dia: diagram.Diagram, targetDotPath: string): void;
|
|
16
|
+
private static generatePng;
|
|
17
|
+
private static sanitizeAndResolvePath;
|
|
18
|
+
private static dotToPng;
|
|
19
|
+
private static GRAPHVIZ_BINARY;
|
|
20
|
+
}
|