/
render.ts
62 lines (53 loc) · 1.66 KB
/
render.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
import {
logError,
renderPartRevision,
VertexError,
} from '@vertexvis/api-client-node';
import { cli } from 'cli-ux';
import { createWriteStream } from 'fs-extra';
import BaseRenderCommand from '../../lib/base-render';
import { vertexClient } from '../../lib/client';
import { createFile, validate, validateImage } from '../../lib/renderer';
export default class Render extends BaseRenderCommand {
public static description = `Render a part revision.`;
public static examples = [
`$ vertex part-revisions:render 54964c61-05d8-4f37-9638-18f7c4960c80
54964c61-05d8-4f37-9638-18f7c4960c80.jpg
`,
];
public static args = [{ name: 'id', required: true }];
public static flags = BaseRenderCommand.flags;
public async run(): Promise<void> {
const {
args: { id },
flags: { height, output, verbose, width },
} = this.parse(Render);
validate({ height, onError: this.error, width });
try {
const resource = 'part-revision';
const renderRes = await renderPartRevision<NodeJS.ReadableStream>({
client: await vertexClient(this.parsedFlags?.basePath, this.userConfig),
onMsg: console.error,
renderReq: {
id,
height: height,
width: width,
},
verbose,
});
validateImage({
id,
length: renderRes.headers['content-length'],
onError: this.error,
resource,
});
const out = output || `${id}.jpg`;
renderRes.data.pipe(createWriteStream(out));
await createFile(renderRes.data, out);
await cli.open(out);
this.log(out);
} catch (error) {
logError(error as VertexError, this.error);
}
}
}