Enums y límites de validación en formato de string
Los enums compactos usan status:{draft|published} (el punto y coma también separa las opciones). La cadena se recorta antes de comprobar la pertenencia exacta, sensible a mayúsculas. Un enum obligatorio rechaza un valor omitido o vacío. Los objetos anidados usan {name:Type}; no son declaraciones de enum.
En total5@0.0.19, Color acepta hexadecimal #RGB, #RRGGBB y #RRGGBBAA; no acepta nombres de color CSS. Icon valida un patrón de nombre de clase, no la presencia del recurso del icono. Base64 y Zip usan los validadores del framework: aceptar un formato no es verificar el contenido. En el parser de esquema compacto de esta versión, JSON e IP no son subtipos reconocidos y se convierten en cadenas simples. Se aceptan JSON mal formado y texto de IP no válido. El esquema JSON explícito de abajo fija valores subtype nativos para activar estas comprobaciones; no interpreta una cadena JSON como objeto. No uses SafeString en lugar de parámetros SQL enlazados o de escape de la salida.
var schema = NEWSCHEMA('FormatBoundaries', '*status:{draft|published},*color:Color,*blob:Base64,*zip:Zip,*icon:Icon,*document:JSON,*address:IP');
var explicit = Total.newjsonschema('ExplicitFormats', { $id: 'ExplicitFormats', type: 'object', required: ['document','address'], properties: { document: { type: 'string', subtype: 'json' }, address: { type: 'string', subtype: 'ip' } } });
exports.install = function() {
ROUTE('POST /explicit/ @json', function($) {
var result = explicit.transform($.body);
if (result.error) { $.response.status = 400; $.json({ error: 'invalid format' }); }
else $.json(result.response);
});
ROUTE('POST /formats/ @json', formats);
};
function formats($) {
var result = schema.transform($.body);
if (result.error) {
$.response.status = 400;
$.json({ error: 'invalid format' });
} else
$.json(result.response);
}