@e22m4u/js-repository 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. package/README.md +6 -5
  2. package/docs/assets/search.js +1 -1
  3. package/docs/classes/ModelDataValidator.html +2 -2
  4. package/docs/index.html +7 -5
  5. package/docs/types/PropertyValidateOptions.html +1 -1
  6. package/docs/types/PropertyValidator.html +2 -2
  7. package/docs/types/PropertyValidatorContext.html +2 -2
  8. package/package.json +1 -1
  9. package/src/adapter/decorator/data-validation-decorator.js +10 -18
  10. package/src/adapter/decorator/data-validation-decorator.spec.js +0 -40
  11. package/src/definition/model/model-data-validator.d.ts +1 -5
  12. package/src/definition/model/model-data-validator.js +44 -49
  13. package/src/definition/model/model-data-validator.spec.js +1794 -1840
  14. package/src/definition/model/properties/property-validator/builtin/index.d.ts +1 -0
  15. package/src/definition/model/properties/property-validator/builtin/index.js +1 -0
  16. package/src/definition/model/properties/property-validator/builtin/max-length-validator.spec.js +29 -1
  17. package/src/definition/model/properties/property-validator/builtin/min-length-validator.spec.js +29 -1
  18. package/src/definition/model/properties/property-validator/builtin/regexp-validator.d.ts +6 -0
  19. package/src/definition/model/properties/property-validator/builtin/regexp-validator.js +30 -0
  20. package/src/definition/model/properties/property-validator/builtin/regexp-validator.spec.js +95 -0
  21. package/src/definition/model/properties/property-validator/property-validator-registry.js +2 -0
  22. package/src/definition/model/properties/property-validator/property-validator.d.ts +1 -6
@@ -16,9 +16,9 @@ export class ModelDataValidator extends Service {
16
16
  * @param {string} modelName
17
17
  * @param {object} modelData
18
18
  * @param {boolean} isPartial
19
- * @returns {Promise<void>}
19
+ * @returns {undefined}
20
20
  */
21
- async validate(modelName, modelData, isPartial = false) {
21
+ validate(modelName, modelData, isPartial = false) {
22
22
  if (!isPureObject(modelData))
23
23
  throw new InvalidArgumentError(
24
24
  'The data of the model %v should be an Object, but %v given.',
@@ -30,16 +30,16 @@ export class ModelDataValidator extends Service {
30
30
  ModelDefinitionUtils,
31
31
  ).getPropertiesDefinitionInBaseModelHierarchy(modelName);
32
32
  const propNames = Object.keys(isPartial ? modelData : propDefs);
33
- for (const propName of propNames) {
33
+ propNames.forEach(propName => {
34
34
  const propDef = propDefs[propName];
35
- if (!propDef) continue;
36
- await this._validatePropertyValue(
35
+ if (!propDef) return;
36
+ this._validatePropertyValue(
37
37
  modelName,
38
38
  propName,
39
39
  propDef,
40
40
  modelData[propName],
41
41
  );
42
- }
42
+ });
43
43
  }
44
44
 
45
45
  /**
@@ -49,9 +49,9 @@ export class ModelDataValidator extends Service {
49
49
  * @param {string} propName
50
50
  * @param {string|object} propDef
51
51
  * @param {*} propValue
52
- * @returns {Promise<void>}
52
+ * @returns {undefined}
53
53
  */
54
- async _validatePropertyValue(modelName, propName, propDef, propValue) {
54
+ _validatePropertyValue(modelName, propName, propDef, propValue) {
55
55
  // undefined and null
56
56
  if (propValue == null) {
57
57
  const isRequired =
@@ -64,15 +64,10 @@ export class ModelDataValidator extends Service {
64
64
  propValue,
65
65
  );
66
66
  }
67
- // DataType
68
- await this._validatePropertyValueType(
69
- modelName,
70
- propName,
71
- propDef,
72
- propValue,
73
- );
74
- // PropertyValidators
75
- await this._validateByPropertyValidators(
67
+ // Property type.
68
+ this._validateValueByPropertyType(modelName, propName, propDef, propValue);
69
+ // Property validators.
70
+ this._validateValueByPropertyValidators(
76
71
  modelName,
77
72
  propName,
78
73
  propDef,
@@ -81,16 +76,16 @@ export class ModelDataValidator extends Service {
81
76
  }
82
77
 
83
78
  /**
84
- * Validate value type.
79
+ * Validate value by property type.
85
80
  *
86
81
  * @param {string} modelName
87
82
  * @param {string} propName
88
83
  * @param {string|object} propDef
89
84
  * @param {*} propValue
90
85
  * @param {boolean} isArrayValue
91
- * @returns {Promise<void>}
86
+ * @returns {undefined}
92
87
  */
93
- async _validatePropertyValueType(
88
+ _validateValueByPropertyType(
94
89
  modelName,
95
90
  propName,
96
91
  propDef,
@@ -138,8 +133,8 @@ export class ModelDataValidator extends Service {
138
133
  // ARRAY
139
134
  case DataType.ARRAY:
140
135
  if (!Array.isArray(propValue)) throw createError('an Array');
141
- const arrayItemsValidationPromises = propValue.map(async value =>
142
- this._validatePropertyValueType(
136
+ propValue.forEach(value =>
137
+ this._validateValueByPropertyType(
143
138
  modelName,
144
139
  propName,
145
140
  propDef,
@@ -147,29 +142,28 @@ export class ModelDataValidator extends Service {
147
142
  true,
148
143
  ),
149
144
  );
150
- await Promise.all(arrayItemsValidationPromises);
151
145
  break;
152
146
  // OBJECT
153
147
  case DataType.OBJECT:
154
148
  if (!isPureObject(propValue)) throw createError('an Object');
155
149
  if (typeof propDef === 'object' && propDef.model)
156
- await this.validate(propDef.model, propValue);
150
+ this.validate(propDef.model, propValue);
157
151
  break;
158
152
  }
159
153
  }
160
154
 
161
155
  /**
162
- * Validate by property validators.
156
+ * Validate value by property validators.
163
157
  *
164
158
  * @param {string} modelName
165
159
  * @param {string} propName
166
160
  * @param {string|object} propDef
167
161
  * @param {*} propValue
168
- * @returns {Promise<void>}
162
+ * @returns {undefined}
169
163
  */
170
- async _validateByPropertyValidators(modelName, propName, propDef, propValue) {
164
+ _validateValueByPropertyValidators(modelName, propName, propDef, propValue) {
171
165
  if (typeof propDef === 'string' || propDef.validate == null) return;
172
- const options = propDef.validate;
166
+ const validateDef = propDef.validate;
173
167
  const propertyValidatorRegistry = this.getService(
174
168
  PropertyValidatorRegistry,
175
169
  );
@@ -182,30 +176,31 @@ export class ModelDataValidator extends Service {
182
176
  propValue,
183
177
  validatorName,
184
178
  );
185
- const container = this.container;
186
- const validateBy = async (validatorName, validatorOptions = undefined) => {
179
+ const validateBy = (validatorName, validatorOptions = undefined) => {
187
180
  const validator = propertyValidatorRegistry.getValidator(validatorName);
188
- const context = {validatorName, modelName, propName, propDef, container};
189
- const valid = await validator(propValue, validatorOptions, context);
190
- if (valid !== true) throw createError(validatorName);
181
+ const context = {validatorName, modelName, propName};
182
+ const valid = validator(propValue, validatorOptions, context);
183
+ if (valid instanceof Promise) {
184
+ throw new InvalidArgumentError(
185
+ 'Asynchronous property validators are not supported, ' +
186
+ 'but the property validator %v returns a Promise.',
187
+ validatorName,
188
+ );
189
+ } else if (valid !== true) {
190
+ throw createError(validatorName);
191
+ }
191
192
  };
192
- if (options && typeof options === 'string') {
193
- await validateBy(options);
194
- } else if (Array.isArray(options)) {
195
- const validationPromises = options.map(validatorName =>
196
- validateBy(validatorName),
197
- );
198
- await Promise.all(validationPromises);
199
- } else if (options !== null && typeof options === 'object') {
200
- const validationPromises = [];
201
- Object.keys(options).forEach(validatorName => {
202
- if (Object.prototype.hasOwnProperty.call(options, validatorName)) {
203
- const validatorOptions = options[validatorName];
204
- const validationPromise = validateBy(validatorName, validatorOptions);
205
- validationPromises.push(validationPromise);
193
+ if (validateDef && typeof validateDef === 'string') {
194
+ validateBy(validateDef);
195
+ } else if (Array.isArray(validateDef)) {
196
+ validateDef.forEach(validatorName => validateBy(validatorName));
197
+ } else if (validateDef !== null && typeof validateDef === 'object') {
198
+ Object.keys(validateDef).forEach(validatorName => {
199
+ if (Object.prototype.hasOwnProperty.call(validateDef, validatorName)) {
200
+ const validatorOptions = validateDef[validatorName];
201
+ validateBy(validatorName, validatorOptions);
206
202
  }
207
203
  });
208
- await Promise.all(validationPromises);
209
204
  } else {
210
205
  throw new InvalidArgumentError(
211
206
  'The provided option "validate" of the property %v in the model %v ' +
@@ -213,7 +208,7 @@ export class ModelDataValidator extends Service {
213
208
  'but %v given.',
214
209
  propName,
215
210
  modelName,
216
- options,
211
+ validateDef,
217
212
  );
218
213
  }
219
214
  }