/**
* Surfaces metadata errors with optional flags.
*
* @param {object} metadata The metadata object to validate.
* @param {string} [flag=""] Optional flag for filtering/customization.
* @param {boolean} [verbose=false] Enable verbose output.
*/
function surfaceMetadataErrors(metadata, flag = "", verbose = false) {
if (!metadata) {
console.error("Metadata object is null or undefined.");
return;
}
const errors = [];
// Example error checks - customize these based on your metadata structure
if (typeof metadata.timestamp !== 'number') {
errors.push("Timestamp must be a number.");
}
if (typeof metadata.source !== 'string' || metadata.source.trim() === "") {
errors.push("Source must be a non-empty string.");
}
if (!Array.isArray(metadata.tags)) {
errors.push("Tags must be an array.");
} else {
for (let i = 0; i < metadata.tags.length; i++) {
if (typeof metadata.tags[i] !== 'string') {
errors.push(`Tag at index ${i} must be a string.`);
}
}
}
if (metadata.version !== undefined && typeof metadata.version !== 'string') {
errors.push("Version must be a string.");
}
if (verbose) {
console.log("Metadata Errors:");
errors.forEach(error => console.log(`- ${error}`));
} else {
if (errors.length > 0) {
console.error("Metadata errors detected:");
console.error(errors.join("\n"));
} else {
console.log("Metadata is valid.");
}
}
//Optional flag handling - Example: filter errors by flag
if (flag && flag.toLowerCase() === "ignoresource") {
const filteredErrors = errors.filter(error => !error.includes("Source"));
if (filteredErrors.length > 0) {
console.error("Metadata errors (ignoring source):");
console.error(filteredErrors.join("\n"));
} else {
console.log("Metadata is valid (ignoring source).");
}
}
}
Add your comment