Просмотр исходного кода

refactor: updates empty values

e22m4u 3 недель назад
Родитель
Сommit
e214c005f8
2 измененных файлов с 72 добавлено и 26 удалено
  1. 71 25
      README.md
  2. 1 1
      package.json

+ 71 - 25
README.md

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

+ 1 - 1
package.json

@@ -37,7 +37,7 @@
     "prepare": "husky"
     "prepare": "husky"
   },
   },
   "dependencies": {
   "dependencies": {
-    "@e22m4u/js-empty-values": "~0.2.1",
+    "@e22m4u/js-empty-values": "~0.3.1",
     "@e22m4u/js-format": "~0.3.2",
     "@e22m4u/js-format": "~0.3.2",
     "@e22m4u/js-service": "~0.5.1"
     "@e22m4u/js-service": "~0.5.1"
   },
   },