181 lines
4.4 KiB
JavaScript
181 lines
4.4 KiB
JavaScript
|
//>>built
|
||
|
define("dojox/json/schema",["dojo/_base/kernel","dojox","dojo/_base/array"],function(_1,_2){
|
||
|
_1.getObject("json.schema",true,_2);
|
||
|
_2.json.schema.validate=function(_3,_4){
|
||
|
return this._validate(_3,_4,false);
|
||
|
};
|
||
|
_2.json.schema.checkPropertyChange=function(_5,_6,_7){
|
||
|
return this._validate(_5,_6,_7||"property");
|
||
|
};
|
||
|
_2.json.schema.mustBeValid=function(_8){
|
||
|
if(!_8.valid){
|
||
|
throw new TypeError(_1.map(_8.errors,function(_9){
|
||
|
return "for property "+_9.property+": "+_9.message;
|
||
|
}).join(", "));
|
||
|
}
|
||
|
};
|
||
|
_2.json.schema._validate=function(_a,_b,_c){
|
||
|
var _d=[];
|
||
|
function _e(_f,_10,_11,i){
|
||
|
var l;
|
||
|
_11+=_11?typeof i=="number"?"["+i+"]":typeof i=="undefined"?"":"."+i:i;
|
||
|
function _12(_13){
|
||
|
_d.push({property:_11,message:_13});
|
||
|
};
|
||
|
if((typeof _10!="object"||_10 instanceof Array)&&(_11||typeof _10!="function")){
|
||
|
if(typeof _10=="function"){
|
||
|
if(!(Object(_f) instanceof _10)){
|
||
|
_12("is not an instance of the class/constructor "+_10.name);
|
||
|
}
|
||
|
}else{
|
||
|
if(_10){
|
||
|
_12("Invalid schema/property definition "+_10);
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
if(_c&&_10.readonly){
|
||
|
_12("is a readonly field, it can not be changed");
|
||
|
}
|
||
|
if(_10["extends"]){
|
||
|
_e(_f,_10["extends"],_11,i);
|
||
|
}
|
||
|
function _14(_15,_16){
|
||
|
if(_15){
|
||
|
if(typeof _15=="string"&&_15!="any"&&(_15=="null"?_16!==null:typeof _16!=_15)&&!(_16 instanceof Array&&_15=="array")&&!(_15=="integer"&&_16%1===0)){
|
||
|
return [{property:_11,message:(typeof _16)+" value found, but a "+_15+" is required"}];
|
||
|
}
|
||
|
if(_15 instanceof Array){
|
||
|
var _17=[];
|
||
|
for(var j=0;j<_15.length;j++){
|
||
|
if(!(_17=_14(_15[j],_16)).length){
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if(_17.length){
|
||
|
return _17;
|
||
|
}
|
||
|
}else{
|
||
|
if(typeof _15=="object"){
|
||
|
var _18=_d;
|
||
|
_d=[];
|
||
|
_e(_16,_15,_11);
|
||
|
var _19=_d;
|
||
|
_d=_18;
|
||
|
return _19;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return [];
|
||
|
};
|
||
|
if(_f===undefined){
|
||
|
if(!_10.optional){
|
||
|
_12("is missing and it is not optional");
|
||
|
}
|
||
|
}else{
|
||
|
_d=_d.concat(_14(_10.type,_f));
|
||
|
if(_10.disallow&&!_14(_10.disallow,_f).length){
|
||
|
_12(" disallowed value was matched");
|
||
|
}
|
||
|
if(_f!==null){
|
||
|
if(_f instanceof Array){
|
||
|
if(_10.items){
|
||
|
if(_10.items instanceof Array){
|
||
|
for(i=0,l=_f.length;i<l;i++){
|
||
|
_d.concat(_e(_f[i],_10.items[i],_11,i));
|
||
|
}
|
||
|
}else{
|
||
|
for(i=0,l=_f.length;i<l;i++){
|
||
|
_d.concat(_e(_f[i],_10.items,_11,i));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(_10.minItems&&_f.length<_10.minItems){
|
||
|
_12("There must be a minimum of "+_10.minItems+" in the array");
|
||
|
}
|
||
|
if(_10.maxItems&&_f.length>_10.maxItems){
|
||
|
_12("There must be a maximum of "+_10.maxItems+" in the array");
|
||
|
}
|
||
|
}else{
|
||
|
if(_10.properties){
|
||
|
_d.concat(_1a(_f,_10.properties,_11,_10.additionalProperties));
|
||
|
}
|
||
|
}
|
||
|
if(_10.pattern&&typeof _f=="string"&&!_f.match(_10.pattern)){
|
||
|
_12("does not match the regex pattern "+_10.pattern);
|
||
|
}
|
||
|
if(_10.maxLength&&typeof _f=="string"&&_f.length>_10.maxLength){
|
||
|
_12("may only be "+_10.maxLength+" characters long");
|
||
|
}
|
||
|
if(_10.minLength&&typeof _f=="string"&&_f.length<_10.minLength){
|
||
|
_12("must be at least "+_10.minLength+" characters long");
|
||
|
}
|
||
|
if(typeof _10.minimum!==undefined&&typeof _f==typeof _10.minimum&&_10.minimum>_f){
|
||
|
_12("must have a minimum value of "+_10.minimum);
|
||
|
}
|
||
|
if(typeof _10.maximum!==undefined&&typeof _f==typeof _10.maximum&&_10.maximum<_f){
|
||
|
_12("must have a maximum value of "+_10.maximum);
|
||
|
}
|
||
|
if(_10["enum"]){
|
||
|
var _1b=_10["enum"];
|
||
|
l=_1b.length;
|
||
|
var _1c;
|
||
|
for(var j=0;j<l;j++){
|
||
|
if(_1b[j]===_f){
|
||
|
_1c=1;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if(!_1c){
|
||
|
_12("does not have a value in the enumeration "+_1b.join(", "));
|
||
|
}
|
||
|
}
|
||
|
if(typeof _10.maxDecimal=="number"&&(_f.toString().match(new RegExp("\\.[0-9]{"+(_10.maxDecimal+1)+",}")))){
|
||
|
_12("may only have "+_10.maxDecimal+" digits of decimal places");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
};
|
||
|
function _1a(_1d,_1e,_1f,_20){
|
||
|
if(typeof _1e=="object"){
|
||
|
if(typeof _1d!="object"||_1d instanceof Array){
|
||
|
_d.push({property:_1f,message:"an object is required"});
|
||
|
}
|
||
|
for(var i in _1e){
|
||
|
if(_1e.hasOwnProperty(i)&&!(i.charAt(0)=="_"&&i.charAt(1)=="_")){
|
||
|
var _21=_1d[i];
|
||
|
var _22=_1e[i];
|
||
|
_e(_21,_22,_1f,i);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
for(i in _1d){
|
||
|
if(_1d.hasOwnProperty(i)&&!(i.charAt(0)=="_"&&i.charAt(1)=="_")&&_1e&&!_1e[i]&&_20===false){
|
||
|
_d.push({property:_1f,message:(typeof _21)+"The property "+i+" is not defined in the schema and the schema does not allow additional properties"});
|
||
|
}
|
||
|
var _23=_1e&&_1e[i]&&_1e[i].requires;
|
||
|
if(_23&&!(_23 in _1d)){
|
||
|
_d.push({property:_1f,message:"the presence of the property "+i+" requires that "+_23+" also be present"});
|
||
|
}
|
||
|
_21=_1d[i];
|
||
|
if(_1e&&typeof _1e=="object"&&!(i in _1e)){
|
||
|
_e(_21,_20,_1f,i);
|
||
|
}
|
||
|
if(!_c&&_21&&_21.$schema){
|
||
|
_d=_d.concat(_e(_21,_21.$schema,_1f,i));
|
||
|
}
|
||
|
}
|
||
|
return _d;
|
||
|
};
|
||
|
if(_b){
|
||
|
_e(_a,_b,"",_c||"");
|
||
|
}
|
||
|
if(!_c&&_a&&_a.$schema){
|
||
|
_e(_a,_a.$schema,"","");
|
||
|
}
|
||
|
return {valid:!_d.length,errors:_d};
|
||
|
};
|
||
|
return _2.json.schema;
|
||
|
});
|