|
|
@@ -35,35 +35,32 @@ const {DataValidator} = require('@e22m4u/js-data-schema');
|
|
|
|
|
|
### Схема данных
|
|
|
|
|
|
-Структура:
|
|
|
+Свойства схемы (далее параметры):
|
|
|
|
|
|
-```ts
|
|
|
-{
|
|
|
- type?: DataType;
|
|
|
- items?: DataSchemaObject | DataSchemaFactory | string;
|
|
|
- properties?: DataSchemaProperties | DataSchemaFactory | string;
|
|
|
- required?: boolean;
|
|
|
-}
|
|
|
-```
|
|
|
+- `type` тип значения;
|
|
|
+- `items` схема элементов массива;
|
|
|
+- `properties` схема свойств объекта;
|
|
|
+- `required` исключение [пустых значений](#пустые-значения);
|
|
|
|
|
|
#### type
|
|
|
|
|
|
-Параметр `type` определяет тип допустимых значений.
|
|
|
+Параметр `type` определяет тип допустимых значений. При определении схемы можно
|
|
|
+использовать константу или название типа в виде строки.
|
|
|
|
|
|
| константа | значение |
|
|
|
|--------------------|-------------|
|
|
|
-| `DataType.ANY` | `"any"` |
|
|
|
-| `DataType.STRING` | `"string"` |
|
|
|
-| `DataType.NUMBER` | `"number"` |
|
|
|
-| `DataType.BOOLEAN` | `"boolean"` |
|
|
|
-| `DataType.ARRAY` | `"array"` |
|
|
|
-| `DataType.OBJECT` | `"object"` |
|
|
|
+| `DataType.ANY` | `'any'` |
|
|
|
+| `DataType.STRING` | `'string'` |
|
|
|
+| `DataType.NUMBER` | `'number'` |
|
|
|
+| `DataType.BOOLEAN` | `'boolean'` |
|
|
|
+| `DataType.ARRAY` | `'array'` |
|
|
|
+| `DataType.OBJECT` | `'object'` |
|
|
|
|
|
|
|
|
|
#### items
|
|
|
|
|
|
Параметр `items` позволяет указать схему для элементов массива. Параметр можно
|
|
|
-использовать, только если явно указан тип `array` текущей схемы.
|
|
|
+использовать, только если явно указан тип `array`.
|
|
|
|
|
|
```js
|
|
|
{
|
|
|
@@ -78,7 +75,7 @@ const {DataValidator} = require('@e22m4u/js-data-schema');
|
|
|
#### properties
|
|
|
|
|
|
Параметр `properties` позволяет указать схему каждого свойства объекта.
|
|
|
-Параметр можно использовать, только если явно указан тип `object` текущей схемы.
|
|
|
+Параметр можно использовать, только если явно указан тип `object`.
|
|
|
|
|
|
```js
|
|
|
{
|
|
|
@@ -108,7 +105,131 @@ const {DataValidator} = require('@e22m4u/js-data-schema');
|
|
|
required: true
|
|
|
}
|
|
|
// запрещает '', undefined и null
|
|
|
-// см. раздел «Пустые значения»
|
|
|
+```
|
|
|
+
|
|
|
+#### Примеры
|
|
|
+
|
|
|
+Определение типа значения.
|
|
|
+
|
|
|
+```js
|
|
|
+{
|
|
|
+ type: DataType.STRING // только строки
|
|
|
+}
|
|
|
+
|
|
|
+// допустимо:
|
|
|
+// 'str'
|
|
|
+// ''
|
|
|
+// undefined
|
|
|
+// null
|
|
|
+```
|
|
|
+
|
|
|
+Исключение [пустых значений](#пустые-значения).
|
|
|
+
|
|
|
+```js
|
|
|
+{
|
|
|
+ type: DataType.STRING, // допускает только строки
|
|
|
+ required: true // исключает пустые значения
|
|
|
+}
|
|
|
+
|
|
|
+// допустимо:
|
|
|
+// 'str'
|
|
|
+
|
|
|
+// исключено:
|
|
|
+// ''
|
|
|
+// undefined
|
|
|
+// null
|
|
|
+```
|
|
|
+
|
|
|
+Определение схемы для элементов массива.
|
|
|
+
|
|
|
+```js
|
|
|
+{
|
|
|
+ type: DataType.ARRAY,
|
|
|
+ items: { // схема элементов
|
|
|
+ type: DataType.NUMBER // только числа
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// допустимо:
|
|
|
+// [1, 2, 3]
|
|
|
+// [undefined, null]
|
|
|
+// []
|
|
|
+// undefined
|
|
|
+// null
|
|
|
+```
|
|
|
+
|
|
|
+Исключение [пустых значений](#пустые-значения) для массива и его элементов.
|
|
|
+
|
|
|
+```js
|
|
|
+{
|
|
|
+ type: DataType.ARRAY,
|
|
|
+ items: { // схема элементов
|
|
|
+ type: DataType.NUMBER, // допускает только числа
|
|
|
+ required: true // исключает пустые значения
|
|
|
+ },
|
|
|
+ required: true // массив является обязательным
|
|
|
+}
|
|
|
+
|
|
|
+// допустимо:
|
|
|
+// [1, 2, 3]
|
|
|
+// []
|
|
|
+
|
|
|
+// исключено:
|
|
|
+// [undefined, null]
|
|
|
+// undefined
|
|
|
+// null
|
|
|
+```
|
|
|
+
|
|
|
+Определение схемы для свойств объекта.
|
|
|
+
|
|
|
+```js
|
|
|
+{
|
|
|
+ type: DataType.OBJECT,
|
|
|
+ items: {
|
|
|
+ foo: { // схема свойства foo
|
|
|
+ type: DataType.STRING // только строки
|
|
|
+ },
|
|
|
+ bar: { // схема свойства bar
|
|
|
+ type: DataType.NUMBER // только числа
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// допустимо:
|
|
|
+// {foo: 'str', bar: 10}
|
|
|
+// {foo: null, bar: null}
|
|
|
+// {}
|
|
|
+// undefined
|
|
|
+// null
|
|
|
+```
|
|
|
+
|
|
|
+Исключение [пустых значений](#пустые-значения) для объекта и его свойств.
|
|
|
+
|
|
|
+```js
|
|
|
+{
|
|
|
+ type: DataType.OBJECT,
|
|
|
+ properties: {
|
|
|
+ foo: { // схема свойства foo
|
|
|
+ type: DataType.STRING, // допускает только строки
|
|
|
+ required: true // исключает пустые значения
|
|
|
+ },
|
|
|
+ bar: { // схема свойства bar
|
|
|
+ type: DataType.NUMBER // допускает только числа
|
|
|
+ }
|
|
|
+ },
|
|
|
+ required: true // объект является обязательным
|
|
|
+}
|
|
|
+
|
|
|
+// допустимо:
|
|
|
+// {foo: 'str', bar: 10}
|
|
|
+// {foo: 'str'}
|
|
|
+
|
|
|
+// исключено:
|
|
|
+// {foo: '', bar: 10}
|
|
|
+// {foo: null}
|
|
|
+// {}
|
|
|
+// undefined
|
|
|
+// null
|
|
|
```
|
|
|
|
|
|
## Использование
|
|
|
@@ -117,19 +238,18 @@ const {DataValidator} = require('@e22m4u/js-data-schema');
|
|
|
|
|
|
### Проверка данных
|
|
|
|
|
|
-Проверка примитивных значений.
|
|
|
+Проверка типа значения.
|
|
|
|
|
|
```js
|
|
|
import {DataValidator, DataType} from '@e22m4u/js-data-schema';
|
|
|
|
|
|
+const validator = new DataValidator();
|
|
|
+
|
|
|
// определение схемы
|
|
|
const schema = {
|
|
|
- type: DataType.STRING, // <= только строки
|
|
|
+ type: DataType.STRING, // только строки
|
|
|
};
|
|
|
|
|
|
-// создание экземпляра сервиса
|
|
|
-const validator = new DataValidator();
|
|
|
-
|
|
|
// значение "str" соответствует схеме
|
|
|
validator.validate('str', schema); // OK
|
|
|
|
|
|
@@ -153,7 +273,7 @@ const validator = new DataValidator();
|
|
|
// определение схемы
|
|
|
const schema = {
|
|
|
type: DataType.NUMBER, // только числа
|
|
|
- required: true, // <= исключает undefined, null
|
|
|
+ required: true, // исключает пустые значения
|
|
|
};
|
|
|
|
|
|
// значение 10 соответствует схеме
|
|
|
@@ -236,7 +356,7 @@ validator.validate([1, 2, 3], schema); // error: DataValidationError
|
|
|
|
|
|
### Парсинг данных
|
|
|
|
|
|
-Приведение типа данных.
|
|
|
+Приведение типа согласно схеме.
|
|
|
|
|
|
```js
|
|
|
import {DataParser, DataType} from '@e22m4u/js-data-schema';
|