|
|
@@ -122,15 +122,24 @@ const {DataValidator} = require('@e22m4u/js-data-schema');
|
|
|
```js
|
|
|
import {DataValidator, DataType} from '@e22m4u/js-data-schema';
|
|
|
|
|
|
+// определение схемы
|
|
|
const schema = {
|
|
|
- type: DataType.STRING
|
|
|
+ type: DataType.STRING, // <= только строки
|
|
|
};
|
|
|
|
|
|
+// создание экземпляра сервиса
|
|
|
const validator = new DataValidator();
|
|
|
+
|
|
|
+// значение "str" соответствует схеме
|
|
|
validator.validate('str', schema); // OK
|
|
|
-validator.validate(undefined, schema); // OK (пустое значение)
|
|
|
|
|
|
+// undefined допускается (нет опции "required")
|
|
|
+validator.validate(undefined, schema); // OK
|
|
|
+
|
|
|
+// 10 не является строкой
|
|
|
validator.validate(10, schema); // error: DataValidationError
|
|
|
+
|
|
|
+// true не является строкой
|
|
|
validator.validate(true, schema); // error: DataValidationError
|
|
|
```
|
|
|
|
|
|
@@ -139,16 +148,24 @@ validator.validate(true, schema); // error: DataValidationError
|
|
|
```js
|
|
|
import {DataValidator, DataType} from '@e22m4u/js-data-schema';
|
|
|
|
|
|
+const validator = new DataValidator();
|
|
|
+
|
|
|
+// определение схемы
|
|
|
const schema = {
|
|
|
- type: DataType.NUMBER,
|
|
|
- required: true, // <= исключает 0, undefined и null (для типа number)
|
|
|
+ type: DataType.NUMBER, // только числа
|
|
|
+ required: true, // <= исключает undefined, null
|
|
|
};
|
|
|
|
|
|
-const validator = new DataValidator();
|
|
|
+// значение 10 соответствует схеме
|
|
|
validator.validate(10, schema); // OK
|
|
|
|
|
|
+// undefined не допускается (опция "required")
|
|
|
+validator.validate(undefined, schema); // error: DataValidationError
|
|
|
+
|
|
|
+// 'str' не является числом
|
|
|
validator.validate('str', schema); // error: DataValidationError
|
|
|
-validator.validate(0, schema); // error: DataValidationError
|
|
|
+
|
|
|
+// true не является числом
|
|
|
validator.validate(true, schema); // error: DataValidationError
|
|
|
```
|
|
|
|
|
|
@@ -157,6 +174,9 @@ validator.validate(true, schema); // error: DataValidationError
|
|
|
```js
|
|
|
import {DataValidator, DataType} from '@e22m4u/js-data-schema';
|
|
|
|
|
|
+const validator = new DataValidator();
|
|
|
+
|
|
|
+// определение схемы массива
|
|
|
const schema = {
|
|
|
type: DataType.ARRAY,
|
|
|
items: {
|
|
|
@@ -164,12 +184,19 @@ const schema = {
|
|
|
},
|
|
|
};
|
|
|
|
|
|
-const validator = new DataValidator();
|
|
|
+// элементы массива соответствуют схеме
|
|
|
validator.validate([1, 2, 3], schema); // OK
|
|
|
+
|
|
|
+// пустой массив также допускается
|
|
|
validator.validate([], schema); // OK
|
|
|
|
|
|
+// 'str' не является массивом
|
|
|
validator.validate('str', schema); // error: DataValidationError
|
|
|
+
|
|
|
+// элементы массива не соответствуют схеме (опция "items")
|
|
|
validator.validate(['a', 'b'], schema); // error: DataValidationError
|
|
|
+
|
|
|
+// объект не является массивом
|
|
|
validator.validate({foo: 'bar'}, schema); // error: DataValidationError
|
|
|
```
|
|
|
|
|
|
@@ -178,39 +205,50 @@ validator.validate({foo: 'bar'}, schema); // error: DataValidationError
|
|
|
```js
|
|
|
import {DataValidator, DataType} from '@e22m4u/js-data-schema';
|
|
|
|
|
|
+const validator = new DataValidator();
|
|
|
+
|
|
|
+// определение схемы объекта
|
|
|
const schema = {
|
|
|
type: DataType.OBJECT,
|
|
|
properties: {
|
|
|
- foo: {
|
|
|
- type: DataType.STRING,
|
|
|
+ foo: { // схема свойства "foo"
|
|
|
+ type: DataType.STRING, // допускает только строки
|
|
|
+ required: true, // является обязательным
|
|
|
},
|
|
|
- bar: {
|
|
|
+ bar: { // схема свойства "bar"
|
|
|
type: DataType.NUMBER,
|
|
|
},
|
|
|
},
|
|
|
};
|
|
|
|
|
|
-const validator = new DataValidator();
|
|
|
+// свойства объекта соответствуют схеме
|
|
|
validator.validate({foo: 'str', bar: 10}, schema); // OK
|
|
|
-validator.validate({}, schema); // OK
|
|
|
|
|
|
+// обязательное свойство "foo" присутствует
|
|
|
+validator.validate({foo: 'str'}, schema); // OK
|
|
|
+
|
|
|
+// значение свойства "foo" не является строкой
|
|
|
validator.validate({foo: true}, schema); // error: DataValidationError
|
|
|
+
|
|
|
+// массив не является объектом
|
|
|
validator.validate([1, 2, 3], schema); // error: DataValidationError
|
|
|
```
|
|
|
|
|
|
### Парсинг данных
|
|
|
|
|
|
-Приведение строки к числу.
|
|
|
+Приведение типа данных.
|
|
|
|
|
|
```js
|
|
|
import {DataParser, DataType} from '@e22m4u/js-data-schema';
|
|
|
|
|
|
const parser = new DataParser();
|
|
|
|
|
|
+// определение схемы
|
|
|
const schema = {
|
|
|
- type: DataType.NUMBER
|
|
|
+ type: DataType.NUMBER, // только числа
|
|
|
};
|
|
|
|
|
|
+// приведение строки к числу
|
|
|
const result = parser.parse('10', schema);
|
|
|
console.log(result); // 10
|
|
|
|
|
|
@@ -225,13 +263,15 @@ import {DataParser, DataType} from '@e22m4u/js-data-schema';
|
|
|
|
|
|
const parser = new DataParser();
|
|
|
|
|
|
+// определение схемы массива
|
|
|
const schema = {
|
|
|
type: DataType.ARRAY,
|
|
|
- items: {
|
|
|
- type: DataType.NUMBER, // тип элементов
|
|
|
+ items: { // схема элементов
|
|
|
+ type: DataType.NUMBER, // только числа
|
|
|
},
|
|
|
};
|
|
|
|
|
|
+// приведение строки к массиву
|
|
|
const result = parser.parse('[1, 2, 3]', schema);
|
|
|
console.log(result);
|
|
|
// [1, 2, 3]
|
|
|
@@ -247,18 +287,21 @@ import {DataParser, DataType} from '@e22m4u/js-data-schema';
|
|
|
|
|
|
const parser = new DataParser();
|
|
|
|
|
|
+// определение схемы объекта
|
|
|
const schema = {
|
|
|
type: DataType.OBJECT,
|
|
|
properties: {
|
|
|
- foo: {
|
|
|
- type: DataType.STRING,
|
|
|
+ foo: { // схема свойства "foo"
|
|
|
+ type: DataType.STRING, // допускает только строки
|
|
|
+ required: true, // является обязательным
|
|
|
},
|
|
|
- bar: {
|
|
|
+ bar: { // схема свойства "bar"
|
|
|
type: DataType.NUMBER,
|
|
|
},
|
|
|
},
|
|
|
};
|
|
|
|
|
|
+// приведение строки к объекту
|
|
|
const result = parser.parse(
|
|
|
'{"foo": "str", "bar": 10}',
|
|
|
schema,
|
|
|
@@ -269,8 +312,11 @@ console.log(result);
|
|
|
// "bar": 10
|
|
|
// }
|
|
|
|
|
|
-// значения полей не соответствуют схеме
|
|
|
-parser.parse('{"foo": true, "bar": "str"}', schema); // error: DataParsingError
|
|
|
+// обязательное свойство "foo" отсутствует
|
|
|
+parser.parse('{"bar": 10}', schema); // error: DataParsingError
|
|
|
+
|
|
|
+// значение свойства "foo" не является строкой
|
|
|
+parser.parse('{"foo": 10}', schema); // error: DataParsingError
|
|
|
```
|
|
|
|
|
|
## Пустые значения
|
|
|
@@ -281,12 +327,12 @@ parser.parse('{"foo": true, "bar": "str"}', schema); // error: DataParsingError
|
|
|
|
|
|
| тип | пустые значения |
|
|
|
|-------------|---------------------------|
|
|
|
-| `'any'` | `undefined`, `null` |
|
|
|
+| `'any'` | `undefined`, `null`, `''` |
|
|
|
| `'string'` | `undefined`, `null`, `''` |
|
|
|
-| `'number'` | `undefined`, `null`, `0` |
|
|
|
+| `'number'` | `undefined`, `null` |
|
|
|
| `'boolean'` | `undefined`, `null` |
|
|
|
-| `'array'` | `undefined`, `null`, `[]` |
|
|
|
-| `'object'` | `undefined`, `null`, `{}` |
|
|
|
+| `'array'` | `undefined`, `null` |
|
|
|
+| `'object'` | `undefined`, `null` |
|
|
|
|
|
|
Управление этими наборами осуществляется через специальный сервис, который предоставляет модуль
|
|
|
[@e22m4u/js-empty-values](https://www.npmjs.com/package/@e22m4u/js-empty-values)
|