UNPKG

nox-validation

Version:

validate dynamic schema

456 lines (437 loc) 21 kB
const dataTypes = Object.freeze({ STRING: "String", ARRAY: "Array", OBJECT: "Object", INT: "Int", BINARY: "Binary", BOOLEAN: "Boolean", CODE: "Code", DATE: "Date", DECIMAL128: "Decimal128", DOUBLE: "Double", INT32: "Int32", INT64: "Int64", MAX_KEY: "MaxKey", MIN_KEY: "MinKey", NULL: "Null", OBJECT_ID: "ObjectId", BSON_REGEXP: "BSONRegExp", BSON_SYMBOL: "BSONSymbol", TIMESTAMP: "Timestamp", UNDEFINED: "Undefined", BIGINT: "BigInt", SYMBOL: "Symbol", }); const operatorTypes = Object.freeze({ AND: "$and", OR: "$or", EQUAL: "$eq", NOT_EQUAL: "$ne", LESS_THAN: "$lt", LESS_THAN_EQUAL: "$lte", GREATER_THAN: "$gt", GREATER_THAN_EQUAL: "$gte", IN: "$in", NOT_IN: "$nin", EXISTS: "$exists", TYPE: "$type", MOD: "$mod", ALL: "$all", SIZE: "$size", }); const rulesTypes = Object.freeze({ EMPTY: "empty", NOT_EMPTY: "not_empty", ONE_OF: "one_of", NOT_ONE_OF: "not_one_of", NOT_ALLOWED: "not_allow", REGEX: "regex", MIN: "min_length", MAX: "max_length", OPERATOR: "Operator", FIELD_COMPARE: "field_compare", RULES_COMPARE: "rules_compare", }); const rulesMessages = Object.freeze({ EMPTY: `{field} should be empty.`, NOT_EMPTY: `{field} should not be empty.`, ONE_OF: `{field} should be one of the following: {value}.`, NOT_ONE_OF: `{field} should not be one of the following: {value}.`, REQUIRED: `{field} is required.`, OPTIONAL: `{field} is optional.`, NOT_NULLABLE: `{field} can not be null.`, INVALID_TYPE: "{field} contains invalid input type. Only {type} is allowed.", NOT_ALLOWED_FIELD: `{field} is not allowed.`, COMPARE: `{field} does not match the expected value.`, RULES_COMPARE: `{field} does not meet the comparison rules.`, ALLOW: `{field} contains allowed characters only.`, NOT_ALLOWED: `{field} contains disallowed characters.`, REGEX_MATCH: `{field} format is invalid.`, REGEX_START_WITH: `{field} should start with {value}.`, REGEX_ENDS_WITH: `{field} should end with {value}.`, REGEX_CONTAINS: `{field} should contain {value}.`, REGEX_EXACT: `{field} should be exactly {value}.`, REGEX_NOT_START_WITH: `{field} should not be start with {value}.`, REGEX_NOT_ENDS_WITH: `{field} should not be ends with {value}.`, REGEX_NOT_CONTAINS: `{field} should not contains {value}.`, MIN_STRING: `{field} must be at least {min} characters long.`, MAX_STRING: `{field} must be at most {max} characters long.`, MIN_NUMBER: `{field} must be at least {min}.`, MAX_NUMBER: `{field} must be at most {max}.`, AND: "{field} must be any of {value}", OR: "{field} must be any of {value}", EQUAL: "{field} must be equal to {value}", NOT_EQUAL: "{field} must not be equal to {value}", LESS_THAN: "{field} must be less than {value}", LESS_THAN_EQUAL: "{field} must be less than or equal to {value}", GREATER_THAN: "{field} must be greater than {value}", GREATER_THAN_EQUAL: "{field} must be greater than or equal to {value}", IN: "{field} must be one of the following: {value}", NOT_IN: "{field} must not contain any of these values: {value}", EXISTS: "{field} must exist", TYPE: "{field} must be of type {value}", MOD: "{field} must have a remainder of {value[1]} when divided by {value[0]}", ALL: "{field} must contain all of the following values: {value}", SIZE: "{field} must have a size of {value}", }); const regexTypes = Object.freeze({ MATCH: "match", START_WITH: "start_with", ENDS_WITH: "ends_with", CONTAINS: "contains", EXACT: "exact", NOT_START_WITH: "not_start_with", NOT_ENDS_WITH: "not_ends_with", NOT_CONTAINS: "not_contains", }); const fieldTypes = Object.freeze({ SINGLE: "Single", OBJECT: "Object", ARRAY: "Array", }); const types = Object.freeze({ STRING: "String", OBJECT: "Object", ARRAY: "Array", DATE: "Date", NUMBER: "Number", ALIAS: "Alias", OBJECT_ID: "ObjectId", BUFFER: "Buffer", BOOLEAN: "Boolean", MIXED: "Mixed", DATE_TIME: "datetime", TIME: "time", }); const interfaces = Object.freeze({ TIMESTAMP: "timestamp", INPUT: "input", MANY_TO_MANY: "list-m2m", ONE_TO_MANY: "list-o2m", MANY_TO_ONE: "list-m2o", MANY_TO_ANY: "list-m2a", FILE: "file", FILE_IMAGE: "file-image", FILES: "files", TRANSLATIONS: "translations", RELATIONAL: "relational", }); const API_VERSION = Object.freeze({ V1: "v1", V2: "v2", }); const API_VERSIONS = Object.freeze(Object.values(API_VERSION)); const LANGUAGES = Object.freeze({ en: "en", nl: "nl", lv:"lv", pl:"pl", ro:"ro", ru:"ru", }); const LOCALE_NL_MESSAGES = Object.freeze({ ADD_CHOICE: `Voeg minstens één optie toe voor {field}.`, INVALID_VALUE: `{field} bevat een ongeldige waarde.`, EMPTY: `{field} moet leeg zijn.`, NOT_EMPTY: `{field} mag niet leeg zijn.`, ONE_OF: `{field} moet een van de volgende waarden zijn: {value}.`, NOT_ONE_OF: `{field} mag niet een van de volgende waarden zijn: {value}.`, REQUIRED: `{field} is verplicht.`, OPTIONAL: `{field} is optioneel.`, NOT_NULLABLE: `{field} mag niet null zijn.`, INVALID_TYPE: "{field} bevat een ongeldig invoertype. Alleen {type} is toegestaan.", NOT_ALLOWED_FIELD: `{field} is niet toegestaan.`, COMPARE: `{field} komt niet overeen met de verwachte waarde.`, RULES_COMPARE: `{field} voldoet niet aan de vergelijkingsregels.`, ALLOW: `{field} bevat alleen toegestane tekens.`, NOT_ALLOWED: `{field} bevat niet-toegestane tekens.`, REGEX_MATCH: `{field} heeft een ongeldig formaat.`, REGEX_START_WITH: `{field} moet beginnen met {value}.`, REGEX_ENDS_WITH: `{field} moet eindigen op {value}.`, REGEX_CONTAINS: `{field} moet {value} bevatten.`, REGEX_EXACT: `{field} moet exact {value} zijn.`, REGEX_NOT_START_WITH: `{field} mag niet beginnen met {value}.`, REGEX_NOT_ENDS_WITH: `{field} mag niet eindigen op {value}.`, REGEX_NOT_CONTAINS: `{field} mag {value} niet bevatten.`, MIN_STRING: `{field} moet minstens {min} tekens lang zijn.`, MAX_STRING: `{field} mag maximaal {max} tekens lang zijn.`, MIN_NUMBER: `{field} moet minstens {min} zijn.`, MAX_NUMBER: `{field} mag maximaal {max} zijn.`, AND: "{field} moet een van {value} zijn.", OR: "{field} moet een van {value} zijn.", EQUAL: "{field} moet gelijk zijn aan {value}.", NOT_EQUAL: "{field} mag niet gelijk zijn aan {value}.", LESS_THAN: "{field} moet kleiner zijn dan {value}.", LESS_THAN_EQUAL: "{field} moet kleiner dan of gelijk zijn aan {value}.", GREATER_THAN: "{field} moet groter zijn dan {value}.", GREATER_THAN_EQUAL: "{field} moet groter dan of gelijk zijn aan {value}.", IN: "{field} moet een van de volgende waarden zijn: {value}.", NOT_IN: "{field} mag geen van de volgende waarden bevatten: {value}.", EXISTS: "{field} moet bestaan.", TYPE: "{field} moet van type {value} zijn.", MOD: "{field} moet een restwaarde van {value[1]} hebben wanneer gedeeld door {value[0]}.", ALL: "{field} moet alle van de volgende waarden bevatten: {value}.", SIZE: "{field} moet een grootte van {value} hebben.", }); const LOCALE_EN_MESSAGES = Object.freeze({ ADD_CHOICE:`Please add at least one choice for {field}.`, INVALID_VALUE: `{field} contains invalid value.`, EMPTY: `{field} should be empty.`, NOT_EMPTY: `{field} should not be empty.`, ONE_OF: `{field} should be one of the following: {value}.`, NOT_ONE_OF: `{field} should not be one of the following: {value}.`, REQUIRED: `{field} is required.`, OPTIONAL: `{field} is optional.`, NOT_NULLABLE: `{field} can not be null.`, INVALID_TYPE: "{field} contains invalid input type. Only {type} is allowed.", NOT_ALLOWED_FIELD: `{field} is not allowed.`, COMPARE: `{field} does not match the expected value.`, RULES_COMPARE: `{field} does not meet the comparison rules.`, ALLOW: `{field} contains allowed characters only.`, NOT_ALLOWED: `{field} contains disallowed characters.`, REGEX_MATCH: `{field} format is invalid.`, REGEX_START_WITH: `{field} should start with {value}.`, REGEX_ENDS_WITH: `{field} should end with {value}.`, REGEX_CONTAINS: `{field} should contain {value}.`, REGEX_EXACT: `{field} should be exactly {value}.`, REGEX_NOT_START_WITH: `{field} should not be start with {value}.`, REGEX_NOT_ENDS_WITH: `{field} should not be ends with {value}.`, REGEX_NOT_CONTAINS: `{field} should not contains {value}.`, MIN_STRING: `{field} must be at least {min} characters long.`, MAX_STRING: `{field} must be at most {max} characters long.`, MIN_NUMBER: `{field} must be at least {min}.`, MAX_NUMBER: `{field} must be at most {max}.`, AND: "{field} must be any of {value}", OR: "{field} must be any of {value}", EQUAL: "{field} must be equal to {value}", NOT_EQUAL: "{field} must not be equal to {value}", LESS_THAN: "{field} must be less than {value}", LESS_THAN_EQUAL: "{field} must be less than or equal to {value}", GREATER_THAN: "{field} must be greater than {value}", GREATER_THAN_EQUAL: "{field} must be greater than or equal to {value}", IN: "{field} must be one of the following: {value}", NOT_IN: "{field} must not contain any of these values: {value}", EXISTS: "{field} must exist", TYPE: "{field} must be of type {value}", MOD: "{field} must have a remainder of {value[1]} when divided by {value[0]}", ALL: "{field} must contain all of the following values: {value}", SIZE: "{field} must have a size of {value}", }); const LOCALE_LV_MESSAGES = Object.freeze({ ADD_CHOICE: `Lūdzu, pievienojiet vismaz vienu izvēli laukam {field}.`, INVALID_VALUE: `{field} satur nederīgu vērtību.`, EMPTY: `{field} jābūt tukšam.`, NOT_EMPTY: `{field} nedrīkst būt tukšs.`, ONE_OF: `{field} jābūt vienai no šīm vērtībām: {value}.`, NOT_ONE_OF: `{field} nedrīkst būt viena no šīm vērtībām: {value}.`, REQUIRED: `{field} ir obligāts.`, OPTIONAL: `{field} ir izvēles.`, NOT_NULLABLE: `{field} nevar būt null.`, INVALID_TYPE: `{field} satur nederīgu ievades tipu. Atļauts tikai {type}.`, NOT_ALLOWED_FIELD: `{field} nav atļauts.`, COMPARE: `{field} neatbilst paredzētajai vērtībai.`, RULES_COMPARE: `{field} neatbilst salīdzināšanas noteikumiem.`, ALLOW: `{field} satur tikai atļautās rakstzīmes.`, NOT_ALLOWED: `{field} satur neatļautas rakstzīmes.`, REGEX_MATCH: `{field} formāts nav derīgs.`, REGEX_START_WITH: `{field} jāsākas ar {value}.`, REGEX_ENDS_WITH: `{field} jābeidzas ar {value}.`, REGEX_CONTAINS: `{field} jāietver {value}.`, REGEX_EXACT: `{field} jābūt tieši {value}.`, REGEX_NOT_START_WITH: `{field} nedrīkst sākties ar {value}.`, REGEX_NOT_ENDS_WITH: `{field} nedrīkst beigties ar {value}.`, REGEX_NOT_CONTAINS: `{field} nedrīkst saturēt {value}.`, MIN_STRING: `{field} jābūt vismaz {min} rakstzīmes garam.`, MAX_STRING: `{field} jābūt ne vairāk kā {max} rakstzīmes garam.`, MIN_NUMBER: `{field} jābūt vismaz {min}.`, MAX_NUMBER: `{field} jābūt ne vairāk kā {max}.`, AND: `{field} jābūt vienai no {value}`, OR: `{field} jābūt vienai no {value}`, EQUAL: `{field} jābūt vienādam ar {value}`, NOT_EQUAL: `{field} nedrīkst būt vienāds ar {value}`, LESS_THAN: `{field} jābūt mazākam par {value}`, LESS_THAN_EQUAL: `{field} jābūt mazākam vai vienādam ar {value}`, GREATER_THAN: `{field} jābūt lielākam par {value}`, GREATER_THAN_EQUAL: `{field} jābūt lielākam vai vienādam ar {value}`, IN: `{field} jābūt vienai no šīm vērtībām: {value}`, NOT_IN: `{field} nedrīkst saturēt kādu no šīm vērtībām: {value}`, EXISTS: `{field} ir jāeksistē`, TYPE: `{field} jābūt {value} tipam`, MOD: `{field} jābūt atlikumam {value[1]} dalot ar {value[0]}`, ALL: `{field} jāietver visas šīs vērtības: {value}`, SIZE: `{field} izmēram jābūt {value}`, }); const LOCALE_PL_MESSAGES = Object.freeze({ ADD_CHOICE: `Proszę dodać co najmniej jedną opcję dla {field}.`, INVALID_VALUE: `{field} zawiera nieprawidłową wartość.`, EMPTY: `{field} powinno być puste.`, NOT_EMPTY: `{field} nie powinno być puste.`, ONE_OF: `{field} powinno być jedną z następujących wartości: {value}.`, NOT_ONE_OF: `{field} nie powinno być jedną z następujących wartości: {value}.`, REQUIRED: `{field} jest wymagane.`, OPTIONAL: `{field} jest opcjonalne.`, NOT_NULLABLE: `{field} nie może być puste (null).`, INVALID_TYPE: `{field} zawiera nieprawidłowy typ. Dozwolony tylko {type}.`, NOT_ALLOWED_FIELD: `{field} nie jest dozwolone.`, COMPARE: `{field} nie pasuje do oczekiwanej wartości.`, RULES_COMPARE: `{field} nie spełnia reguł porównania.`, ALLOW: `{field} zawiera tylko dozwolone znaki.`, NOT_ALLOWED: `{field} zawiera niedozwolone znaki.`, REGEX_MATCH: `Format pola {field} jest nieprawidłowy.`, REGEX_START_WITH: `{field} powinno zaczynać się od {value}.`, REGEX_ENDS_WITH: `{field} powinno kończyć się na {value}.`, REGEX_CONTAINS: `{field} powinno zawierać {value}.`, REGEX_EXACT: `{field} powinno być dokładnie równe {value}.`, REGEX_NOT_START_WITH: `{field} nie powinno zaczynać się od {value}.`, REGEX_NOT_ENDS_WITH: `{field} nie powinno kończyć się na {value}.`, REGEX_NOT_CONTAINS: `{field} nie powinno zawierać {value}.`, MIN_STRING: `{field} musi mieć co najmniej {min} znaków.`, MAX_STRING: `{field} może mieć maksymalnie {max} znaków.`, MIN_NUMBER: `{field} musi być co najmniej {min}.`, MAX_NUMBER: `{field} może być maksymalnie {max}.`, AND: `{field} musi być jedną z wartości: {value}`, OR: `{field} musi być jedną z wartości: {value}`, EQUAL: `{field} musi być równe {value}`, NOT_EQUAL: `{field} nie może być równe {value}`, LESS_THAN: `{field} musi być mniejsze niż {value}`, LESS_THAN_EQUAL: `{field} musi być mniejsze lub równe {value}`, GREATER_THAN: `{field} musi być większe niż {value}`, GREATER_THAN_EQUAL: `{field} musi być większe lub równe {value}`, IN: `{field} musi być jedną z następujących wartości: {value}`, NOT_IN: `{field} nie może zawierać żadnej z następujących wartości: {value}`, EXISTS: `{field} musi istnieć`, TYPE: `{field} musi być typu {value}`, MOD: `{field} musi mieć resztę {value[1]} po podzieleniu przez {value[0]}`, ALL: `{field} musi zawierać wszystkie z następujących wartości: {value}`, SIZE: `{field} musi mieć rozmiar {value}`, }); const LOCALE_RO_MESSAGES = Object.freeze({ ADD_CHOICE: `Vă rugăm să adăugați cel puțin o opțiune pentru {field}.`, INVALID_VALUE: `{field} conține o valoare invalidă.`, EMPTY: `{field} trebuie să fie gol.`, NOT_EMPTY: `{field} nu trebuie să fie gol.`, ONE_OF: `{field} trebuie să fie una dintre următoarele: {value}.`, NOT_ONE_OF: `{field} nu trebuie să fie una dintre următoarele: {value}.`, REQUIRED: `{field} este obligatoriu.`, OPTIONAL: `{field} este opțional.`, NOT_NULLABLE: `{field} nu poate fi nul.`, INVALID_TYPE: `{field} conține un tip de intrare invalid. Doar {type} este permis.`, NOT_ALLOWED_FIELD: `{field} nu este permis.`, COMPARE: `{field} nu se potrivește cu valoarea așteptată.`, RULES_COMPARE: `{field} nu respectă regulile de comparare.`, ALLOW: `{field} conține doar caractere permise.`, NOT_ALLOWED: `{field} conține caractere nepermise.`, REGEX_MATCH: `Formatul lui {field} este invalid.`, REGEX_START_WITH: `{field} trebuie să înceapă cu {value}.`, REGEX_ENDS_WITH: `{field} trebuie să se termine cu {value}.`, REGEX_CONTAINS: `{field} trebuie să conțină {value}.`, REGEX_EXACT: `{field} trebuie să fie exact {value}.`, REGEX_NOT_START_WITH: `{field} nu trebuie să înceapă cu {value}.`, REGEX_NOT_ENDS_WITH: `{field} nu trebuie să se termine cu {value}.`, REGEX_NOT_CONTAINS: `{field} nu trebuie să conțină {value}.`, MIN_STRING: `{field} trebuie să aibă cel puțin {min} caractere.`, MAX_STRING: `{field} trebuie să aibă cel mult {max} caractere.`, MIN_NUMBER: `{field} trebuie să fie cel puțin {min}.`, MAX_NUMBER: `{field} trebuie să fie cel mult {max}.`, AND: `{field} trebuie să fie una dintre: {value}`, OR: `{field} trebuie să fie una dintre: {value}`, EQUAL: `{field} trebuie să fie egal cu {value}`, NOT_EQUAL: `{field} nu trebuie să fie egal cu {value}`, LESS_THAN: `{field} trebuie să fie mai mic decât {value}`, LESS_THAN_EQUAL: `{field} trebuie să fie mai mic sau egal cu {value}`, GREATER_THAN: `{field} trebuie să fie mai mare decât {value}`, GREATER_THAN_EQUAL: `{field} trebuie să fie mai mare sau egal cu {value}`, IN: `{field} trebuie să fie una dintre următoarele valori: {value}`, NOT_IN: `{field} nu trebuie să conțină niciuna dintre următoarele valori: {value}`, EXISTS: `{field} trebuie să existe`, TYPE: `{field} trebuie să fie de tipul {value}`, MOD: `{field} trebuie să aibă restul {value[1]} când este împărțit la {value[0]}`, ALL: `{field} trebuie să conțină toate valorile: {value}`, SIZE: `{field} trebuie să aibă dimensiunea {value}`, }); const LOCALE_RU_MESSAGES = Object.freeze({ ADD_CHOICE: `Пожалуйста, добавьте хотя бы один вариант для {field}.`, INVALID_VALUE: `{field} содержит недопустимое значение.`, EMPTY: `{field} должно быть пустым.`, NOT_EMPTY: `{field} не должно быть пустым.`, ONE_OF: `{field} должно быть одним из следующих значений: {value}.`, NOT_ONE_OF: `{field} не должно быть одним из следующих значений: {value}.`, REQUIRED: `{field} обязательно для заполнения.`, OPTIONAL: `{field} является необязательным.`, NOT_NULLABLE: `{field} не может быть null.`, INVALID_TYPE: `{field} содержит недопустимый тип. Допустим только {type}.`, NOT_ALLOWED_FIELD: `{field} не разрешено.`, COMPARE: `{field} не соответствует ожидаемому значению.`, RULES_COMPARE: `{field} не соответствует правилам сравнения.`, ALLOW: `{field} содержит только допустимые символы.`, NOT_ALLOWED: `{field} содержит недопустимые символы.`, REGEX_MATCH: `Неверный формат для {field}.`, REGEX_START_WITH: `{field} должно начинаться с {value}.`, REGEX_ENDS_WITH: `{field} должно заканчиваться на {value}.`, REGEX_CONTAINS: `{field} должно содержать {value}.`, REGEX_EXACT: `{field} должно быть точно равно {value}.`, REGEX_NOT_START_WITH: `{field} не должно начинаться с {value}.`, REGEX_NOT_ENDS_WITH: `{field} не должно заканчиваться на {value}.`, REGEX_NOT_CONTAINS: `{field} не должно содержать {value}.`, MIN_STRING: `{field} должно содержать минимум {min} символов.`, MAX_STRING: `{field} должно содержать не более {max} символов.`, MIN_NUMBER: `{field} должно быть не меньше {min}.`, MAX_NUMBER: `{field} должно быть не больше {max}.`, AND: `{field} должно быть одним из: {value}`, OR: `{field} должно быть одним из: {value}`, EQUAL: `{field} должно быть равно {value}`, NOT_EQUAL: `{field} не должно быть равно {value}`, LESS_THAN: `{field} должно быть меньше {value}`, LESS_THAN_EQUAL: `{field} должно быть меньше или равно {value}`, GREATER_THAN: `{field} должно быть больше {value}`, GREATER_THAN_EQUAL: `{field} должно быть больше или равно {value}`, IN: `{field} должно быть одним из следующих значений: {value}`, NOT_IN: `{field} не должно содержать ни одно из значений: {value}`, EXISTS: `{field} должно существовать`, TYPE: `{field} должно быть типа {value}`, MOD: `{field} должно иметь остаток {value[1]} при делении на {value[0]}`, ALL: `{field} должно содержать все следующие значения: {value}`, SIZE: `{field} должно иметь размер {value}`, }); const LOCALE_MESSAGES = Object.freeze({ [LANGUAGES.en]:LOCALE_EN_MESSAGES, [LANGUAGES.nl]:LOCALE_NL_MESSAGES, [LANGUAGES.lv]:LOCALE_LV_MESSAGES, [LANGUAGES.pl]:LOCALE_PL_MESSAGES, [LANGUAGES.ro]:LOCALE_RO_MESSAGES, [LANGUAGES.ru]:LOCALE_RU_MESSAGES }) module.exports = { dataTypes, operatorTypes, rulesTypes, rulesMessages, regexTypes, types, fieldTypes, interfaces, API_VERSIONS, API_VERSION, LANGUAGES, LOCALE_MESSAGES };