Enums e limites de validação de formato string
Os enums compactos usam status:{draft|published} (o ponto e vírgula também separa as opções). A cadeia é aparada antes da verificação de pertença exata, sensível a maiúsculas. Um enum obrigatório rejeita um valor omitido ou vazio. Os objetos aninhados usam {name:Type}; não são declarações de enum.
No total5@0.0.19, Color aceita hexadecimal #RGB, #RRGGBB e #RRGGBBAA; não aceita nomes de cor CSS. Icon valida um padrão de nome de classe, não a presença do recurso do ícone. Base64 e Zip usam os validadores do framework: aceitar um formato não é verificar o conteúdo. No parser de esquema compacto desta versão, JSON e IP não são subtipos reconhecidos e passam a cadeias simples. JSON mal formado e texto de IP inválido são aceites. O esquema JSON explícito abaixo define valores subtype nativos para ativar estas verificações; não interpreta uma cadeia JSON como objeto. Não use SafeString em vez de parâmetros SQL vinculados ou de escape da saída.
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);
}