Browse Source

docs: updates README.md

e22m4u 3 weeks ago
parent
commit
7cb8bdf339
2 changed files with 22 additions and 17 deletions
  1. 19 16
      README.md
  2. 3 1
      src/data-parsers/default-value-setter.js

+ 19 - 16
README.md

@@ -49,7 +49,7 @@ const {DataValidator} = require('@e22m4u/js-data-schema');
 
 #### type
 
-Параметр `type` определяет тип данных. При определении схемы можно использовать
+Параметр `type` определяет тип данных. При определении типа можно использовать
 константу или название типа в виде строки. Константы проверяются редакторами
 кода, что позволяет избежать опечаток при вводе типа.
 
@@ -141,8 +141,8 @@ const {DataValidator} = require('@e22m4u/js-data-schema');
 #### required
 
 Так как по умолчанию все типы допускают [пустые значения](#пустые-значения),
-параметр `required` используется чтобы явно запретить такие значения
-при проверке. Параметр можно использовать там, где указывается тип данных.
+параметр `required` может быть полезен для явного их запрета при проверке
+данных. Параметр можно использовать там, где указывается тип данных.
 
 ```js
 {
@@ -155,8 +155,9 @@ const {DataValidator} = require('@e22m4u/js-data-schema');
 #### default
 
 Значение по умолчанию можно указать в параметре `default`. Указанное значение
-будет использовано, если исходное значение оказалось *пустым* при разборе
-входящих данных.
+будет использовано, если исходное значение оказалось [пустым](#пустые-значения).
+Если значение параметра является объектом или массивом, то итоговые данных
+получат его копию.
 
 ```js
 {
@@ -191,8 +192,8 @@ validator.validate({foo: 'bar'}, numberSchema);
 ```
 
 Каждый тип данных имеет собственный набор [пустых значений](#пустые-значения),
-которые являются допустимыми при проверке данных соответствующего типа.
-Чтобы исключить такие значения применяется параметр `required`.
+которые являются допустимыми при проверке соответствующего типа. Чтобы исключить
+такие значения применяется параметр `required`.
 
 ```js
 import {DataValidator, DataType} from '@e22m4u/js-data-schema';
@@ -232,8 +233,9 @@ parser.parse('10abc', {type: DataType.NUMBER}); // DataParsingError
 ```
 
 Массивы и объекты могут быть представлены в виде *JSON*. Метод `parse`
-разбирает такие значения и выполняет их проверку. К примеру, если элементы
-массива не соответствуют определению схемы, то будет выброшена ошибка.
+поддерживает данный формат и выполняет проверку разобранного значения.
+К примеру, если элементы массива не соответствуют определению схемы,
+то будет выброшена ошибка.
 
 ```js
 import {DataParser, DataType} from '@e22m4u/js-data-schema';
@@ -295,9 +297,8 @@ validator.defineSchema({name: 'mySchema', schema});
 parser.defineSchema({name: 'mySchema', schema});
 ```
 
-Регистрация может выполняться централизованно через реестр. Этого можно
-добиться используя сервис-контейнер, который обычно выступает как точка
-входа в приложение.
+Регистрация схем может выполняться централизованно через реестр. Этого можно
+добиться используя сервис-контейнер, который выступает в роли точки входа.
 
 ```js
 import {ServiceContainer} from '@e22m4u/js-service';
@@ -328,11 +329,12 @@ const parser = app.get(DataParser);
 ```
 
 В примере выше оба сервиса используют общий реестр и знают о зарегистрированной
-схеме `mySchema`, что избавляет от необходимости синхронизации схем между ними.
+схеме `mySchema`, что избавляет от необходимости синхронизации между сервисами
+данного модуля.
 
 #### Использование именованных схем
 
-Зарегистрированное имя схемы можно использовать вместо обычной схемы. Пример
+Зарегистрированное имя схемы можно использовать вместо объекта схемы. Пример
 ниже демонстрирует проверку данных с помощью именованной схемы.
 
 ```js
@@ -348,8 +350,9 @@ validator.validate(['a', 'b', 'c'], 'mySchema'); // OK
 validator.validate(['a', 'b', 10], 'mySchema'); // DataValidationError
 ```
 
-Имена схем можно встраивать в обычные схемы. Ниже приводится пример
-использования именованной схемы для определения схемы элементов массива.
+Зарегистрированные имена можно встраивать в другие схемы. Ниже приводится
+пример использования именованной схемы для определения структуры элементов
+массива.
 
 ```js
 parser.defineSchema({

+ 3 - 1
src/data-parsers/default-value-setter.js

@@ -36,5 +36,7 @@ export function defaultValueSetter(value, schema, options, container) {
   }
   // в противном случае, возвращается
   // копия значения по умолчанию
-  return structuredClone(schema.default);
+  return schema.default && typeof schema.default === 'object'
+    ? structuredClone(schema.default)
+    : schema.default;
 }