-
Notifications
You must be signed in to change notification settings - Fork 1
/
ksc.js
42 lines (39 loc) · 1.45 KB
/
ksc.js
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
const KaitaiStructCompiler = require('kaitai-struct-compiler');
const compiler = new KaitaiStructCompiler();
const yargs = require('yargs');
const argv = yargs
.usage('Usage: $0 [options] <file>...')
.demandCommand(1)
.option('d', {description: 'output directory (filenames will be auto-generated)'})
.alias('d', 'outdir')
.default('d', '')
.version(`kaitai-struct-compiler ${compiler.version}, build date: ${new Date(compiler.buildDate).toUTCString()}`)
.argv;
const fs = require('fs');
const path = require('path');
const YAML = require('yaml');
if (argv._.length > 0) {
argv._.forEach(fileName => {
console.log(`parsing ${fileName}...`);
fs.readFile(fileName, { encoding: 'UTF-8' }, (err, contents) => {
if (err) {
throw err;
}
const ksy = YAML.parse(contents);
compiler.compile('javascript', ksy, null, false).then(function(files) {
for (let fileName in files) {
const output = files[fileName];
fileName = path.join(argv.d, fileName);
fs.writeFile(fileName, output, (err) => {
if (err) {
throw err;
}
console.log(`... writing ${fileName}`);
});
}
}).catch(err => {
console.error(err);
});
});
});
}