@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.
- package/README.md +37 -49
- package/dist/cjs/index.cjs +762 -353
- package/eslint.config.js +1 -0
- package/package.json +14 -14
- package/src/adapter/adapter-loader.js +9 -4
- package/src/adapter/adapter-registry.js +3 -1
- package/src/adapter/builtin/memory-adapter.js +29 -13
- package/src/adapter/decorator/data-sanitizing-decorator.js +2 -1
- package/src/adapter/decorator/default-values-decorator.js +2 -1
- package/src/adapter/decorator/fields-filtering-decorator.js +14 -7
- package/src/adapter/decorator/inclusion-decorator.js +14 -7
- package/src/adapter/decorator/property-uniqueness-decorator.js +2 -1
- package/src/adapter/decorator/required-property-decorator.js +2 -1
- package/src/definition/datasource/datasource-definition-validator.js +6 -3
- package/src/definition/definition-registry.js +8 -4
- package/src/definition/model/model-data-sanitizer.js +4 -2
- package/src/definition/model/model-definition-utils.js +74 -35
- package/src/definition/model/model-definition-utils.spec.js +2 -6
- package/src/definition/model/model-definition-validator.js +10 -5
- package/src/definition/model/properties/primary-keys-definition-validator.js +4 -2
- package/src/definition/model/properties/properties-definition-validator.js +36 -18
- package/src/definition/model/properties/property-uniqueness-validator.js +30 -18
- package/src/definition/model/properties/property-uniqueness-validator.spec.js +734 -74
- package/src/definition/model/properties/required-property-validator.js +7 -12
- package/src/definition/model/properties/required-property-validator.spec.js +7 -46
- package/src/definition/model/relations/relations-definition-validator.js +70 -33
- package/src/filter/fields-clause-tool.js +31 -12
- package/src/filter/include-clause-tool.js +38 -15
- package/src/filter/operator-clause-tool.js +55 -23
- package/src/filter/order-clause-tool.js +36 -13
- package/src/filter/slice-clause-tool.js +16 -7
- package/src/filter/where-clause-tool.js +24 -10
- package/src/relations/belongs-to-resolver.js +44 -20
- package/src/relations/has-many-resolver.js +52 -25
- package/src/relations/has-one-resolver.js +58 -27
- package/src/relations/references-many-resolver.js +24 -11
- package/src/repository/repository-registry.js +3 -1
- package/src/repository/repository.js +2 -1
- package/src/utils/capitalize.js +3 -1
- package/src/utils/clone-deep.js +6 -2
- package/src/utils/exclude-object-keys.js +2 -1
- package/src/utils/get-value-by-path.js +6 -2
- package/src/utils/is-deep-equal.js +21 -7
- package/src/utils/is-promise.js +6 -2
- package/src/utils/model-name-to-model-key.js +2 -1
- package/src/utils/select-object-keys.js +9 -4
- 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
|
|
388
|
-
- `
|
|
389
|
-
- `
|
|
390
|
-
- `
|
|
391
|
-
- `
|
|
392
|
-
- `
|
|
393
|
-
- `
|
|
394
|
-
- `
|
|
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
|
|