Enums en string-format validatiegrens
Compacte enums gebruiken status:{draft|published} (ook een puntkomma scheidt de keuzes). De string wordt getrimd vóór de exacte, hoofdlettergevoelige lidmaatschapscontrole. Een vereiste enum weigert een weggelaten of lege waarde. Geneste objecten gebruiken {name:Type}; het zijn geen enumdeclaraties.
In total5@0.0.19 accepteert Color hexadecimaal #RGB, #RRGGBB en #RRGGBBAA; CSS-kleurnamen worden niet geaccepteerd. Icon valideert een klassenaampatroon, niet de aanwezigheid van het icoonasset. Base64 en Zip gebruiken de validators van het framework: het accepteren van een formaat is geen inhoudsverificatie. In de compacte-schemaparser van deze versie zijn JSON en IP geen herkende subtypes en vallen ze terug op gewone strings. Misvormde JSON en ongeldige IP-tekst worden geaccepteerd. Het expliciete JSON-schema hieronder stelt native subtype-waarden in om deze controles in te schakelen; het parseert geen JSON-string tot een object. Gebruik SafeString niet in plaats van gebonden SQL-parameters of uitvoer-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);
}