@e22m4u/js-repository 0.8.4 → 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +37 -49
  2. package/dist/cjs/index.cjs +762 -353
  3. package/eslint.config.js +1 -0
  4. package/package.json +14 -14
  5. package/src/adapter/adapter-loader.js +9 -4
  6. package/src/adapter/adapter-registry.js +3 -1
  7. package/src/adapter/builtin/memory-adapter.js +29 -13
  8. package/src/adapter/decorator/data-sanitizing-decorator.js +2 -1
  9. package/src/adapter/decorator/default-values-decorator.js +2 -1
  10. package/src/adapter/decorator/fields-filtering-decorator.js +14 -7
  11. package/src/adapter/decorator/inclusion-decorator.js +14 -7
  12. package/src/adapter/decorator/property-uniqueness-decorator.js +2 -1
  13. package/src/adapter/decorator/required-property-decorator.js +2 -1
  14. package/src/definition/datasource/datasource-definition-validator.js +6 -3
  15. package/src/definition/definition-registry.js +8 -4
  16. package/src/definition/model/model-data-sanitizer.js +4 -2
  17. package/src/definition/model/model-definition-utils.js +74 -35
  18. package/src/definition/model/model-definition-utils.spec.js +2 -6
  19. package/src/definition/model/model-definition-validator.js +10 -5
  20. package/src/definition/model/properties/primary-keys-definition-validator.js +4 -2
  21. package/src/definition/model/properties/properties-definition-validator.js +36 -18
  22. package/src/definition/model/properties/property-uniqueness-validator.js +30 -18
  23. package/src/definition/model/properties/property-uniqueness-validator.spec.js +734 -74
  24. package/src/definition/model/properties/required-property-validator.js +7 -12
  25. package/src/definition/model/properties/required-property-validator.spec.js +7 -46
  26. package/src/definition/model/relations/relations-definition-validator.js +70 -33
  27. package/src/filter/fields-clause-tool.js +31 -12
  28. package/src/filter/include-clause-tool.js +38 -15
  29. package/src/filter/operator-clause-tool.js +55 -23
  30. package/src/filter/order-clause-tool.js +36 -13
  31. package/src/filter/slice-clause-tool.js +16 -7
  32. package/src/filter/where-clause-tool.js +24 -10
  33. package/src/relations/belongs-to-resolver.js +44 -20
  34. package/src/relations/has-many-resolver.js +52 -25
  35. package/src/relations/has-one-resolver.js +58 -27
  36. package/src/relations/references-many-resolver.js +24 -11
  37. package/src/repository/repository-registry.js +3 -1
  38. package/src/repository/repository.js +2 -1
  39. package/src/utils/capitalize.js +3 -1
  40. package/src/utils/clone-deep.js +6 -2
  41. package/src/utils/exclude-object-keys.js +2 -1
  42. package/src/utils/get-value-by-path.js +6 -2
  43. package/src/utils/is-deep-equal.js +21 -7
  44. package/src/utils/is-promise.js +6 -2
  45. package/src/utils/model-name-to-model-key.js +2 -1
  46. package/src/utils/select-object-keys.js +9 -4
  47. package/src/utils/singularize.js +3 -1
package/README.md CHANGED
@@ -11,11 +11,10 @@
11
11
  - [Импорт](#импорт)
12
12
  - [Описание](#описание)
13
13
  - [Пример](#пример)
14
- - [Схема](#схема)
14
+ - [Схема баз данных](#схема-баз-данных)
15
15
  - [Источник данных](#источник-данных)
16
16
  - [Модель](#модель)
17
17
  - [Свойства](#свойства)
18
- - [Пустые значения](#пустые-значения)
19
18
  - [Репозиторий](#репозиторий)
20
19
  - [create](#repositorycreate)
21
20
  - [replaceById](#repositoryreplacebyid)
@@ -94,7 +93,7 @@ const {DatabaseSchema} = require('@e22m4u/js-repository');
94
93
  ```mermaid
95
94
  flowchart TD
96
95
 
97
- A[Схема]
96
+ A[DatabaseSchema]
98
97
  subgraph Базы данных
99
98
  B[Источник данных 1]
100
99
  C[Источник данных 2]
@@ -104,9 +103,9 @@ flowchart TD
104
103
 
105
104
  subgraph Коллекции
106
105
  D[Модель A]
107
- E[Модель Б]
108
- F[Модель В]
109
- G[Модель Г]
106
+ E[Модель B]
107
+ F[Модель C]
108
+ G[Модель D]
110
109
  end
111
110
  B-->D
112
111
  B-->E
@@ -114,9 +113,9 @@ flowchart TD
114
113
  C-->G
115
114
 
116
115
  H[Репозиторий A]
117
- I[Репозиторий Б]
118
- J[Репозиторий В]
119
- K[Репозиторий Г]
116
+ I[Репозиторий B]
117
+ J[Репозиторий C]
118
+ K[Репозиторий D]
120
119
  D-->H
121
120
  E-->I
122
121
  F-->J
@@ -254,9 +253,12 @@ console.log(cityWithCountry);
254
253
  // }
255
254
  ```
256
255
 
257
- ## Схема
256
+ ## Схема баз данных
258
257
 
259
- Экземпляр класса `DatabaseSchema` хранит определения источников данных и моделей.
258
+ Экземпляр класса `DatabaseSchema` (далее *«Схема»*) хранит определения
259
+ источников данных и моделей. Схема связывает модели с источниками данных
260
+ и используется для получения репозиториев, которые выполняют операции
261
+ чтения и записи.
260
262
 
261
263
  **Методы**
262
264
 
@@ -384,14 +386,15 @@ dbs.defineModel({
384
386
  **Параметры**
385
387
 
386
388
  - `type: string` тип допустимого значения (обязательно);
387
- - `itemType: string` тип элемента массива (для `type: 'array'`);
388
- - `model: string` модель объекта (для `type: 'object'`);
389
- - `primaryKey: boolean` объявить свойство первичным ключом;
390
- - `columnName: string` переопределение названия колонки;
391
- - `columnType: string` тип колонки (определяется адаптером);
392
- - `required: boolean` объявить свойство обязательным;
393
- - `default: any` значение по умолчанию;
394
- - `unique: boolean | string` проверять значение на уникальность;
389
+ - `itemType?: string` тип элемента массива (для `type: 'array'`);
390
+ - `itemModel?: string` модель элемента массива (для `type: 'array'`);
391
+ - `model?: string` модель объекта (для `type: 'object'`);
392
+ - `primaryKey?: boolean` объявить свойство первичным ключом;
393
+ - `columnName?: string` переопределение названия колонки;
394
+ - `columnType?: string` тип колонки (определяется адаптером);
395
+ - `required?: boolean` объявить свойство обязательным;
396
+ - `default?: any` значение по умолчанию (заменяет `undefined` и `null`);
397
+ - `unique?: boolean | string` проверять значение на уникальность;
395
398
 
396
399
  **Параметр `unique`**
397
400
 
@@ -399,15 +402,19 @@ dbs.defineModel({
399
402
  строгая проверка на уникальность. В этом режиме любое значение данного свойства
400
403
  не может быть представлено более одного раза.
401
404
 
402
- Режим `"sparse"` проверяет только значения с полезной нагрузкой, исключая
403
- [пустые значения](#пустые-значения), список которых отличается в зависимости
404
- от типа свойства. Например, для типа `string` пустым значением будет
405
- `undefined`, `null` и `""` (пустая строка).
406
-
407
405
  - `unique: true | 'strict'` строгая проверка на уникальность;
408
- - `unique: 'sparse'` исключить из проверки [пустые значения](#пустые-значения);
406
+ - `unique: 'sparse'` исключить из проверки ложные значения;
409
407
  - `unique: false | 'nonUnique'` не проверять на уникальность (по умолчанию);
410
408
 
409
+ Режим `"sparse"` исключает из проверки на уникальность ложные значения с точки
410
+ зрения JavaScript. Указанные ниже значения будут проигнорированы при проверке
411
+ в данном режиме.
412
+
413
+ - `""` пустая строка;
414
+ - `0` число ноль;
415
+ - `false` логическое отрицание;
416
+ - `undefined` и `null`;
417
+
411
418
  В качестве значений параметра `unique` можно использовать предопределенные
412
419
  константы как эквивалент строковых значений `strict`, `sparse` и `nonUnique`.
413
420
 
@@ -471,25 +478,6 @@ dbs.defineModel({
471
478
  });
472
479
  ```
473
480
 
474
- ## Пустые значения
475
-
476
- Разные типы свойств имеют свои наборы пустых значений. Эти наборы используются
477
- для определения наличия полезной нагрузки в значении свойства. Например,
478
- параметр `default` в определении свойства устанавливает значение по умолчанию,
479
- только если входящее значение является пустым. Параметр `required` исключает
480
- пустые значения выбрасывая ошибку. А параметр `unique` в режиме `sparse`
481
- наоборот допускает дублирование пустых значений уникального свойства,
482
- поскольку они не участвуют в проверке.
483
-
484
- | тип свойства | пустые значения |
485
- |--------------------|----------------------------|
486
- | `DataType.ANY` | *значения остальных типов* |
487
- | `DataType.STRING` | `undefined`, `null`, `""` |
488
- | `DataType.NUMBER` | `undefined`, `null` |
489
- | `DataType.BOOLEAN` | `undefined`, `null` |
490
- | `DataType.ARRAY` | `undefined`, `null` |
491
- | `DataType.OBJECT` | `undefined`, `null` |
492
-
493
481
  ## Репозиторий
494
482
 
495
483
  Репозиторий выполняет операции чтения и записи данных определенной модели.
@@ -514,8 +502,8 @@ dbs.defineModel({
514
502
 
515
503
  - `id: number|string` идентификатор (первичный ключ);
516
504
  - `data: object` данные документа (используется при записи);
517
- - `where: object` условия фильтрации (см. [Фильтрация](#Фильтрация));
518
- - `filter: object` параметры выборки (см. [Фильтрация](#Фильтрация));
505
+ - `where: object` условия фильтрации (см. [Фильтрация](#фильтрация));
506
+ - `filter: object` параметры выборки (см. [Фильтрация](#фильтрация));
519
507
 
520
508
  **Получение репозитория**
521
509
 
@@ -851,8 +839,8 @@ if (!product) {
851
839
 
852
840
  ### repository.findById
853
841
 
854
- Находит один документ по его уникальному идентификатору. Если документ не
855
- найден, выбрасывается ошибка.
842
+ Поиск документа по идентификатору. Если документ не найден, выбрасывается
843
+ ошибка.
856
844
 
857
845
  Сигнатура:
858
846
 
@@ -1378,7 +1366,7 @@ const res = await rep.find({
1378
1366
 
1379
1367
  Параметр включает связанные документы в результат вызываемого метода.
1380
1368
  Названия включаемых связей должны быть определены в текущей модели.
1381
- (см. [Связи](#Связи))
1369
+ (см. [Связи](#связи))
1382
1370
 
1383
1371
  **Примеры**
1384
1372