@qualifyze/airtable
Version:
A more powerful airtable client
51 lines • 1.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SimpleValidationContext = void 0;
class SimpleValidationContext {
constructor(dataDescription) {
this.listOfErrors = [];
this.dataDescription = dataDescription;
}
addError(error) {
this.listOfErrors.push(error);
return this;
}
addValidation(validator, data) {
const isValid = validator.isValid(data);
if (!isValid) {
this.addError(validator.getValidationError() || new Error("Unknown validation error"));
}
return isValid;
}
createErrorString(indent = "\t") {
return this.listOfErrors
.map((error, index, array) => {
const prefix = array.length > 1 ? `#${index + 1} ` : "";
const message = (error.message || error).toString();
return `${indent}${prefix}${message}`.split("\n").join(`\n${indent}`);
})
.join("\n");
}
getValidationError() {
const numberOfErrors = this.listOfErrors.length;
if (numberOfErrors === 0) {
return null;
}
const friendlyNumberOfErrors = numberOfErrors > 1 ? `${numberOfErrors} errors` : "an error";
return new Error(`Encountered ${friendlyNumberOfErrors} while validating "${this.dataDescription}":\n${this.createErrorString()}`);
}
// eslint-disable-next-line @typescript-eslint/ban-types
isObject(input) {
if (typeof input !== "object") {
this.addError(new Error(`Encountered unexpected ${typeof input} where an object was expected`));
return false;
}
if (input === null) {
this.addError(new Error("Encountered unexpected null where an object was expected"));
return false;
}
return true;
}
}
exports.SimpleValidationContext = SimpleValidationContext;
//# sourceMappingURL=simple-validation-context.js.map