Browse Source

chore: updates dependencies

e22m4u 3 weeks ago
parent
commit
48faf04c78

+ 82 - 199
README.md

@@ -35,61 +35,37 @@ const {DataValidator} = require('@e22m4u/js-data-schema');
 
 ### Схема данных
 
-Пример схемы.
+Схема данных позволяет указать допустимый тип значения, схему элементов
+массива и схему свойств объекта. Схему можно использовать для проверки
+входящих данных или для их преобразования к формату схемы.
 
-```js
-{
-  type: DataType.ARRAY,
-  items: {
-    type: DataType.OBJECT,
-    properties: {
-      name: {
-        type: DataType.STRING,
-        required: true
-      },
-      age: {
-        type: DataType.NUMBER
-      }
-    }
-  }
-}
-// [
-//   {
-//     name: 'John',
-//     age: 27,
-//   },
-//   {
-//     name: 'Frank'
-//   }
-// ]
-```
-
-Свойства схемы (далее параметры):
+Свойства схемы:
 
-- `type` тип значения;
-- `items` схема элементов массива;
-- `properties` схема свойств объекта;
-- `required` исключение [пустых значений](#пустые-значения);
+- `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
 {
@@ -98,13 +74,29 @@ const {DataValidator} = require('@e22m4u/js-data-schema');
     type: DataType.NUMBER
   }
 }
-// [1, 2, 3]
+// [-1, 0, 1, undefined, null]
+```
+
+Так как типы допускают [пустые значения](#пустые-значения), рекомендуется
+использовать параметр `required` в определении схемы элемента, чтобы исключить
+их из возможных значений массива.
+
+```js
+{
+  type: DataType.ARRAY,
+  items: {
+    type: DataType.NUMBER,
+    required: true // исключает undefined, null и 0
+  }
+}
+// [-1, 1]
 ```
 
 #### properties
 
 Параметр `properties` позволяет указать схему каждого свойства объекта.
-Параметр можно использовать, только если явно указан тип `object`.
+Параметр можно использовать, только если явно указан тип `object`. В примере
+ниже используется схема объекта с двумя свойствами.
 
 ```js
 {
@@ -119,151 +111,49 @@ const {DataValidator} = require('@e22m4u/js-data-schema');
   }
 }
 // {
-//   name: "John",
-//   age: 32
+//   "name": "John",
+//   "age": 27
 // }
 ```
 
-#### required
-
-Параметр `required` позволяет запретить [пустые значения](#пустые-значения).
-
-```js
-{
-  type: DataType.STRING,
-  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
-```
-
-Определение схемы для свойств объекта.
+Значения свойств могут быть обязательными. Для этого используется
+параметр `required` в схеме соответствующего свойства. Если параметр
+указан, то [пустые значения](#пустые-значения) будут вызывать ошибку
+при проверке данного свойства.
 
 ```js
 {
   type: DataType.OBJECT,
-  items: {
-    foo: { // схема свойства foo
-      type: DataType.STRING // только строки
+  properties: {
+    name: {
+      type: DataType.STRING,
+      required: true // исключает undefined, null и ""
     },
-    bar: { // схема свойства bar
-      type: DataType.NUMBER // только числа
+    age: {
+      type: DataType.NUMBER,
+      required: true // исключает undefined, null и 0
     }
   }
 }
-
-// допустимо:
-//   {foo: 'str', bar: 10}
-//   {foo: null, bar: null}
-//   {}
-//   undefined
-//   null
 ```
 
-Исключение [пустых значений](#пустые-значения) для объекта и его свойств.
+#### required
+
+Так как по умолчанию все типы допускают [пустые значения](#пустые-значения),
+параметр `required` используется чтобы явно запретить такие значения
+при проверке. Параметр можно использовать там, где указывается тип данных.
 
 ```js
 {
-  type: DataType.OBJECT,
-  properties: {
-    foo: { // схема свойства foo
-      type: DataType.STRING, // допускает только строки
-      required: true         // исключает пустые значения
-    },
-    bar: { // схема свойства bar
-      type: DataType.NUMBER  // допускает только числа
-    }
-  },
-  required: true // объект является обязательным
+  type: DataType.STRING, // допускает строки и пустые значения
+  required: true         // исключает пустые значения
 }
-
-// допустимо:
-//   {foo: 'str', bar: 10}
-//   {foo: 'str'}
-
-// исключено:
-//   {foo: '', bar: 10}
-//   {foo: null}
-//   {}
-//   undefined
-//   null
+// "foo", "bar" ...
 ```
 
 ## Использование
 
-Ниже приводятся примеры использования данного модуля.
+Ниже приводятся примеры использования различных схем.
 
 ### Проверка данных
 
@@ -274,9 +164,8 @@ import {DataValidator, DataType} from '@e22m4u/js-data-schema';
 
 const validator = new DataValidator();
 
-// определение схемы
 const schema = {
-  type: DataType.STRING, // только строки
+  type: DataType.STRING, // тип значения
 };
 
 // значение "str" соответствует схеме
@@ -299,10 +188,9 @@ import {DataValidator, DataType} from '@e22m4u/js-data-schema';
 
 const validator = new DataValidator();
 
-// определение схемы
 const schema = {
-  type: DataType.NUMBER, // только числа
-  required: true,        // исключает пустые значения
+  type: DataType.NUMBER, // тип значения
+  required: true,        // является обязательным
 };
 
 // значение 10 соответствует схеме
@@ -325,11 +213,10 @@ import {DataValidator, DataType} from '@e22m4u/js-data-schema';
 
 const validator = new DataValidator();
 
-// определение схемы массива
 const schema = {
-  type: DataType.ARRAY,
+  type: DataType.ARRAY, // тип значения
   items: {
-    type: DataType.NUMBER,
+    type: DataType.NUMBER, // тип элемента
   },
 };
 
@@ -356,16 +243,15 @@ import {DataValidator, DataType} from '@e22m4u/js-data-schema';
 
 const validator = new DataValidator();
 
-// определение схемы объекта
 const schema = {
-  type: DataType.OBJECT,
+  type: DataType.OBJECT, // тип значения
   properties: {
     foo: { // схема свойства "foo"
-      type: DataType.STRING, // допускает только строки
+      type: DataType.STRING, // тип свойства
       required: true,        // является обязательным
     },
     bar: { // схема свойства "bar"
-      type: DataType.NUMBER,
+      type: DataType.NUMBER, // тип свойства
     },
   },
 };
@@ -392,9 +278,8 @@ import {DataParser, DataType} from '@e22m4u/js-data-schema';
 
 const parser = new DataParser();
 
-// определение схемы
 const schema = {
-  type: DataType.NUMBER, // только числа
+  type: DataType.NUMBER, // тип значения
 };
 
 // приведение строки к числу
@@ -412,11 +297,10 @@ import {DataParser, DataType} from '@e22m4u/js-data-schema';
 
 const parser = new DataParser();
 
-// определение схемы массива
 const schema = {
-  type: DataType.ARRAY,
-  items: {                 // схема элементов
-    type: DataType.NUMBER, // только числа
+  type: DataType.ARRAY, // тип значения
+  items: {
+    type: DataType.NUMBER, // тип элемента
   },
 };
 
@@ -436,16 +320,15 @@ import {DataParser, DataType} from '@e22m4u/js-data-schema';
 
 const parser = new DataParser();
 
-// определение схемы объекта
 const schema = {
-  type: DataType.OBJECT,
+  type: DataType.OBJECT, // тип значения
   properties: {
     foo: { // схема свойства "foo"
-      type: DataType.STRING, // допускает только строки
+      type: DataType.STRING, // тип свойства
       required: true,        // является обязательным
     },
     bar: { // схема свойства "bar"
-      type: DataType.NUMBER,
+      type: DataType.NUMBER, // тип свойства
     },
   },
 };
@@ -474,14 +357,14 @@ parser.parse('{"foo": 10}', schema); // error: DataParsingError
 для определения наличия полезной нагрузки в значении свойства. Например,
 параметр `required` исключает пустые значения при проверке данных. 
 
-| тип         | пустые значения           |
-|-------------|---------------------------|
-| `'any'`     | `undefined`, `null`, `''` |
-| `'string'`  | `undefined`, `null`, `''` |
-| `'number'`  | `undefined`, `null`       |
-| `'boolean'` | `undefined`, `null`       |
-| `'array'`   | `undefined`, `null`       |
-| `'object'`  | `undefined`, `null`       |
+| тип данных         | пустые значения            |
+|--------------------|----------------------------|
+| `DataType.ANY`     | *значения остальных типов* |
+| `DataType.STRING`  | `undefined`, `null`, `""`  |
+| `DataType.NUMBER`  | `undefined`, `null`, `0`   |
+| `DataType.BOOLEAN` | `undefined`, `null`        |
+| `DataType.ARRAY`   | `undefined`, `null`, `[]`  |
+| `DataType.OBJECT`  | `undefined`, `null`, `{}`  |
 
 Управление этими наборами осуществляется через специальный сервис, который предоставляет модуль
 [@e22m4u/js-empty-values](https://www.npmjs.com/package/@e22m4u/js-empty-values)

+ 11 - 11
dist/cjs/index.cjs

@@ -383,7 +383,7 @@ function arrayTypeValidator(value, schema, options, container) {
   }
   const emptyValues = container.get(import_js_empty_values.EmptyValuesService);
   const dataType = schema.type || DataType.ANY;
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return;
   }
   if (Array.isArray(value)) {
@@ -414,7 +414,7 @@ function objectTypeValidator(value, schema, options, container) {
   }
   const emptyValues = container.get(import_js_empty_values2.EmptyValuesService);
   const dataType = schema.type || DataType.ANY;
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return;
   }
   if (value !== null && typeof value === "object" && !Array.isArray(value)) {
@@ -445,7 +445,7 @@ function stringTypeValidator(value, schema, options, container) {
   }
   const emptyValues = container.get(import_js_empty_values3.EmptyValuesService);
   const dataType = schema.type || DataType.ANY;
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return;
   }
   if (typeof value === "string") {
@@ -476,7 +476,7 @@ function numberTypeValidator(value, schema, options, container) {
   }
   const emptyValues = container.get(import_js_empty_values4.EmptyValuesService);
   const dataType = schema.type || DataType.ANY;
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return;
   }
   if (typeof value === "number") {
@@ -507,7 +507,7 @@ function booleanTypeValidator(value, schema, options, container) {
   }
   const emptyValues = container.get(import_js_empty_values5.EmptyValuesService);
   const dataType = schema.type || DataType.ANY;
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return;
   }
   if (typeof value === "boolean") {
@@ -538,7 +538,7 @@ function requiredValueValidator(value, schema, options, container) {
   }
   const emptyValues = container.get(import_js_empty_values6.EmptyValuesService);
   const dataType = schema.type || DataType.ANY;
-  if (!emptyValues.isEmptyByType(dataType, value)) {
+  if (!emptyValues.isEmptyOf(dataType, value)) {
     return;
   }
   const sourcePath = options && options.sourcePath;
@@ -737,7 +737,7 @@ function arrayTypeParser(value, schema, options, container) {
   }
   const dataType = schema.type || DataType.ANY;
   const emptyValues = container.get(import_js_empty_values7.EmptyValuesService);
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return value;
   }
   if (!options || !options.noParsingErrors) {
@@ -763,7 +763,7 @@ function stringTypeParser(value, schema, options, container) {
   }
   const dataType = schema.type || DataType.ANY;
   const emptyValues = container.get(import_js_empty_values8.EmptyValuesService);
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return value;
   }
   if (!options || !options.noParsingErrors) {
@@ -794,7 +794,7 @@ function numberTypeParser(value, schema, options, container) {
   }
   const dataType = schema.type || DataType.ANY;
   const emptyValues = container.get(import_js_empty_values9.EmptyValuesService);
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return value;
   }
   if (!options || !options.noParsingErrors) {
@@ -828,7 +828,7 @@ function objectTypeParser(value, schema, options, container) {
   }
   const dataType = schema.type || DataType.ANY;
   const emptyValues = container.get(import_js_empty_values10.EmptyValuesService);
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return value;
   }
   if (!options || !options.noParsingErrors) {
@@ -861,7 +861,7 @@ function booleanTypeParser(value, schema, options, container) {
   }
   const dataType = schema.type || DataType.ANY;
   const emptyValues = container.get(import_js_empty_values11.EmptyValuesService);
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return value;
   }
   if (!options || !options.noParsingErrors) {

+ 1 - 1
package.json

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

+ 1 - 1
src/data-parsers/array-type-parser.js

@@ -41,7 +41,7 @@ export function arrayTypeParser(value, schema, options, container) {
   // то преобразование пропускается
   const dataType = schema.type || DataType.ANY;
   const emptyValues = container.get(EmptyValuesService);
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return value;
   }
   // если преобразовать значение не удалось,

+ 1 - 1
src/data-parsers/boolean-type-parser.js

@@ -42,7 +42,7 @@ export function booleanTypeParser(value, schema, options, container) {
   // то преобразование пропускается
   const dataType = schema.type || DataType.ANY;
   const emptyValues = container.get(EmptyValuesService);
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return value;
   }
   // если преобразовать значение не удалось,

+ 1 - 1
src/data-parsers/number-type-parser.js

@@ -37,7 +37,7 @@ export function numberTypeParser(value, schema, options, container) {
   // то преобразование пропускается
   const dataType = schema.type || DataType.ANY;
   const emptyValues = container.get(EmptyValuesService);
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return value;
   }
   // если преобразовать значение не удалось,

+ 1 - 1
src/data-parsers/object-type-parser.js

@@ -45,7 +45,7 @@ export function objectTypeParser(value, schema, options, container) {
   // то преобразование пропускается
   const dataType = schema.type || DataType.ANY;
   const emptyValues = container.get(EmptyValuesService);
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return value;
   }
   // если преобразовать значение не удалось,

+ 1 - 1
src/data-parsers/string-type-parser.js

@@ -32,7 +32,7 @@ export function stringTypeParser(value, schema, options, container) {
   // то преобразование пропускается
   const dataType = schema.type || DataType.ANY;
   const emptyValues = container.get(EmptyValuesService);
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return value;
   }
   // если преобразовать значение не удалось,

+ 1 - 1
src/data-validators/array-type-validator.js

@@ -21,7 +21,7 @@ export function arrayTypeValidator(value, schema, options, container) {
   // то проверка пропускается
   const emptyValues = container.get(EmptyValuesService);
   const dataType = schema.type || DataType.ANY;
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return;
   }
   // если значение является массивом,

+ 1 - 1
src/data-validators/boolean-type-validator.js

@@ -21,7 +21,7 @@ export function booleanTypeValidator(value, schema, options, container) {
   // то проверка пропускается
   const emptyValues = container.get(EmptyValuesService);
   const dataType = schema.type || DataType.ANY;
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return;
   }
   // если значение является логическим,

+ 1 - 1
src/data-validators/number-type-validator.js

@@ -21,7 +21,7 @@ export function numberTypeValidator(value, schema, options, container) {
   // то проверка пропускается
   const emptyValues = container.get(EmptyValuesService);
   const dataType = schema.type || DataType.ANY;
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return;
   }
   // если значение является числом,

+ 1 - 1
src/data-validators/object-type-validator.js

@@ -21,7 +21,7 @@ export function objectTypeValidator(value, schema, options, container) {
   // то проверка пропускается
   const emptyValues = container.get(EmptyValuesService);
   const dataType = schema.type || DataType.ANY;
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return;
   }
   // если значение является объектом,

+ 1 - 1
src/data-validators/required-value-validator.js

@@ -21,7 +21,7 @@ export function requiredValueValidator(value, schema, options, container) {
   // то проверка успешно завершается
   const emptyValues = container.get(EmptyValuesService);
   const dataType = schema.type || DataType.ANY;
-  if (!emptyValues.isEmptyByType(dataType, value)) {
+  if (!emptyValues.isEmptyOf(dataType, value)) {
     return;
   }
   // если значение является пустым,

+ 1 - 1
src/data-validators/string-type-validator.js

@@ -21,7 +21,7 @@ export function stringTypeValidator(value, schema, options, container) {
   // то проверка пропускается
   const emptyValues = container.get(EmptyValuesService);
   const dataType = schema.type || DataType.ANY;
-  if (emptyValues.isEmptyByType(dataType, value)) {
+  if (emptyValues.isEmptyOf(dataType, value)) {
     return;
   }
   // если значение является строкой,