har-validator 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #!/usr/bin/env node
  2. 'use strict'
  3. var chalk = require('chalk')
  4. var cmd = require('commander')
  5. var fs = require('fs')
  6. var path = require('path')
  7. var pkg = require('../package.json')
  8. var Promise = require('pinkie-promise')
  9. var validate = require('..')
  10. var ValidationError = require('../lib/error')
  11. cmd
  12. .version(pkg.version)
  13. .usage('[options] <files ...>')
  14. .option('-s, --schema [name]', 'validate schema name (log, request, response, etc ...)')
  15. .parse(process.argv)
  16. if (!cmd.args.length) {
  17. cmd.help()
  18. }
  19. cmd.args.map(function (fileName) {
  20. var file = chalk.yellow.italic(path.basename(fileName))
  21. new Promise(function (resolve, reject) {
  22. fs.readFile(fileName, function (err, data) {
  23. return err === null ? resolve(data) : reject(err)
  24. })
  25. })
  26. .then(JSON.parse)
  27. .then(cmd.schema ? validate[cmd.schema] : validate)
  28. .then(function (data) {
  29. console.log('%s [%s] is valid', chalk.green('✓'), file)
  30. })
  31. .catch(function (err) {
  32. if (err instanceof SyntaxError) {
  33. return console.error('%s [%s] failed to read JSON: %s', chalk.red('✖'), file, chalk.red(err.message))
  34. }
  35. if (err instanceof ValidationError) {
  36. err.errors.forEach(function (details) {
  37. console.error('%s [%s] failed validation: (%s: %s) %s', chalk.red('✖'), file, chalk.cyan.italic(details.field), chalk.magenta.italic(details.value), chalk.red(details.message))
  38. })
  39. return
  40. }
  41. console.error('%s [%s] an unknown error has occured: %s', chalk.red('✖'), file, chalk.red(err.message))
  42. })
  43. })