/**
* Data Migration Error Reporter
*
* @param {Array<Object>} data - Array of data entries to validate.
* @param {Object} schema - Schema defining the expected data structure and types.
* @returns {Array<string>} - Array of error messages. Empty if no errors.
*/
function reportMigrationErrors(data, schema) {
const errors = [];
if (!Array.isArray(data)) {
errors.push("Data must be an array.");
return errors;
}
if (!schema || typeof schema !== 'object') {
errors.push("Schema must be an object.");
return errors;
}
for (let i = 0; i < data.length; i++) {
const entry = data[i];
if (typeof entry !== 'object' || entry === null) {
errors.push(`Entry at index ${i} is not a valid object.`);
continue; // Skip to the next entry
}
for (const key in schema) {
if (schema.hasOwnProperty(key)) {
const expectedType = schema[key].type;
const required = schema[key].required === true;
if (key === 'required' && schema[key].required === true) continue; //Skip checking required field
if (expectedType === 'string' && typeof entry[key] !== 'string') {
errors.push(`Entry at index ${i}, key '${key}' is not a string. Expected string, got ${typeof entry[key]}`);
} else if (expectedType === 'number' && typeof entry[key] !== 'number') {
errors.push(`Entry at index ${i}, key '${key}' is not a number. Expected number, got ${typeof entry[key]}`);
} else if (expectedType === 'boolean' && typeof entry[key] !== 'boolean') {
errors.push(`Entry at index ${i}, key '${key}' is not a boolean. Expected boolean, got ${typeof entry[key]}`);
} else if (expectedType === 'array' && !Array.isArray(entry[key])) {
errors.push(`Entry at index ${i}, key '${key}' is not an array. Expected array, got ${typeof entry[key]}`);
} else if (expectedType === 'object' && typeof entry[key] !== 'object' || entry[key] === null) {
errors.push(`Entry at index ${i}, key '${key}' is not an object. Expected object, got ${typeof entry[key]}`);
}
// Add more type checks as needed (e.g., date, etc.)
if (required && !(key in entry) || (key in entry && entry[key] === null || entry[key] === undefined)) {
errors.push(`Entry at index ${i}, key '${key}' is required but missing or null/undefined.`);
}
}
}
}
return errors;
}
Add your comment