1. /**
  2. * Transforms metadata for diagnostics with defensive checks.
  3. *
  4. * @param {object} metadata - The input metadata object.
  5. * @returns {object} - The transformed metadata object. Returns null if input is invalid.
  6. */
  7. function transformMetadata(metadata) {
  8. // Defensive check: Ensure input is an object
  9. if (typeof metadata !== 'object' || metadata === null) {
  10. console.error("Invalid input: Metadata must be an object.");
  11. return null;
  12. }
  13. const transformed = {};
  14. // Defensive check: Ensure 'timestamp' exists and is a number
  15. if (metadata.timestamp !== undefined && typeof metadata.timestamp === 'number') {
  16. transformed.timestamp = metadata.timestamp;
  17. } else {
  18. console.warn("Timestamp missing or invalid. Skipping.");
  19. }
  20. // Defensive check: Ensure 'level' exists and is one of the allowed values
  21. const allowedLevels = ['info', 'warn', 'error'];
  22. if (metadata.level !== undefined && allowedLevels.includes(metadata.level)) {
  23. transformed.level = metadata.level;
  24. } else {
  25. console.warn("Invalid level. Skipping.");
  26. }
  27. // Defensive check: Ensure 'message' exists and is a string
  28. if (metadata.message !== undefined && typeof metadata.message === 'string') {
  29. transformed.message = metadata.message;
  30. } else {
  31. console.warn("Message missing or invalid. Skipping.");
  32. }
  33. // Defensive check: Ensure 'source' exists and is a string
  34. if (metadata.source !== undefined && typeof metadata.source === 'string'){
  35. transformed.source = metadata.source;
  36. } else {
  37. console.warn("Source missing or invalid. Skipping.");
  38. }
  39. // Defensive check: Ensure 'data' is an object
  40. if (metadata.data !== undefined && typeof metadata.data === 'object' && metadata.data !== null) {
  41. transformed.data = metadata.data;
  42. } else {
  43. console.warn("Data missing or invalid. Skipping.");
  44. }
  45. return transformed;
  46. }

Add your comment