-
Notifications
You must be signed in to change notification settings - Fork 0
/
unbreakscape.ts
75 lines (63 loc) · 1.89 KB
/
unbreakscape.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
72
73
74
75
import { BitmarkParserGenerator } from '@gmb/bitmark-parser-generator';
import { Args, Command, Flags } from '@oclif/core';
const bitmarkTool = new BitmarkParserGenerator();
/**
* Breakscape command
*/
// eslint-disable-next-line arca/no-default-export
export default class Unbreakscape extends Command {
static description = 'Unbreakscape text';
static examples = [
"<%= config.bin %> <%= command.id %> '[^.article] Hello World'",
'<%= config.bin %> <%= command.id %> input.txt -o output.txt',
];
static flags = {
// General
// File output
output: Flags.file({
helpGroup: 'File output',
char: 'o',
description: 'output file. If not specified, output will be to <stdout>',
helpValue: 'FILE',
}),
append: Flags.boolean({
helpGroup: 'File output',
char: 'a',
description: 'append to the output file (default is to overwrite)',
dependsOn: ['output'],
}),
};
static args = {
input: Args.string({
description: 'file to read, or text. If not specified, input will be from <stdin>',
required: false,
}),
};
public async run(): Promise<void> {
const { args, flags } = await this.parse(Unbreakscape);
const { input } = args;
const { output, append } = flags;
let dataIn: string;
if (input != undefined) {
dataIn = input;
} else {
// Read from stdin
dataIn = await this.readStream(process.stdin);
}
// Bitmark tool text conversion
const res = await bitmarkTool.unbreakscapeText(dataIn, {
outputFile: output,
fileOptions: {
append,
},
});
if (!output) {
console.log(res);
}
}
private async readStream(stream: NodeJS.ReadStream): Promise<string> {
const chunks: Uint8Array[] = [];
for await (const chunk of stream) chunks.push(chunk as Uint8Array);
return Buffer.concat(chunks).toString('utf8');
}
}