Enums och stringformat valideringsgränser
Kompakta enums använder status:{draft|published} (även semikolon skiljer valen åt). Strängen trimmas före den exakta, skiftlägeskänsliga medlemskapskontrollen. En obligatorisk enum avvisar ett utelämnat eller tomt värde. Nästlade objekt använder {name:Type}; de är inte enum-deklarationer.
I total5@0.0.19 accepterar Color hexadecimalt #RGB, #RRGGBB och #RRGGBBAA; den accepterar inte CSS-färgnamn. Icon validerar ett klassnamnsmönster, inte att ikonresursen finns. Base64 och Zip använder ramverkets validerare: att acceptera ett format är inte innehållsverifiering. I den kompakta schemaparsern i den här versionen är JSON och IP inte kända subtyper och faller tillbaka på vanliga strängar. Felaktig JSON och ogiltig IP-text accepteras. Det uttryckliga JSON-schemat nedan sätter inbyggda subtype-värden för att aktivera dessa kontroller; det tolkar inte en JSON-sträng till ett objekt. Använd inte SafeString i stället för bundna SQL-parametrar eller utdata-escaping.
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);
}