simple-validator-js
Version:
Simple form validator and autocorrector.
179 lines (178 loc) • 8.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var __1 = require("..");
var ErrorTexts_1 = require("../strings/ErrorTexts");
var StringTools_1 = require("../tools/StringTools");
var ContentValidators = /** @class */ (function () {
function ContentValidators() {
}
ContentValidators.shouldContain = function (validation, substring, maxAllowed) {
if (maxAllowed === void 0) { maxAllowed = null; }
if (validation.result.text.includes(substring)) {
if (maxAllowed != null) {
if (validation.result.text.split(substring).length - 1 <= maxAllowed) {
return validation;
}
}
else {
return validation;
}
}
var errorText = substring.length === 1 ?
ErrorTexts_1.ErrorTexts.SHOULD_CONTAIN_SINGLE :
ErrorTexts_1.ErrorTexts.SHOULD_CONTAIN_MULTIPLE;
validation.result.isValid = false;
validation.result.errors.push({
description: __1.getErrorInLanguage(StringTools_1.StringTools.specialCharReplace(errorText, substring)),
locations: [],
});
return validation;
};
// tslint:disable-next-line:max-line-length
ContentValidators.shouldContainAfter = function (validation, characterOrText, referenceCharacterOrText, minDistance) {
if (minDistance === void 0) { minDistance = 1; }
var substringLocation = -1;
var allSubstringLocations = StringTools_1.StringTools.returnSubstringMatchingIndexes(validation.result.text, characterOrText);
if (allSubstringLocations.length > 0) {
substringLocation = allSubstringLocations[allSubstringLocations.length - 1];
}
var referenceSubstringLocation = validation.result.text.indexOf(referenceCharacterOrText);
var distance = Math.abs(substringLocation - referenceSubstringLocation);
if (substringLocation !== -1 &&
referenceSubstringLocation !== -1 &&
referenceSubstringLocation < substringLocation &&
distance >= minDistance) {
return validation;
}
var errorText = StringTools_1.StringTools.specialCharReplaceSpecific(ErrorTexts_1.ErrorTexts.SHOULD_CONTAIN_AFTER, "~", characterOrText);
errorText = StringTools_1.StringTools.specialCharReplaceSpecific(errorText, "&", referenceCharacterOrText);
errorText = StringTools_1.StringTools.specialCharReplaceSpecific(errorText, "#", minDistance.toString());
var locationsIndexes = [];
if (substringLocation !== -1) {
locationsIndexes.push(substringLocation);
}
if (referenceSubstringLocation !== -1) {
locationsIndexes.push(referenceSubstringLocation);
}
validation.result.isValid = false;
validation.result.errors.push({
description: __1.getErrorInLanguage(errorText),
locations: locationsIndexes,
});
return validation;
};
// tslint:disable-next-line:max-line-length
ContentValidators.shouldContainBefore = function (validation, characterOrText, referenceCharacterOrText, minDistance) {
if (minDistance === void 0) { minDistance = 1; }
var substringLocation = -1;
var allSubstringLocations = StringTools_1.StringTools.returnSubstringMatchingIndexes(validation.result.text, characterOrText);
if (allSubstringLocations.length > 0) {
substringLocation = allSubstringLocations[0];
}
var referenceSubstringLocation = validation.result.text.lastIndexOf(referenceCharacterOrText);
var distance = Math.abs(substringLocation - referenceSubstringLocation);
if (substringLocation !== -1 &&
referenceSubstringLocation !== -1 &&
referenceSubstringLocation > substringLocation &&
distance >= minDistance) {
return validation;
}
// tslint:disable-next-line:max-line-length
var errorText = StringTools_1.StringTools.specialCharReplaceSpecific(ErrorTexts_1.ErrorTexts.SHOULD_CONTAIN_BEFORE, "~", characterOrText);
errorText = StringTools_1.StringTools.specialCharReplaceSpecific(errorText, "&", referenceCharacterOrText);
errorText = StringTools_1.StringTools.specialCharReplaceSpecific(errorText, "#", minDistance.toString());
var locationsIndexes = [];
if (substringLocation !== -1) {
locationsIndexes.push(substringLocation);
}
if (referenceSubstringLocation !== -1) {
locationsIndexes.push(referenceSubstringLocation);
}
validation.result.isValid = false;
validation.result.errors.push({
description: __1.getErrorInLanguage(errorText),
locations: locationsIndexes,
});
return validation;
};
// tslint:disable-next-line:max-line-length
ContentValidators.shouldContainAt = function (validation, textOrCharacter, positionIndex, fromTheBeginning, autocorrect) {
if (fromTheBeginning === void 0) { fromTheBeginning = true; }
if (autocorrect === void 0) { autocorrect = true; }
var positionIndexFinal = positionIndex;
if (!fromTheBeginning) {
positionIndexFinal = validation.result.text.length - 1 - positionIndex;
}
if (StringTools_1.StringTools.containsAt(validation.result.text, textOrCharacter, positionIndexFinal)) {
return validation;
}
if (!autocorrect || validation.result.text.length - 2 < positionIndexFinal || !fromTheBeginning) {
var errorText = fromTheBeginning ?
ErrorTexts_1.ErrorTexts.SHOULD_CONTAIN_AT_FROM_BEGGINING :
ErrorTexts_1.ErrorTexts.SHOULD_CONTAIN_AT_FROM_BOTTOM;
errorText = StringTools_1.StringTools.specialCharReplaceSpecific(errorText, "~", (positionIndex + 1).toString());
errorText = StringTools_1.StringTools.specialCharReplaceSpecific(errorText, "&", textOrCharacter);
validation.result.isValid = false;
validation.result.errors.push({
description: __1.getErrorInLanguage(errorText),
locations: [positionIndexFinal],
});
}
else {
validation.result.text = StringTools_1.StringTools.insert(validation.result.text, textOrCharacter, positionIndexFinal);
}
return validation;
};
ContentValidators.passwordConfirmation = function (validation, password) {
var match = false;
if (typeof password === "string") {
match = validation.result.text === password;
}
else {
match = validation.result.text === password();
}
if (!match) {
validation.result.isValid = false;
validation.result.errors.push({
description: __1.getErrorInLanguage(ErrorTexts_1.ErrorTexts.CONFIRM_PASSWORD),
locations: [],
});
}
return validation;
};
ContentValidators.emailConfirmation = function (validation, email) {
var match = false;
if (typeof email === "string") {
match = validation.result.text === email;
}
else {
match = validation.result.text === email();
}
if (!match) {
validation.result.isValid = false;
validation.result.errors.push({
description: __1.getErrorInLanguage(ErrorTexts_1.ErrorTexts.CONFIRM_EMAIL),
locations: [],
});
}
return validation;
};
ContentValidators.customRegex = function (validation, regex, invert, name) {
if (invert === void 0) { invert = false; }
if (name === void 0) { name = ""; }
var result = regex.test(validation.result.text);
if (invert) {
result = !result;
}
if (!result) {
validation.result.isValid = false;
validation.result.errors.push({
description: __1.getErrorInLanguage(ErrorTexts_1.ErrorTexts.CUSTOM_REGEX, name),
locations: [],
});
}
return validation;
};
return ContentValidators;
}());
exports.ContentValidators = ContentValidators;