Projekt

Obecné

Profil

Stáhnout (12.1 KB) Statistiky
| Větev: | Revize:
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
}
(25-25/27)