twitst4tz

twitter statistics web application
Log | Files | Refs | README | LICENSE

required.js (12367B)


      1 'use strict';
      2 module.exports = function generate_required(it, $keyword, $ruleType) {
      3   var out = ' ';
      4   var $lvl = it.level;
      5   var $dataLvl = it.dataLevel;
      6   var $schema = it.schema[$keyword];
      7   var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
      8   var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
      9   var $breakOnError = !it.opts.allErrors;
     10   var $data = 'data' + ($dataLvl || '');
     11   var $valid = 'valid' + $lvl;
     12   var $isData = it.opts.$data && $schema && $schema.$data,
     13     $schemaValue;
     14   if ($isData) {
     15     out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
     16     $schemaValue = 'schema' + $lvl;
     17   } else {
     18     $schemaValue = $schema;
     19   }
     20   var $vSchema = 'schema' + $lvl;
     21   if (!$isData) {
     22     if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) {
     23       var $required = [];
     24       var arr1 = $schema;
     25       if (arr1) {
     26         var $property, i1 = -1,
     27           l1 = arr1.length - 1;
     28         while (i1 < l1) {
     29           $property = arr1[i1 += 1];
     30           var $propertySch = it.schema.properties[$property];
     31           if (!($propertySch && (it.opts.strictKeywords ? typeof $propertySch == 'object' && Object.keys($propertySch).length > 0 : it.util.schemaHasRules($propertySch, it.RULES.all)))) {
     32             $required[$required.length] = $property;
     33           }
     34         }
     35       }
     36     } else {
     37       var $required = $schema;
     38     }
     39   }
     40   if ($isData || $required.length) {
     41     var $currentErrorPath = it.errorPath,
     42       $loopRequired = $isData || $required.length >= it.opts.loopRequired,
     43       $ownProperties = it.opts.ownProperties;
     44     if ($breakOnError) {
     45       out += ' var missing' + ($lvl) + '; ';
     46       if ($loopRequired) {
     47         if (!$isData) {
     48           out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';
     49         }
     50         var $i = 'i' + $lvl,
     51           $propertyPath = 'schema' + $lvl + '[' + $i + ']',
     52           $missingProperty = '\' + ' + $propertyPath + ' + \'';
     53         if (it.opts._errorDataPathProperty) {
     54           it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);
     55         }
     56         out += ' var ' + ($valid) + ' = true; ';
     57         if ($isData) {
     58           out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';
     59         }
     60         out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined ';
     61         if ($ownProperties) {
     62           out += ' &&   Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';
     63         }
     64         out += '; if (!' + ($valid) + ') break; } ';
     65         if ($isData) {
     66           out += '  }  ';
     67         }
     68         out += '  if (!' + ($valid) + ') {   ';
     69         var $$outStack = $$outStack || [];
     70         $$outStack.push(out);
     71         out = ''; /* istanbul ignore else */
     72         if (it.createErrors !== false) {
     73           out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
     74           if (it.opts.messages !== false) {
     75             out += ' , message: \'';
     76             if (it.opts._errorDataPathProperty) {
     77               out += 'is a required property';
     78             } else {
     79               out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
     80             }
     81             out += '\' ';
     82           }
     83           if (it.opts.verbose) {
     84             out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
     85           }
     86           out += ' } ';
     87         } else {
     88           out += ' {} ';
     89         }
     90         var __err = out;
     91         out = $$outStack.pop();
     92         if (!it.compositeRule && $breakOnError) {
     93           /* istanbul ignore if */
     94           if (it.async) {
     95             out += ' throw new ValidationError([' + (__err) + ']); ';
     96           } else {
     97             out += ' validate.errors = [' + (__err) + ']; return false; ';
     98           }
     99         } else {
    100           out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    101         }
    102         out += ' } else { ';
    103       } else {
    104         out += ' if ( ';
    105         var arr2 = $required;
    106         if (arr2) {
    107           var $propertyKey, $i = -1,
    108             l2 = arr2.length - 1;
    109           while ($i < l2) {
    110             $propertyKey = arr2[$i += 1];
    111             if ($i) {
    112               out += ' || ';
    113             }
    114             var $prop = it.util.getProperty($propertyKey),
    115               $useData = $data + $prop;
    116             out += ' ( ( ' + ($useData) + ' === undefined ';
    117             if ($ownProperties) {
    118               out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
    119             }
    120             out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';
    121           }
    122         }
    123         out += ') {  ';
    124         var $propertyPath = 'missing' + $lvl,
    125           $missingProperty = '\' + ' + $propertyPath + ' + \'';
    126         if (it.opts._errorDataPathProperty) {
    127           it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;
    128         }
    129         var $$outStack = $$outStack || [];
    130         $$outStack.push(out);
    131         out = ''; /* istanbul ignore else */
    132         if (it.createErrors !== false) {
    133           out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
    134           if (it.opts.messages !== false) {
    135             out += ' , message: \'';
    136             if (it.opts._errorDataPathProperty) {
    137               out += 'is a required property';
    138             } else {
    139               out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
    140             }
    141             out += '\' ';
    142           }
    143           if (it.opts.verbose) {
    144             out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    145           }
    146           out += ' } ';
    147         } else {
    148           out += ' {} ';
    149         }
    150         var __err = out;
    151         out = $$outStack.pop();
    152         if (!it.compositeRule && $breakOnError) {
    153           /* istanbul ignore if */
    154           if (it.async) {
    155             out += ' throw new ValidationError([' + (__err) + ']); ';
    156           } else {
    157             out += ' validate.errors = [' + (__err) + ']; return false; ';
    158           }
    159         } else {
    160           out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    161         }
    162         out += ' } else { ';
    163       }
    164     } else {
    165       if ($loopRequired) {
    166         if (!$isData) {
    167           out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';
    168         }
    169         var $i = 'i' + $lvl,
    170           $propertyPath = 'schema' + $lvl + '[' + $i + ']',
    171           $missingProperty = '\' + ' + $propertyPath + ' + \'';
    172         if (it.opts._errorDataPathProperty) {
    173           it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);
    174         }
    175         if ($isData) {
    176           out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) {  var err =   '; /* istanbul ignore else */
    177           if (it.createErrors !== false) {
    178             out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
    179             if (it.opts.messages !== false) {
    180               out += ' , message: \'';
    181               if (it.opts._errorDataPathProperty) {
    182                 out += 'is a required property';
    183               } else {
    184                 out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
    185               }
    186               out += '\' ';
    187             }
    188             if (it.opts.verbose) {
    189               out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    190             }
    191             out += ' } ';
    192           } else {
    193             out += ' {} ';
    194           }
    195           out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { ';
    196         }
    197         out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined ';
    198         if ($ownProperties) {
    199           out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';
    200         }
    201         out += ') {  var err =   '; /* istanbul ignore else */
    202         if (it.createErrors !== false) {
    203           out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
    204           if (it.opts.messages !== false) {
    205             out += ' , message: \'';
    206             if (it.opts._errorDataPathProperty) {
    207               out += 'is a required property';
    208             } else {
    209               out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
    210             }
    211             out += '\' ';
    212           }
    213           if (it.opts.verbose) {
    214             out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    215           }
    216           out += ' } ';
    217         } else {
    218           out += ' {} ';
    219         }
    220         out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';
    221         if ($isData) {
    222           out += '  }  ';
    223         }
    224       } else {
    225         var arr3 = $required;
    226         if (arr3) {
    227           var $propertyKey, i3 = -1,
    228             l3 = arr3.length - 1;
    229           while (i3 < l3) {
    230             $propertyKey = arr3[i3 += 1];
    231             var $prop = it.util.getProperty($propertyKey),
    232               $missingProperty = it.util.escapeQuotes($propertyKey),
    233               $useData = $data + $prop;
    234             if (it.opts._errorDataPathProperty) {
    235               it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);
    236             }
    237             out += ' if ( ' + ($useData) + ' === undefined ';
    238             if ($ownProperties) {
    239               out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
    240             }
    241             out += ') {  var err =   '; /* istanbul ignore else */
    242             if (it.createErrors !== false) {
    243               out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
    244               if (it.opts.messages !== false) {
    245                 out += ' , message: \'';
    246                 if (it.opts._errorDataPathProperty) {
    247                   out += 'is a required property';
    248                 } else {
    249                   out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
    250                 }
    251                 out += '\' ';
    252               }
    253               if (it.opts.verbose) {
    254                 out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    255               }
    256               out += ' } ';
    257             } else {
    258               out += ' {} ';
    259             }
    260             out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';
    261           }
    262         }
    263       }
    264     }
    265     it.errorPath = $currentErrorPath;
    266   } else if ($breakOnError) {
    267     out += ' if (true) {';
    268   }
    269   return out;
    270 }