cap-modules
Version:
Expanded ASN.1 modules for CAMEL Application Part (CAP) (ETSI TS 129 078) in JSON format
96 lines (79 loc) • 2.22 kB
JavaScript
const fs = require('fs');
const parseArgs = require('minimist');
const asn1expCamelEx = require('./asn1expCamelEx');
let dataTypes = null;
const walk = (dir, ext, done) => {
fs.readdir(dir, (error, list) => {
if (error) {
return done(error);
}
let i = 0;
(function next() {
let file = list[i++];
if (!file) {
return done(null);
} else if (!file.endsWith(ext)) {
return next();
}
file = `${dir}/${file}`;
fs.stat(file, (error, stat) => {
if (stat && stat.isDirectory()) {
next();
} else {
const fileRead = Promise.resolve(fs.readFileSync(file, 'UTF-8'));
fileRead
.then((asnFile) => {
dataTypes += asnFile;
next();
});
}
});
}());
});
};
function parse(fileName) {
return new Promise((resolve, reject) => {
const fileRead = Promise.resolve(fs.readFileSync(fileName, 'UTF-8'));
fileRead
.then((camelAsn) => {
walk('exp/', 'asn', (error) => {
if (error) {
reject(error);
} else {
resolve(asn1expCamelEx.parse(camelAsn, camelAsn + dataTypes));
}
});
});
});
}
function parseErrorTypes() {
const fileName = 'error-exp/CAP-Errortypes.asn';
const fileRead = Promise.resolve(fs.readFileSync(fileName, 'UTF-8'));
const fileWrite = arg => Promise.resolve(fs.writeFileSync(`${fileName}.json`, arg));
fileRead
.then((camelAsn) => {
walk('error-exp/', 'asn', (error) => {
if (error) {
throw error;
} else {
const parsed = asn1exp.parse(camelAsn, camelAsn + dataTypes);
fileWrite(JSON.stringify(parsed.blocks, null, 2));
}
});
})
.catch((error) => {
console.error(error);
process.exit(1);
});
}
const argv = parseArgs(process.argv.slice(2), {
boolean: 'min'
});
parse(process.argv[2])
.then((parsed) => {
argv.min ? console.log(JSON.stringify(parsed.blocks)) : console.log(JSON.stringify(parsed.blocks, null, 2));
})
.catch((error) => {
console.error(error);
process.exit(1);
});