UNPKG

7.46 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var fs_1 = require("fs");
4var node_plantuml_1 = require("node-plantuml");
5var _1 = require(".");
6var util_1 = require("./util");
7function isValidDiagramConfiguration(toBeValidated) {
8 if (typeof toBeValidated !== 'object' || toBeValidated === null) {
9 return false;
10 }
11 var diagramConfiguration = toBeValidated;
12 return (['boolean', 'undefined'].includes(typeof diagramConfiguration.hidePlaintext) &&
13 (typeof diagramConfiguration.hiddenFields === 'undefined' ||
14 util_1.isArrayOfStrings(diagramConfiguration.hiddenFields)));
15}
16exports.isValidDiagramConfiguration = isValidDiagramConfiguration;
17function getInputFile(scenario) {
18 return _1.OUTPUT_DIR() + "/_" + scenario + ".input";
19}
20function getOutputFile(scenario) {
21 return _1.OUTPUT_DIR() + "/_" + scenario + ".png";
22}
23var hidingText = '***';
24function hideFields(payload, hiddenFields) {
25 return util_1.objectFromEntries(Object.entries(payload).map(function (_a) {
26 var key = _a[0], value = _a[1];
27 return hiddenFields.includes(key) ? [key, hidingText] : [key, value];
28 }));
29}
30function hideFieldsIfNeeded(payload, hiddenFields) {
31 return typeof payload === 'object' &&
32 payload !== null &&
33 hiddenFields !== undefined &&
34 hiddenFields.length !== 0
35 ? hideFields(payload, hiddenFields)
36 : payload;
37}
38function hidePlaintextIfNeeded(payload, hidePlaintext) {
39 if (hidePlaintext === void 0) { hidePlaintext = false; }
40 return hidePlaintext ? hidingText : payload;
41}
42function formatBinaryPayload(payload) {
43 return "binary data (" + payload.length + " bytes)";
44}
45function formatPlaintextPayload(payload, diagramConfiguration) {
46 return util_1.trim(hidePlaintextIfNeeded(payload, diagramConfiguration.hidePlaintext), 30);
47}
48function formatObjectPayload(payload, diagramConfiguration) {
49 return JSON.stringify(hideFieldsIfNeeded(payload, diagramConfiguration.hiddenFields), null, 1);
50}
51function formatPayload(payload, diagramConfiguration) {
52 if (Buffer.isBuffer(payload)) {
53 return formatBinaryPayload(payload);
54 }
55 if (typeof payload === 'string') {
56 return formatPlaintextPayload(payload, diagramConfiguration);
57 }
58 return formatObjectPayload(payload, diagramConfiguration);
59}
60exports.formatPayload = formatPayload;
61function currentTimestamp() {
62 return new Date().toISOString();
63}
64function quote(str) {
65 return "\"" + str + "\"";
66}
67exports.initDiagramCreation = function (scenarioId) {
68 fs_1.writeFileSync(getInputFile(scenarioId), '');
69 var initValues = [
70 '@startuml',
71 'autonumber',
72 'skinparam handwritten false',
73 'control MQTT',
74 'control AMQP',
75 'actor ALT #red\n',
76 ];
77 fs_1.appendFileSync(getInputFile(scenarioId), initValues.join('\n'));
78};
79exports.addRequest = function (scenarioId, target, url, data, diagramConfiguration) {
80 var quotedTarget = quote(target);
81 var request = "ALT -> " + quotedTarget + ": " + url + "\nactivate " + quotedTarget + "\n" + (data
82 ? "note right\n**" + currentTimestamp() + "**\n" + formatPayload(data, diagramConfiguration) + "\nend note\n"
83 : '');
84 fs_1.appendFileSync(getInputFile(scenarioId), request);
85};
86exports.addSuccessfulResponse = function (scenarioId, source, status, body, diagramConfiguration) {
87 doAddResponse(scenarioId, source, status, 'green');
88 if (body) {
89 var note = "note left\n**" + currentTimestamp() + "**\n" + formatPayload(body, diagramConfiguration) + "\nend note\n";
90 fs_1.appendFileSync(getInputFile(scenarioId), note);
91 }
92};
93exports.addFailedResponse = function (scenarioId, source, status, body, diagramConfiguration) {
94 doAddResponse(scenarioId, source, status, 'red');
95 fs_1.appendFileSync(getInputFile(scenarioId), "note right: <color red>" + formatPayload(body, diagramConfiguration) + "</color>\n||20||\n");
96};
97var doAddResponse = function (scenarioId, source, status, color) {
98 var quotedSource = quote(source);
99 fs_1.appendFileSync(getInputFile(scenarioId), quotedSource + " --> ALT: <color " + color + ">" + status + "</color>\ndeactivate " + quotedSource + "\n");
100};
101exports.addDelay = function (scenarioId, durationInSec) {
102 fs_1.appendFileSync(getInputFile(scenarioId), "\n...sleep " + durationInSec + " s...\n");
103};
104exports.addWsMessage = function (scenarioId, source, payload, diagramConfiguration) {
105 var quotedSource = quote(source);
106 fs_1.appendFileSync(getInputFile(scenarioId), quotedSource + " -[#0000FF]->o ALT : [WS]\n");
107 var note = "note left #aqua\n**" + currentTimestamp() + "**\n" + formatPayload(payload, diagramConfiguration) + "\nend note\n";
108 fs_1.appendFileSync(getInputFile(scenarioId), note);
109};
110exports.addMqttMessage = function (scenarioId, topic, payload, diagramConfiguration) {
111 fs_1.appendFileSync(getInputFile(scenarioId), "MQTT -[#green]->o ALT : " + topic + "\n");
112 var note = "note right #99FF99\n**" + currentTimestamp() + "**\n" + formatPayload(payload, diagramConfiguration) + "\nend note\n";
113 fs_1.appendFileSync(getInputFile(scenarioId), note);
114};
115exports.addMqttPublishMessage = function (scenarioId, topic, payload, diagramConfiguration) {
116 fs_1.appendFileSync(getInputFile(scenarioId), "ALT -[#green]->o MQTT : " + topic + "\n");
117 var note = "note left #99FF99\n**" + currentTimestamp() + "**\n" + formatPayload(JSON.parse(payload), diagramConfiguration) + "\nend note\n";
118 fs_1.appendFileSync(getInputFile(scenarioId), note);
119};
120exports.addAMQPReceivedMessage = function (scenarioId, source, exchange, routingKey, payload, diagramConfiguration) {
121 var quotedSource = quote(source);
122 fs_1.appendFileSync(getInputFile(scenarioId), quotedSource + " -[#FF6600]->o ALT : " + exchange + "/" + routingKey + "\n");
123 var note = "note left #FF6600\n**" + currentTimestamp() + "**\n" + formatPayload(payload, diagramConfiguration) + "\nend note\n";
124 fs_1.appendFileSync(getInputFile(scenarioId), note);
125};
126exports.addMissingAMQPMessage = function (scenarioId, exchange, routingKey, expectedMessages, receivedMessages, errorMsg) {
127 exports.addMissingAsyncMessage(scenarioId, exchange + "/" + routingKey, 'AMQP', expectedMessages, receivedMessages, errorMsg);
128};
129exports.addMissingMQTTMessage = function (scenarioId, topic, expectedMessages, receivedMessages, errorMsg) {
130 exports.addMissingAsyncMessage(scenarioId, topic, 'MQTT', expectedMessages, receivedMessages, errorMsg);
131};
132exports.addMissingAsyncMessage = function (scenarioId, asyncInfo, source, expectedMessages, receivedMessages, errorMsg) {
133 var quotedSource = quote(source);
134 fs_1.appendFileSync(getInputFile(scenarioId), quotedSource + " -[#red]->x ALT : " + asyncInfo + "\n\n ");
135 var note = "note right #FF0000\n**" + currentTimestamp() + "**\n\n\n" + errorMsg + "\n\n\nExpected Messages:" + expectedMessages + "\nReceived Messages: " + receivedMessages + "\nend note\n";
136 fs_1.appendFileSync(getInputFile(scenarioId), note);
137};
138exports.generateSequenceDiagram = function (scenarioId) {
139 return new Promise(function (resolve) {
140 fs_1.appendFileSync(getInputFile(scenarioId), '\n@enduml');
141 var gen = node_plantuml_1.generate(getInputFile(scenarioId));
142 gen.out.pipe(fs_1.createWriteStream(getOutputFile(scenarioId)));
143 gen.out.on('end', function () { return resolve(); });
144 });
145};