/**
* Transforms metadata for diagnostics with defensive checks.
*
* @param {object} metadata - The input metadata object.
* @returns {object} - The transformed metadata object. Returns null if input is invalid.
*/
function transformMetadata(metadata) {
// Defensive check: Ensure input is an object
if (typeof metadata !== 'object' || metadata === null) {
console.error("Invalid input: Metadata must be an object.");
return null;
}
const transformed = {};
// Defensive check: Ensure 'timestamp' exists and is a number
if (metadata.timestamp !== undefined && typeof metadata.timestamp === 'number') {
transformed.timestamp = metadata.timestamp;
} else {
console.warn("Timestamp missing or invalid. Skipping.");
}
// Defensive check: Ensure 'level' exists and is one of the allowed values
const allowedLevels = ['info', 'warn', 'error'];
if (metadata.level !== undefined && allowedLevels.includes(metadata.level)) {
transformed.level = metadata.level;
} else {
console.warn("Invalid level. Skipping.");
}
// Defensive check: Ensure 'message' exists and is a string
if (metadata.message !== undefined && typeof metadata.message === 'string') {
transformed.message = metadata.message;
} else {
console.warn("Message missing or invalid. Skipping.");
}
// Defensive check: Ensure 'source' exists and is a string
if (metadata.source !== undefined && typeof metadata.source === 'string'){
transformed.source = metadata.source;
} else {
console.warn("Source missing or invalid. Skipping.");
}
// Defensive check: Ensure 'data' is an object
if (metadata.data !== undefined && typeof metadata.data === 'object' && metadata.data !== null) {
transformed.data = metadata.data;
} else {
console.warn("Data missing or invalid. Skipping.");
}
return transformed;
}
Add your comment