twitst4tz

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

ref.js (4711B)


      1 'use strict';
      2 module.exports = function generate_ref(it, $keyword, $ruleType) {
      3   var out = ' ';
      4   var $lvl = it.level;
      5   var $dataLvl = it.dataLevel;
      6   var $schema = it.schema[$keyword];
      7   var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
      8   var $breakOnError = !it.opts.allErrors;
      9   var $data = 'data' + ($dataLvl || '');
     10   var $valid = 'valid' + $lvl;
     11   var $async, $refCode;
     12   if ($schema == '#' || $schema == '#/') {
     13     if (it.isRoot) {
     14       $async = it.async;
     15       $refCode = 'validate';
     16     } else {
     17       $async = it.root.schema.$async === true;
     18       $refCode = 'root.refVal[0]';
     19     }
     20   } else {
     21     var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot);
     22     if ($refVal === undefined) {
     23       var $message = it.MissingRefError.message(it.baseId, $schema);
     24       if (it.opts.missingRefs == 'fail') {
     25         it.logger.error($message);
     26         var $$outStack = $$outStack || [];
     27         $$outStack.push(out);
     28         out = ''; /* istanbul ignore else */
     29         if (it.createErrors !== false) {
     30           out += ' { keyword: \'' + ('$ref') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { ref: \'' + (it.util.escapeQuotes($schema)) + '\' } ';
     31           if (it.opts.messages !== false) {
     32             out += ' , message: \'can\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\' ';
     33           }
     34           if (it.opts.verbose) {
     35             out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
     36           }
     37           out += ' } ';
     38         } else {
     39           out += ' {} ';
     40         }
     41         var __err = out;
     42         out = $$outStack.pop();
     43         if (!it.compositeRule && $breakOnError) {
     44           /* istanbul ignore if */
     45           if (it.async) {
     46             out += ' throw new ValidationError([' + (__err) + ']); ';
     47           } else {
     48             out += ' validate.errors = [' + (__err) + ']; return false; ';
     49           }
     50         } else {
     51           out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
     52         }
     53         if ($breakOnError) {
     54           out += ' if (false) { ';
     55         }
     56       } else if (it.opts.missingRefs == 'ignore') {
     57         it.logger.warn($message);
     58         if ($breakOnError) {
     59           out += ' if (true) { ';
     60         }
     61       } else {
     62         throw new it.MissingRefError(it.baseId, $schema, $message);
     63       }
     64     } else if ($refVal.inline) {
     65       var $it = it.util.copy(it);
     66       $it.level++;
     67       var $nextValid = 'valid' + $it.level;
     68       $it.schema = $refVal.schema;
     69       $it.schemaPath = '';
     70       $it.errSchemaPath = $schema;
     71       var $code = it.validate($it).replace(/validate\.schema/g, $refVal.code);
     72       out += ' ' + ($code) + ' ';
     73       if ($breakOnError) {
     74         out += ' if (' + ($nextValid) + ') { ';
     75       }
     76     } else {
     77       $async = $refVal.$async === true || (it.async && $refVal.$async !== false);
     78       $refCode = $refVal.code;
     79     }
     80   }
     81   if ($refCode) {
     82     var $$outStack = $$outStack || [];
     83     $$outStack.push(out);
     84     out = '';
     85     if (it.opts.passContext) {
     86       out += ' ' + ($refCode) + '.call(this, ';
     87     } else {
     88       out += ' ' + ($refCode) + '( ';
     89     }
     90     out += ' ' + ($data) + ', (dataPath || \'\')';
     91     if (it.errorPath != '""') {
     92       out += ' + ' + (it.errorPath);
     93     }
     94     var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',
     95       $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';
     96     out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ', rootData)  ';
     97     var __callValidate = out;
     98     out = $$outStack.pop();
     99     if ($async) {
    100       if (!it.async) throw new Error('async schema referenced by sync schema');
    101       if ($breakOnError) {
    102         out += ' var ' + ($valid) + '; ';
    103       }
    104       out += ' try { await ' + (__callValidate) + '; ';
    105       if ($breakOnError) {
    106         out += ' ' + ($valid) + ' = true; ';
    107       }
    108       out += ' } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ';
    109       if ($breakOnError) {
    110         out += ' ' + ($valid) + ' = false; ';
    111       }
    112       out += ' } ';
    113       if ($breakOnError) {
    114         out += ' if (' + ($valid) + ') { ';
    115       }
    116     } else {
    117       out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } ';
    118       if ($breakOnError) {
    119         out += ' else { ';
    120       }
    121     }
    122   }
    123   return out;
    124 }