JSFiddle - React, Tailwind, and code Playground
by Prathameshsb
JavaScript
'use strict';
const fs = require('fs');
process.stdin.resume();
process.stdin.setEncoding('utf-8');
let inputString = '';
process.stdin.on('data', function(inputStdin) {
inputString += inputStdin;
});
process.stdin.on('end', function() {
inputString;
main(inputString);
});
/* Implement the validate function below.
*
* Remember, there are three kinds of validation errors:
*
* {ok: false, message: `${name} is required`}
* {ok: false, message: `type ${type} expected for ${name}`}
* {ok: false, message: `unexpected property ${name}`}
*
* There four possible `types` a property can have:
* string, number, boolean, and array:employee
*/
function validate(employees, schema) {
// Complete this function!
function validateEmployee(employee, schema) {
for(const {name, required, type} of schema.employee) {
const value = employee[name];
const actualType = Array.isArray(value) ? 'array:employee' : typeof value;
if(required && value === undefined) {
return {ok: false, message: `${name} is required`};
}
if(value !== undefined && actualType !== type) {
return {ok: false, message: `type ${type} expected for ${name}`};
};
}
const validProps = schema.employee.map(prop => prop.name);
for(const prop in employee) {
if(!validProps.includes(prop)) {
return {ok: false, message: `unexpected property ${prop}`};
}
}
for(const key of ['reports', 'subordinates']) {
if(employee[key]) {
for(const report of employee[key]) {
const result = validateEmployee(report, schema);
if(!result.ok) return result;
}
}
}
return {ok: true, message: 'success'}
}
for(const employee of employees) {
const result = validateEmployee(employee, schema);
if(!result.ok) return result;
}
return { ok:...