schema-dsl 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +130 -113
- package/LICENSE +21 -21
- package/README.md +628 -628
- package/dist/{DslBuilder-DkLaOo9Q.d.ts → DslBuilder-BIgQOAXp.d.ts} +2 -0
- package/dist/{DslBuilder-DQDN0ZxZ.d.cts → DslBuilder-CjHTucNQ.d.cts} +2 -0
- package/dist/{Validator-hFWKGxir.d.ts → Validator-CllRdrY0.d.ts} +1 -1
- package/dist/{Validator-C7GsVQOH.d.cts → Validator-D6okG9tr.d.cts} +1 -1
- package/dist/index.cjs +75 -29
- package/dist/index.d.cts +10 -4
- package/dist/index.d.ts +10 -4
- package/dist/index.js +75 -29
- package/dist/plugins/custom-format.cjs +33 -17
- package/dist/plugins/custom-format.d.cts +1 -1
- package/dist/plugins/custom-format.d.ts +1 -1
- package/dist/plugins/custom-format.js +33 -17
- package/dist/plugins/custom-type-example.cjs +33 -17
- package/dist/plugins/custom-type-example.d.cts +1 -1
- package/dist/plugins/custom-type-example.d.ts +1 -1
- package/dist/plugins/custom-type-example.js +33 -17
- package/dist/plugins/custom-validator.cjs +0 -2
- package/dist/plugins/custom-validator.d.cts +1 -1
- package/dist/plugins/custom-validator.d.ts +1 -1
- package/dist/plugins/custom-validator.js +0 -2
- package/docs/FEATURE-INDEX.md +553 -553
- package/docs/add-custom-locale.md +496 -496
- package/docs/add-keyword.md +24 -24
- package/docs/api-reference.md +1047 -1047
- package/docs/api.md +13 -13
- package/docs/best-practices-project-structure.md +417 -417
- package/docs/best-practices.md +712 -712
- package/docs/cache-manager.md +344 -344
- package/docs/compile.md +45 -45
- package/docs/conditional-api.md +1307 -1307
- package/docs/custom-extensions-guide.md +339 -339
- package/docs/design-philosophy.md +606 -606
- package/docs/doc-index.md +324 -324
- package/docs/dsl-syntax.md +714 -714
- package/docs/dynamic-locale.md +608 -608
- package/docs/enum.md +482 -482
- package/docs/error-handling.md +1975 -1975
- package/docs/export-guide.md +501 -501
- package/docs/export-limitations.md +567 -567
- package/docs/faq.md +596 -596
- package/docs/frontend-i18n-guide.md +307 -307
- package/docs/i18n-user-guide.md +487 -487
- package/docs/i18n.md +476 -476
- package/docs/index.md +48 -48
- package/docs/json-schema-basics.md +40 -40
- package/docs/label-vs-description.md +271 -271
- package/docs/markdown-exporter.md +406 -406
- package/docs/mongodb-exporter.md +302 -302
- package/docs/multi-language.md +26 -26
- package/docs/multi-type-support.md +322 -322
- package/docs/mysql-exporter.md +280 -280
- package/docs/number-operators.md +449 -449
- package/docs/optional-marker-guide.md +326 -326
- package/docs/performance-guide.md +49 -49
- package/docs/plugin-system.md +381 -381
- package/docs/plugin-type-registration.md +34 -34
- package/docs/postgresql-exporter.md +311 -311
- package/docs/public/favicon.svg +4 -4
- package/docs/quick-start.md +435 -435
- package/docs/runtime-locale-support.md +532 -532
- package/docs/schema-helper.md +345 -345
- package/docs/schema-utils-advanced-issues.md +23 -23
- package/docs/schema-utils-best-practices.md +20 -20
- package/docs/schema-utils-chaining.md +150 -150
- package/docs/schema-utils.md +524 -524
- package/docs/security-checklist.md +20 -20
- package/docs/string-extensions.md +488 -488
- package/docs/troubleshooting.md +486 -486
- package/docs/type-converter.md +310 -310
- package/docs/type-reference.md +242 -242
- package/docs/typescript-guide.md +584 -584
- package/docs/union-type-guide.md +157 -157
- package/docs/union-types.md +284 -284
- package/docs/validate-async.md +491 -491
- package/docs/validate-batch.md +49 -49
- package/docs/validate-dsl-object-support.md +578 -578
- package/docs/validate.md +506 -506
- package/docs/validation-guide.md +502 -502
- package/docs/validator.md +39 -39
- package/package.json +131 -131
- package/plugins/custom-format.cjs +8 -8
- package/plugins/custom-type-example.cjs +8 -8
- package/plugins/custom-validator.cjs +8 -8
- package/src/adapters/DslAdapter.ts +111 -111
- package/src/adapters/index.ts +1 -1
- package/src/config/constants.ts +83 -83
- package/src/config/index.ts +2 -2
- package/src/config/patterns.ts +77 -77
- package/src/core/CacheManager.ts +169 -159
- package/src/core/ConditionalBuilder.ts +382 -382
- package/src/core/ConditionalRuntime.ts +27 -27
- package/src/core/ConditionalValidator.ts +254 -254
- package/src/core/DslBuilder.ts +687 -677
- package/src/core/ErrorCodes.ts +38 -38
- package/src/core/ErrorFormatter.ts +271 -271
- package/src/core/JSONSchemaCore.ts +65 -65
- package/src/core/Locale.ts +187 -187
- package/src/core/MessageTemplate.ts +42 -42
- package/src/core/ObjectDslBuilder.ts +64 -64
- package/src/core/PluginManager.ts +326 -326
- package/src/core/StringExtensions.ts +140 -140
- package/src/core/TemplateEngine.ts +44 -44
- package/src/core/Validator.ts +448 -448
- package/src/errors/I18nError.ts +159 -159
- package/src/errors/ValidationError.ts +105 -105
- package/src/exporters/BaseExporter.ts +60 -60
- package/src/exporters/MarkdownExporter.ts +305 -305
- package/src/exporters/MongoDBExporter.ts +126 -126
- package/src/exporters/MySQLExporter.ts +156 -155
- package/src/exporters/PostgreSQLExporter.ts +222 -222
- package/src/exporters/index.ts +18 -18
- package/src/index.ts +651 -633
- package/src/locales/en-US.ts +160 -160
- package/src/locales/es-ES.ts +160 -160
- package/src/locales/fr-FR.ts +160 -160
- package/src/locales/index.ts +103 -103
- package/src/locales/ja-JP.ts +160 -160
- package/src/locales/types.ts +156 -156
- package/src/locales/zh-CN.ts +160 -160
- package/src/parser/ConstraintParser.ts +101 -101
- package/src/parser/DslParser.ts +470 -470
- package/src/parser/SchemaCompiler.ts +66 -66
- package/src/parser/TypeRegistry.ts +250 -250
- package/src/parser/index.ts +6 -6
- package/src/plugins/custom-format.ts +124 -126
- package/src/plugins/custom-type-example.ts +106 -108
- package/src/plugins/custom-validator.ts +138 -140
- package/src/types/conditional.ts +28 -28
- package/src/types/config.ts +59 -59
- package/src/types/dsl.ts +131 -131
- package/src/types/error.ts +60 -60
- package/src/types/index.ts +17 -17
- package/src/types/infer.ts +127 -127
- package/src/types/plugin.ts +58 -58
- package/src/types/safe-regex.d.ts +9 -9
- package/src/types/schema.ts +66 -66
- package/src/types/validate.ts +71 -71
- package/src/utils/SchemaHelper.ts +196 -196
- package/src/utils/SchemaUtils.ts +365 -346
- package/src/utils/TypeConverter.ts +215 -215
- package/src/utils/index.ts +10 -10
- package/src/validators/CustomKeywords.ts +477 -477
package/src/locales/es-ES.ts
CHANGED
|
@@ -1,160 +1,160 @@
|
|
|
1
|
-
import type { LocaleMessages } from './types.js'
|
|
2
|
-
|
|
3
|
-
const esES: LocaleMessages = {
|
|
4
|
-
// Generic
|
|
5
|
-
required: '{{#label}} es obligatorio',
|
|
6
|
-
type: '{{#label}} debe ser de tipo {{#expected}}, pero se obtuvo {{#actual}}',
|
|
7
|
-
min: 'La longitud de {{#label}} debe ser al menos {{#limit}}',
|
|
8
|
-
max: 'La longitud de {{#label}} debe ser como máximo {{#limit}}',
|
|
9
|
-
length: 'La longitud de {{#label}} debe ser exactamente {{#expected}}',
|
|
10
|
-
pattern: 'El formato de {{#label}} no es válido',
|
|
11
|
-
enum: '{{#label}} debe ser uno de: {{#allowed}}',
|
|
12
|
-
custom: 'Validación fallida para {{#label}}: {{#message}}',
|
|
13
|
-
circular: 'Referencia circular detectada en {{#label}}',
|
|
14
|
-
'max-depth': 'Profundidad máxima de recursión ({{#depth}}) excedida en {{#label}}',
|
|
15
|
-
exception: 'Excepción de validación en {{#label}}: {{#message}}',
|
|
16
|
-
|
|
17
|
-
// Conditional (v2 additions)
|
|
18
|
-
'conditional.underAge': 'Los menores de edad no pueden registrarse',
|
|
19
|
-
'conditional.blocked': 'La cuenta ha sido bloqueada',
|
|
20
|
-
'conditional.notAllowed': 'El registro no está permitido',
|
|
21
|
-
|
|
22
|
-
// I18nError — generic (v2 additions)
|
|
23
|
-
'error.notFound': '{{#resource}} no encontrado',
|
|
24
|
-
'error.forbidden': 'Acceso a {{#resource}} está prohibido',
|
|
25
|
-
'error.unauthorized': 'No autorizado, por favor inicie sesión',
|
|
26
|
-
'error.invalid': '{{#field}} no es válido',
|
|
27
|
-
'error.duplicate': '{{#resource}} ya existe',
|
|
28
|
-
'error.conflict': 'Conflicto de operación: {{#reason}}',
|
|
29
|
-
|
|
30
|
-
// Account (v2 additions)
|
|
31
|
-
'account.notFound': { code: 'ACCOUNT_NOT_FOUND', message: 'Cuenta no encontrada' },
|
|
32
|
-
'account.inactive': 'La cuenta está inactiva',
|
|
33
|
-
'account.banned': 'La cuenta ha sido suspendida',
|
|
34
|
-
'account.insufficientBalance': {
|
|
35
|
-
code: 'INSUFFICIENT_BALANCE',
|
|
36
|
-
message: 'Saldo insuficiente, actual: {{#balance}}, requerido: {{#required}}',
|
|
37
|
-
},
|
|
38
|
-
'account.insufficientCredits': 'Créditos insuficientes, actual: {{#credits}}, requerido: {{#required}}',
|
|
39
|
-
|
|
40
|
-
// User (v2 additions)
|
|
41
|
-
'user.notFound': 'Usuario no encontrado',
|
|
42
|
-
'user.notVerified': 'El usuario no está verificado',
|
|
43
|
-
'user.noPermission': 'Sin permisos de administrador',
|
|
44
|
-
|
|
45
|
-
// Order (v2 additions)
|
|
46
|
-
'order.notPaid': { code: 'ORDER_NOT_PAID', message: 'Pedido no pagado' },
|
|
47
|
-
'order.paymentMissing': 'Falta información de pago',
|
|
48
|
-
'order.addressMissing': 'Falta la dirección de envío',
|
|
49
|
-
|
|
50
|
-
// Format
|
|
51
|
-
'format.email': '{{#label}} debe ser una dirección de correo electrónico válida',
|
|
52
|
-
'format.url': '{{#label}} debe ser una URL válida',
|
|
53
|
-
'format.uuid': '{{#label}} debe ser un UUID válido',
|
|
54
|
-
'format.date': '{{#label}} debe ser una fecha válida (YYYY-MM-DD)',
|
|
55
|
-
'format.datetime': '{{#label}} debe ser una fecha y hora válida (ISO 8601)',
|
|
56
|
-
'format.time': '{{#label}} debe ser una hora válida (HH:mm:ss)',
|
|
57
|
-
'format.ipv4': '{{#label}} debe ser una dirección IPv4 válida',
|
|
58
|
-
'format.ipv6': '{{#label}} debe ser una dirección IPv6 válida',
|
|
59
|
-
'format.binary': '{{#label}} debe ser una cadena base64 válida',
|
|
60
|
-
|
|
61
|
-
// String
|
|
62
|
-
'string.hostname': '{{#label}} debe ser un nombre de host válido',
|
|
63
|
-
'string.pattern': 'El formato de {{#label}} no coincide con el patrón requerido',
|
|
64
|
-
'string.enum': '{{#label}} debe ser uno de: {{#valids}}',
|
|
65
|
-
'string.length': 'La longitud de {{#label}} debe ser exactamente {{#limit}} caracteres',
|
|
66
|
-
'string.alphanum': '{{#label}} solo puede contener caracteres alfanuméricos',
|
|
67
|
-
'string.trim': '{{#label}} no debe tener espacios al principio ni al final',
|
|
68
|
-
'string.lowercase': '{{#label}} debe estar en minúsculas',
|
|
69
|
-
'string.uppercase': '{{#label}} debe estar en mayúsculas',
|
|
70
|
-
|
|
71
|
-
// Number
|
|
72
|
-
'number.base': '{{#label}} debe ser un número',
|
|
73
|
-
'number.min': '{{#label}} debe ser mayor o igual a {{#limit}}',
|
|
74
|
-
'number.max': '{{#label}} debe ser menor o igual a {{#limit}}',
|
|
75
|
-
'number.integer': '{{#label}} debe ser un número entero',
|
|
76
|
-
'number.positive': '{{#label}} debe ser un número positivo',
|
|
77
|
-
'number.negative': '{{#label}} debe ser un número negativo',
|
|
78
|
-
'number.precision': '{{#label}} debe tener como máximo {{#limit}} decimales',
|
|
79
|
-
'number.port': '{{#label}} debe ser un número de puerto válido (1-65535)',
|
|
80
|
-
|
|
81
|
-
// Boolean
|
|
82
|
-
'boolean.base': '{{#label}} debe ser un booleano',
|
|
83
|
-
|
|
84
|
-
// Object
|
|
85
|
-
'object.base': '{{#label}} debe ser un objeto',
|
|
86
|
-
'object.min': '{{#label}} debe tener al menos {{#limit}} propiedades',
|
|
87
|
-
'object.max': '{{#label}} debe tener como máximo {{#limit}} propiedades',
|
|
88
|
-
'object.unknown': '{{#label}} contiene una propiedad desconocida: {{#key}}',
|
|
89
|
-
'object.missing': 'A {{#label}} le faltan propiedades requeridas',
|
|
90
|
-
'object.schema': '{{#label}} contiene propiedades adicionales',
|
|
91
|
-
'additionalProperties': '{{#label}} NO debe tener propiedades adicionales: {{#key}}',
|
|
92
|
-
|
|
93
|
-
// Array
|
|
94
|
-
'array.base': '{{#label}} debe ser un array',
|
|
95
|
-
'array.min': '{{#label}} debe tener al menos {{#limit}} elementos',
|
|
96
|
-
'array.max': '{{#label}} debe tener como máximo {{#limit}} elementos',
|
|
97
|
-
'array.length': '{{#label}} debe tener exactamente {{#limit}} elementos',
|
|
98
|
-
'array.unique': '{{#label}} no debe contener elementos duplicados',
|
|
99
|
-
'array.sparse': '{{#label}} no debe ser un array disperso',
|
|
100
|
-
'array.includesRequired': '{{#label}} debe incluir los elementos requeridos',
|
|
101
|
-
|
|
102
|
-
// Date
|
|
103
|
-
'date.base': '{{#label}} debe ser una fecha válida',
|
|
104
|
-
'date.min': '{{#label}} no debe ser anterior a {{#limit}}',
|
|
105
|
-
'date.max': '{{#label}} no debe ser posterior a {{#limit}}',
|
|
106
|
-
'date.format': 'El formato de fecha de {{#label}} no es válido',
|
|
107
|
-
'date.greater': '{{#label}} debe ser posterior a {{#limit}}',
|
|
108
|
-
'date.less': '{{#label}} debe ser anterior a {{#limit}}',
|
|
109
|
-
|
|
110
|
-
// Any
|
|
111
|
-
'any.required': '{{#label}} es obligatorio',
|
|
112
|
-
'any.invalid': '{{#label}} contiene un valor no válido',
|
|
113
|
-
'any.only': '{{#label}} debe coincidir con {{#valids}}',
|
|
114
|
-
'any.unknown': 'El campo {{#key}} no está permitido',
|
|
115
|
-
|
|
116
|
-
// Patterns
|
|
117
|
-
'pattern.phone': 'Número de teléfono no válido',
|
|
118
|
-
'pattern.phone.international': 'Número de teléfono internacional no válido',
|
|
119
|
-
'pattern.idCard': 'Número de tarjeta de identificación no válido',
|
|
120
|
-
'pattern.creditCard': 'Número de tarjeta de crédito no válido',
|
|
121
|
-
'pattern.creditCard.visa': 'Número de tarjeta Visa no válido',
|
|
122
|
-
'pattern.creditCard.mastercard': 'Número de Mastercard no válido',
|
|
123
|
-
'pattern.creditCard.amex': 'Número de tarjeta American Express no válido',
|
|
124
|
-
'pattern.creditCard.discover': 'Número de tarjeta Discover no válido',
|
|
125
|
-
'pattern.creditCard.jcb': 'Número de tarjeta JCB no válido',
|
|
126
|
-
'pattern.creditCard.unionpay': 'Número de tarjeta UnionPay no válido',
|
|
127
|
-
'pattern.licensePlate': 'Número de matrícula no válido',
|
|
128
|
-
'pattern.postalCode': 'Código postal no válido',
|
|
129
|
-
'pattern.passport': 'Número de pasaporte no válido',
|
|
130
|
-
'pattern.objectId': 'ObjectId no válido',
|
|
131
|
-
'pattern.hexColor': 'Color hexadecimal no válido',
|
|
132
|
-
'pattern.macAddress': 'Dirección MAC no válida',
|
|
133
|
-
'pattern.cron': 'Expresión Cron no válida',
|
|
134
|
-
'pattern.slug': 'El slug de URL solo puede contener letras minúsculas, números y guiones',
|
|
135
|
-
'pattern.domain': '{{#label}} debe ser un nombre de dominio válido',
|
|
136
|
-
'pattern.ip': '{{#label}} debe ser una dirección IP válida',
|
|
137
|
-
'pattern.base64': '{{#label}} debe ser una cadena Base64 válida',
|
|
138
|
-
'pattern.jwt': '{{#label}} debe ser un token JWT válido',
|
|
139
|
-
'pattern.json': '{{#label}} debe ser una cadena JSON válida',
|
|
140
|
-
'pattern.username': 'El nombre de usuario debe comenzar con una letra y contener solo letras, números y guiones bajos',
|
|
141
|
-
'pattern.password.weak': 'La contraseña debe tener al menos 6 caracteres',
|
|
142
|
-
'pattern.password.medium': 'La contraseña debe tener al menos 8 caracteres y contener letras y números',
|
|
143
|
-
'pattern.password.strong': 'La contraseña debe tener al menos 8 caracteres y contener letras mayúsculas, minúsculas y números',
|
|
144
|
-
'pattern.password.veryStrong': 'La contraseña debe tener al menos 10 caracteres y contener letras mayúsculas, minúsculas, números y caracteres especiales',
|
|
145
|
-
'pattern.emailOrPhone': 'Debe ser un correo electrónico o número de teléfono',
|
|
146
|
-
'pattern.usernameOrEmail': 'Debe ser un nombre de usuario o correo electrónico',
|
|
147
|
-
'pattern.httpOrHttps': 'Debe ser una URL que comience con http o https',
|
|
148
|
-
|
|
149
|
-
// oneOf
|
|
150
|
-
oneOf: '{{#label}} debe coincidir con uno de los siguientes tipos',
|
|
151
|
-
'oneOf.invalid': 'El valor de {{#label}} no coincide con ningún tipo permitido',
|
|
152
|
-
|
|
153
|
-
// Error fallback
|
|
154
|
-
UNKNOWN_ERROR: 'Error de validación desconocido',
|
|
155
|
-
CUSTOM_VALIDATION_FAILED: 'Validación fallida',
|
|
156
|
-
ASYNC_VALIDATION_NOT_SUPPORTED: 'La validación asíncrona no es compatible en validate() síncrono',
|
|
157
|
-
VALIDATE_MUST_BE_FUNCTION: 'validate debe ser una función',
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
export default esES
|
|
1
|
+
import type { LocaleMessages } from './types.js'
|
|
2
|
+
|
|
3
|
+
const esES: LocaleMessages = {
|
|
4
|
+
// Generic
|
|
5
|
+
required: '{{#label}} es obligatorio',
|
|
6
|
+
type: '{{#label}} debe ser de tipo {{#expected}}, pero se obtuvo {{#actual}}',
|
|
7
|
+
min: 'La longitud de {{#label}} debe ser al menos {{#limit}}',
|
|
8
|
+
max: 'La longitud de {{#label}} debe ser como máximo {{#limit}}',
|
|
9
|
+
length: 'La longitud de {{#label}} debe ser exactamente {{#expected}}',
|
|
10
|
+
pattern: 'El formato de {{#label}} no es válido',
|
|
11
|
+
enum: '{{#label}} debe ser uno de: {{#allowed}}',
|
|
12
|
+
custom: 'Validación fallida para {{#label}}: {{#message}}',
|
|
13
|
+
circular: 'Referencia circular detectada en {{#label}}',
|
|
14
|
+
'max-depth': 'Profundidad máxima de recursión ({{#depth}}) excedida en {{#label}}',
|
|
15
|
+
exception: 'Excepción de validación en {{#label}}: {{#message}}',
|
|
16
|
+
|
|
17
|
+
// Conditional (v2 additions)
|
|
18
|
+
'conditional.underAge': 'Los menores de edad no pueden registrarse',
|
|
19
|
+
'conditional.blocked': 'La cuenta ha sido bloqueada',
|
|
20
|
+
'conditional.notAllowed': 'El registro no está permitido',
|
|
21
|
+
|
|
22
|
+
// I18nError — generic (v2 additions)
|
|
23
|
+
'error.notFound': '{{#resource}} no encontrado',
|
|
24
|
+
'error.forbidden': 'Acceso a {{#resource}} está prohibido',
|
|
25
|
+
'error.unauthorized': 'No autorizado, por favor inicie sesión',
|
|
26
|
+
'error.invalid': '{{#field}} no es válido',
|
|
27
|
+
'error.duplicate': '{{#resource}} ya existe',
|
|
28
|
+
'error.conflict': 'Conflicto de operación: {{#reason}}',
|
|
29
|
+
|
|
30
|
+
// Account (v2 additions)
|
|
31
|
+
'account.notFound': { code: 'ACCOUNT_NOT_FOUND', message: 'Cuenta no encontrada' },
|
|
32
|
+
'account.inactive': 'La cuenta está inactiva',
|
|
33
|
+
'account.banned': 'La cuenta ha sido suspendida',
|
|
34
|
+
'account.insufficientBalance': {
|
|
35
|
+
code: 'INSUFFICIENT_BALANCE',
|
|
36
|
+
message: 'Saldo insuficiente, actual: {{#balance}}, requerido: {{#required}}',
|
|
37
|
+
},
|
|
38
|
+
'account.insufficientCredits': 'Créditos insuficientes, actual: {{#credits}}, requerido: {{#required}}',
|
|
39
|
+
|
|
40
|
+
// User (v2 additions)
|
|
41
|
+
'user.notFound': 'Usuario no encontrado',
|
|
42
|
+
'user.notVerified': 'El usuario no está verificado',
|
|
43
|
+
'user.noPermission': 'Sin permisos de administrador',
|
|
44
|
+
|
|
45
|
+
// Order (v2 additions)
|
|
46
|
+
'order.notPaid': { code: 'ORDER_NOT_PAID', message: 'Pedido no pagado' },
|
|
47
|
+
'order.paymentMissing': 'Falta información de pago',
|
|
48
|
+
'order.addressMissing': 'Falta la dirección de envío',
|
|
49
|
+
|
|
50
|
+
// Format
|
|
51
|
+
'format.email': '{{#label}} debe ser una dirección de correo electrónico válida',
|
|
52
|
+
'format.url': '{{#label}} debe ser una URL válida',
|
|
53
|
+
'format.uuid': '{{#label}} debe ser un UUID válido',
|
|
54
|
+
'format.date': '{{#label}} debe ser una fecha válida (YYYY-MM-DD)',
|
|
55
|
+
'format.datetime': '{{#label}} debe ser una fecha y hora válida (ISO 8601)',
|
|
56
|
+
'format.time': '{{#label}} debe ser una hora válida (HH:mm:ss)',
|
|
57
|
+
'format.ipv4': '{{#label}} debe ser una dirección IPv4 válida',
|
|
58
|
+
'format.ipv6': '{{#label}} debe ser una dirección IPv6 válida',
|
|
59
|
+
'format.binary': '{{#label}} debe ser una cadena base64 válida',
|
|
60
|
+
|
|
61
|
+
// String
|
|
62
|
+
'string.hostname': '{{#label}} debe ser un nombre de host válido',
|
|
63
|
+
'string.pattern': 'El formato de {{#label}} no coincide con el patrón requerido',
|
|
64
|
+
'string.enum': '{{#label}} debe ser uno de: {{#valids}}',
|
|
65
|
+
'string.length': 'La longitud de {{#label}} debe ser exactamente {{#limit}} caracteres',
|
|
66
|
+
'string.alphanum': '{{#label}} solo puede contener caracteres alfanuméricos',
|
|
67
|
+
'string.trim': '{{#label}} no debe tener espacios al principio ni al final',
|
|
68
|
+
'string.lowercase': '{{#label}} debe estar en minúsculas',
|
|
69
|
+
'string.uppercase': '{{#label}} debe estar en mayúsculas',
|
|
70
|
+
|
|
71
|
+
// Number
|
|
72
|
+
'number.base': '{{#label}} debe ser un número',
|
|
73
|
+
'number.min': '{{#label}} debe ser mayor o igual a {{#limit}}',
|
|
74
|
+
'number.max': '{{#label}} debe ser menor o igual a {{#limit}}',
|
|
75
|
+
'number.integer': '{{#label}} debe ser un número entero',
|
|
76
|
+
'number.positive': '{{#label}} debe ser un número positivo',
|
|
77
|
+
'number.negative': '{{#label}} debe ser un número negativo',
|
|
78
|
+
'number.precision': '{{#label}} debe tener como máximo {{#limit}} decimales',
|
|
79
|
+
'number.port': '{{#label}} debe ser un número de puerto válido (1-65535)',
|
|
80
|
+
|
|
81
|
+
// Boolean
|
|
82
|
+
'boolean.base': '{{#label}} debe ser un booleano',
|
|
83
|
+
|
|
84
|
+
// Object
|
|
85
|
+
'object.base': '{{#label}} debe ser un objeto',
|
|
86
|
+
'object.min': '{{#label}} debe tener al menos {{#limit}} propiedades',
|
|
87
|
+
'object.max': '{{#label}} debe tener como máximo {{#limit}} propiedades',
|
|
88
|
+
'object.unknown': '{{#label}} contiene una propiedad desconocida: {{#key}}',
|
|
89
|
+
'object.missing': 'A {{#label}} le faltan propiedades requeridas',
|
|
90
|
+
'object.schema': '{{#label}} contiene propiedades adicionales',
|
|
91
|
+
'additionalProperties': '{{#label}} NO debe tener propiedades adicionales: {{#key}}',
|
|
92
|
+
|
|
93
|
+
// Array
|
|
94
|
+
'array.base': '{{#label}} debe ser un array',
|
|
95
|
+
'array.min': '{{#label}} debe tener al menos {{#limit}} elementos',
|
|
96
|
+
'array.max': '{{#label}} debe tener como máximo {{#limit}} elementos',
|
|
97
|
+
'array.length': '{{#label}} debe tener exactamente {{#limit}} elementos',
|
|
98
|
+
'array.unique': '{{#label}} no debe contener elementos duplicados',
|
|
99
|
+
'array.sparse': '{{#label}} no debe ser un array disperso',
|
|
100
|
+
'array.includesRequired': '{{#label}} debe incluir los elementos requeridos',
|
|
101
|
+
|
|
102
|
+
// Date
|
|
103
|
+
'date.base': '{{#label}} debe ser una fecha válida',
|
|
104
|
+
'date.min': '{{#label}} no debe ser anterior a {{#limit}}',
|
|
105
|
+
'date.max': '{{#label}} no debe ser posterior a {{#limit}}',
|
|
106
|
+
'date.format': 'El formato de fecha de {{#label}} no es válido',
|
|
107
|
+
'date.greater': '{{#label}} debe ser posterior a {{#limit}}',
|
|
108
|
+
'date.less': '{{#label}} debe ser anterior a {{#limit}}',
|
|
109
|
+
|
|
110
|
+
// Any
|
|
111
|
+
'any.required': '{{#label}} es obligatorio',
|
|
112
|
+
'any.invalid': '{{#label}} contiene un valor no válido',
|
|
113
|
+
'any.only': '{{#label}} debe coincidir con {{#valids}}',
|
|
114
|
+
'any.unknown': 'El campo {{#key}} no está permitido',
|
|
115
|
+
|
|
116
|
+
// Patterns
|
|
117
|
+
'pattern.phone': 'Número de teléfono no válido',
|
|
118
|
+
'pattern.phone.international': 'Número de teléfono internacional no válido',
|
|
119
|
+
'pattern.idCard': 'Número de tarjeta de identificación no válido',
|
|
120
|
+
'pattern.creditCard': 'Número de tarjeta de crédito no válido',
|
|
121
|
+
'pattern.creditCard.visa': 'Número de tarjeta Visa no válido',
|
|
122
|
+
'pattern.creditCard.mastercard': 'Número de Mastercard no válido',
|
|
123
|
+
'pattern.creditCard.amex': 'Número de tarjeta American Express no válido',
|
|
124
|
+
'pattern.creditCard.discover': 'Número de tarjeta Discover no válido',
|
|
125
|
+
'pattern.creditCard.jcb': 'Número de tarjeta JCB no válido',
|
|
126
|
+
'pattern.creditCard.unionpay': 'Número de tarjeta UnionPay no válido',
|
|
127
|
+
'pattern.licensePlate': 'Número de matrícula no válido',
|
|
128
|
+
'pattern.postalCode': 'Código postal no válido',
|
|
129
|
+
'pattern.passport': 'Número de pasaporte no válido',
|
|
130
|
+
'pattern.objectId': 'ObjectId no válido',
|
|
131
|
+
'pattern.hexColor': 'Color hexadecimal no válido',
|
|
132
|
+
'pattern.macAddress': 'Dirección MAC no válida',
|
|
133
|
+
'pattern.cron': 'Expresión Cron no válida',
|
|
134
|
+
'pattern.slug': 'El slug de URL solo puede contener letras minúsculas, números y guiones',
|
|
135
|
+
'pattern.domain': '{{#label}} debe ser un nombre de dominio válido',
|
|
136
|
+
'pattern.ip': '{{#label}} debe ser una dirección IP válida',
|
|
137
|
+
'pattern.base64': '{{#label}} debe ser una cadena Base64 válida',
|
|
138
|
+
'pattern.jwt': '{{#label}} debe ser un token JWT válido',
|
|
139
|
+
'pattern.json': '{{#label}} debe ser una cadena JSON válida',
|
|
140
|
+
'pattern.username': 'El nombre de usuario debe comenzar con una letra y contener solo letras, números y guiones bajos',
|
|
141
|
+
'pattern.password.weak': 'La contraseña debe tener al menos 6 caracteres',
|
|
142
|
+
'pattern.password.medium': 'La contraseña debe tener al menos 8 caracteres y contener letras y números',
|
|
143
|
+
'pattern.password.strong': 'La contraseña debe tener al menos 8 caracteres y contener letras mayúsculas, minúsculas y números',
|
|
144
|
+
'pattern.password.veryStrong': 'La contraseña debe tener al menos 10 caracteres y contener letras mayúsculas, minúsculas, números y caracteres especiales',
|
|
145
|
+
'pattern.emailOrPhone': 'Debe ser un correo electrónico o número de teléfono',
|
|
146
|
+
'pattern.usernameOrEmail': 'Debe ser un nombre de usuario o correo electrónico',
|
|
147
|
+
'pattern.httpOrHttps': 'Debe ser una URL que comience con http o https',
|
|
148
|
+
|
|
149
|
+
// oneOf
|
|
150
|
+
oneOf: '{{#label}} debe coincidir con uno de los siguientes tipos',
|
|
151
|
+
'oneOf.invalid': 'El valor de {{#label}} no coincide con ningún tipo permitido',
|
|
152
|
+
|
|
153
|
+
// Error fallback
|
|
154
|
+
UNKNOWN_ERROR: 'Error de validación desconocido',
|
|
155
|
+
CUSTOM_VALIDATION_FAILED: 'Validación fallida',
|
|
156
|
+
ASYNC_VALIDATION_NOT_SUPPORTED: 'La validación asíncrona no es compatible en validate() síncrono',
|
|
157
|
+
VALIDATE_MUST_BE_FUNCTION: 'validate debe ser una función',
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export default esES
|