/
index.ts
71 lines (64 loc) · 2.39 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import * as getStream from "get-stream";
import { get as _get } from "lodash";
import { ITranslateOptions, translateMsc } from "mscgenjs";
import { INormalizedOptions, OutputType } from "../types";
import { getInStream, getOutStream } from "./fileNameToStream";
import { renderWithChromeHeadless } from "./render";
function isGraphicsOutput(pOutputType: OutputType) {
const GRAPHICSFORMATS = ["svg", "png", "jpeg"];
return GRAPHICSFORMATS.includes(pOutputType);
}
function getAST(pInput: string, pOptions: INormalizedOptions): string {
return translateMsc(pInput, {
inputType: pOptions.inputType,
outputType: "ast",
});
}
export function removeAutoWidth(pAST: any, pOutputType: OutputType) {
if (
(pOutputType === "png" || pOutputType === "jpeg") &&
_get(pAST, "options.width", "not-auto") === "auto"
) {
delete pAST.options.width;
}
return pAST;
}
function render(pOptions: INormalizedOptions): Promise<any> {
return getStream(getInStream(pOptions.inputFrom))
.then((pInput) => getAST(pInput, pOptions))
.then((pAST) =>
renderWithChromeHeadless(
removeAutoWidth(pAST, pOptions.outputType),
pOptions
)
);
}
function transpile(pOptions: INormalizedOptions): Promise<string> {
return getStream(getInStream(pOptions.inputFrom)).then((pInput) =>
translateMsc(pInput, pOptions as ITranslateOptions)
);
}
export function transform(pOptions: INormalizedOptions): Promise<boolean> {
if (isGraphicsOutput(pOptions.outputType)) {
return render(pOptions).then((pResult) =>
getOutStream(pOptions.outputTo).write(pResult)
);
} else {
return transpile(pOptions).then((pResult) =>
getOutStream(pOptions.outputTo).write(pResult, "utf8")
);
}
}
/*
This file is part of mscgenjs-cli.
mscgenjs-cli is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
mscgen_js is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with mscgenjs-cli. If not, see <http://www.gnu.org/licenses/>.
*/