UNPKG

@condenast/flyway-schema-validator

Version:
100 lines (85 loc) 2.34 kB
#!/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();