UNPKG

@openscope/validator

Version:

A CLI used to validate an airport definition file used in the [openscope](http://openscope.co) ATC Simulator

102 lines (86 loc) 3.19 kB
const chalk = require('chalk'); const Notifier = require('./Notifier'); const AirportValidator = require('./validators/AirportValidator'); const AirspaceValidator = require('./validators/AirspaceValidator'); const AirwaysValidator = require('./validators/AirwaysValidator'); const FixesValidator = require('./validators/FixesValidator'); const MapsValidator = require('./validators/MapsValidator'); const RadioValidator = require('./validators/RadioValidator'); const RestrictedValidator = require('./validators/RestrictedValidator'); const RunwaysValidator = require('./validators/RunwaysValidator'); const SidsValidator = require('./validators/SidsValidator'); const StarsValidator = require('./validators/StarsValidator'); const SpawnPatternsValidator = require('./validators/SpawnPatternsValidator'); const WindValidator = require('./validators/WindValidator'); const MessageLevelEnum = require('./validators/types/message-type').MessageLevelEnum; /** * * * @param {boolean[]} isValid * @param {MessageListType} errorList */ function _renderResults(errorList) { const isValid = errorList.length === 0; console.log('\n'); if (isValid) { console.log(chalk.green('SUCCESS! Everything checks out!!\n\n')); return; } errorList.forEach((error) => { switch (error.level) { case MessageLevelEnum.meta.map.ERROR: console.log(chalk.red(error.message)); break; case MessageLevelEnum.meta.map.WARNING: console.log(chalk.yellow(error.message)); break; default: break; } }); } /** * single public method called after an `airport` * file is successfully loaded * * will instantiate each validator and pass the * appropriate data parts from the airport definition * * @public * @function validator * @param {object} airportJson * @param {CliOptionsType} options */ function validator(airportJson, options) { let errorList = []; const validatorList = [ new AirportValidator(airportJson), new AirspaceValidator(airportJson.airspace), new AirwaysValidator(airportJson.airways, airportJson.fixes), new FixesValidator(airportJson.fixes), new MapsValidator(airportJson.maps), new RadioValidator(airportJson.radio), new RestrictedValidator(airportJson.restricted), new RunwaysValidator(airportJson.runways), new SidsValidator(airportJson.sids, airportJson.fixes), new SpawnPatternsValidator(airportJson.spawnPatterns), new StarsValidator(airportJson.stars, airportJson.fixes), new WindValidator(airportJson.wind) ]; for (let i = 0; i < validatorList.length; i++) { const validator = validatorList[i]; Notifier.start(`- Validating: ${validator.name}`); validator.validate(); if (!validator.isValid) { errorList = [ ...errorList, ...validator.errors ]; Notifier.fail(); continue; } Notifier.succeed(); } _renderResults(errorList); } module.exports = validator;