@condenast/flyway-schema-validator
Version:
A joi schema validator for flyways types
100 lines (85 loc) • 2.34 kB
JavaScript
#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const minimist = require('minimist');
const chalk = require('chalk');
const validator = require('./index');
const help = fs.readFileSync(path.join(__dirname, 'help.txt'), 'utf8');
const { log, error: logError } = console;
function parseArgs(args) {
const argv = minimist(args, {
boolean: ['APIResponse', 'a', 'api', 'fromFile', 'f', 'help', 'h'],
alias: {
APIResponse: ['api', 'a'],
fromFile: 'f',
help: 'h'
},
default: {
APIResponse: false,
fromFile: false,
help: false
}
});
if (!process.stdin.isTTY) return argv;
let pathToFile = '';
if (argv.fromFile) {
pathToFile = path.isAbsolute(argv._[0]) ? argv._[0] : path.join(process.cwd(), argv._[0]);
argv._[0] = fs.readFileSync(pathToFile);
}
// if argument is passed, parse "argv.object" to be the passed argument
// if no argument is passed, print help
if (argv._[0]) {
try {
argv.object = JSON.parse(argv._[0]);
} catch (parseError) {
logError(
chalk.red('Problem parsing content from source!'),
`(source: ${argv.fromFile ? `file: ${pathToFile}` : 'argument'})`
);
throw parseError;
}
} else {
argv.help = true;
}
return argv;
}
function validateObject(obj, APIResponse) {
validator(obj, APIResponse)
.then(() => {
log(chalk.green('Valid! :D'));
})
.catch(err => {
logError(chalk.red('invalid! :('));
logError(err.message);
logError(err.details);
});
}
function main() {
const argv = parseArgs(process.argv.slice(2));
if (argv.help) {
logError(help);
process.exit(0);
}
if (process.stdin.isTTY) {
validateObject(argv.object, argv.APIResponse);
} else {
argv.object = '';
process.stdin.setEncoding('utf8');
process.stdin.on('readable', () => {
const chunk = process.stdin.read();
if (chunk !== null) {
argv.object += chunk.toString();
}
});
process.stdin.on('end', () => {
try {
argv.object = JSON.parse(argv.object);
validateObject(argv.object, argv.APIResponse);
} catch (parseError) {
logError(chalk.red('Problem reading content from pipe!'));
logError(parseError);
}
});
}
}
main();