composite-validation
Version:
Composite validation API for JS data models
74 lines • 2.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = require("./types");
const composite_validation_options_1 = require("./operators/composite-validation-options");
/**
* Validation API helpers.
*/
class Utils {
/**
* Replaces tokens ({0}, {1}, etc.) in message respectively with args values and returns transformed string.
* @param message Tokenized message.
* @param args Values for substitution.
*/
static evaluateMessage(message, args) {
if (!args || !args.length) {
return message;
}
const output = message.replace(/\{\$(\d)\}/, match => {
const res = /\d+/.exec(match);
if (!res) {
return match;
}
const numb = res[0];
if (!numb) {
return match;
}
const parsed = parseInt(numb, 10);
if (isNaN(parsed)) {
return match;
}
if (args[parsed] == null) {
return match;
}
return args[parsed] + '';
});
return output;
}
/**
* Returns instance of error object.
* @param error Error string or object.
* @param isRequired Value is required.
* @param args Values for substitution using token replacer.
*/
static getErrorObject(error, isRequired = false, args) {
if (typeof error === 'string') {
if (args && args.length) {
error = Utils.evaluateMessage(error, args);
}
return new types_1.ValueValidationError(error, isRequired);
}
if (error instanceof types_1.ValueValidationError) {
return error;
}
return new types_1.ValueValidationError(composite_validation_options_1.CompositeValidationOptions.errorMatch('invalid'), isRequired);
}
/**
* Returns instance of value wrapper.
* @param value Inner value.
* @param isRequired Value is required.
*/
static getWrappedValue(value, isRequired = false) {
return new types_1.WrappedValue(value, isRequired);
}
/**
* If argument is wrapped value (instance of ValueWrapper) returns inner value.
* Else returns argument value.
* @param value Value wrapper or JS basic type value.
*/
static tryGetValue(obj) {
return obj instanceof types_1.WrappedValue ? obj.value : obj;
}
}
exports.Utils = Utils;
//# sourceMappingURL=utils.js.map