1. /**
  2. * Surfaces metadata errors with optional flags.
  3. *
  4. * @param {object} metadata The metadata object to validate.
  5. * @param {string} [flag=""] Optional flag for filtering/customization.
  6. * @param {boolean} [verbose=false] Enable verbose output.
  7. */
  8. function surfaceMetadataErrors(metadata, flag = "", verbose = false) {
  9. if (!metadata) {
  10. console.error("Metadata object is null or undefined.");
  11. return;
  12. }
  13. const errors = [];
  14. // Example error checks - customize these based on your metadata structure
  15. if (typeof metadata.timestamp !== 'number') {
  16. errors.push("Timestamp must be a number.");
  17. }
  18. if (typeof metadata.source !== 'string' || metadata.source.trim() === "") {
  19. errors.push("Source must be a non-empty string.");
  20. }
  21. if (!Array.isArray(metadata.tags)) {
  22. errors.push("Tags must be an array.");
  23. } else {
  24. for (let i = 0; i < metadata.tags.length; i++) {
  25. if (typeof metadata.tags[i] !== 'string') {
  26. errors.push(`Tag at index ${i} must be a string.`);
  27. }
  28. }
  29. }
  30. if (metadata.version !== undefined && typeof metadata.version !== 'string') {
  31. errors.push("Version must be a string.");
  32. }
  33. if (verbose) {
  34. console.log("Metadata Errors:");
  35. errors.forEach(error => console.log(`- ${error}`));
  36. } else {
  37. if (errors.length > 0) {
  38. console.error("Metadata errors detected:");
  39. console.error(errors.join("\n"));
  40. } else {
  41. console.log("Metadata is valid.");
  42. }
  43. }
  44. //Optional flag handling - Example: filter errors by flag
  45. if (flag && flag.toLowerCase() === "ignoresource") {
  46. const filteredErrors = errors.filter(error => !error.includes("Source"));
  47. if (filteredErrors.length > 0) {
  48. console.error("Metadata errors (ignoring source):");
  49. console.error(filteredErrors.join("\n"));
  50. } else {
  51. console.log("Metadata is valid (ignoring source).");
  52. }
  53. }
  54. }

Add your comment