Enum e limiti di validazione di string-format
Gli enum compatti usano status:{draft|published} (anche il punto e virgola separa le scelte). La stringa viene ripulita prima del controllo di appartenenza esatto, sensibile alle maiuscole. Un enum obbligatorio rifiuta un valore omesso o vuoto. Gli oggetti annidati usano {name:Type}; non sono dichiarazioni di enum.
In total5@0.0.19, Color accetta l'esadecimale #RGB, #RRGGBB e #RRGGBBAA; non accetta i nomi di colore CSS. Icon valida un modello di nome di classe, non la presenza della risorsa dell'icona. Base64 e Zip usano i validatori del framework: accettare un formato non è verificare il contenuto. Nel parser dello schema compatto di questa versione, JSON e IP non sono sottotipi riconosciuti e ricadono su semplici stringhe. JSON malformato e testo IP non valido vengono accettati. Lo schema JSON esplicito qui sotto imposta valori subtype nativi per abilitare questi controlli; non analizza una stringa JSON in un oggetto. Non usare SafeString al posto di parametri SQL vincolati o dell'escaping dell'output.
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);
}