@e22m4u/js-repository 0.8.5 → 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 +27 -23
- package/dist/cjs/index.cjs +746 -325
- package/eslint.config.js +1 -0
- package/package.json +14 -13
- 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 +68 -26
- 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 +26 -10
- package/src/definition/model/properties/property-uniqueness-validator.spec.js +500 -38
- 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,7 +11,7 @@
|
|
|
11
11
|
- [Импорт](#импорт)
|
|
12
12
|
- [Описание](#описание)
|
|
13
13
|
- [Пример](#пример)
|
|
14
|
-
- [Схема](
|
|
14
|
+
- [Схема баз данных](#схема-баз-данных)
|
|
15
15
|
- [Источник данных](#источник-данных)
|
|
16
16
|
- [Модель](#модель)
|
|
17
17
|
- [Свойства](#свойства)
|
|
@@ -93,7 +93,7 @@ const {DatabaseSchema} = require('@e22m4u/js-repository');
|
|
|
93
93
|
```mermaid
|
|
94
94
|
flowchart TD
|
|
95
95
|
|
|
96
|
-
A[
|
|
96
|
+
A[DatabaseSchema]
|
|
97
97
|
subgraph Базы данных
|
|
98
98
|
B[Источник данных 1]
|
|
99
99
|
C[Источник данных 2]
|
|
@@ -103,9 +103,9 @@ flowchart TD
|
|
|
103
103
|
|
|
104
104
|
subgraph Коллекции
|
|
105
105
|
D[Модель A]
|
|
106
|
-
E[Модель
|
|
107
|
-
F[Модель
|
|
108
|
-
G[Модель
|
|
106
|
+
E[Модель B]
|
|
107
|
+
F[Модель C]
|
|
108
|
+
G[Модель D]
|
|
109
109
|
end
|
|
110
110
|
B-->D
|
|
111
111
|
B-->E
|
|
@@ -113,9 +113,9 @@ flowchart TD
|
|
|
113
113
|
C-->G
|
|
114
114
|
|
|
115
115
|
H[Репозиторий A]
|
|
116
|
-
I[Репозиторий
|
|
117
|
-
J[Репозиторий
|
|
118
|
-
K[Репозиторий
|
|
116
|
+
I[Репозиторий B]
|
|
117
|
+
J[Репозиторий C]
|
|
118
|
+
K[Репозиторий D]
|
|
119
119
|
D-->H
|
|
120
120
|
E-->I
|
|
121
121
|
F-->J
|
|
@@ -253,9 +253,12 @@ console.log(cityWithCountry);
|
|
|
253
253
|
// }
|
|
254
254
|
```
|
|
255
255
|
|
|
256
|
-
## Схема
|
|
256
|
+
## Схема баз данных
|
|
257
257
|
|
|
258
|
-
Экземпляр класса `DatabaseSchema` хранит определения
|
|
258
|
+
Экземпляр класса `DatabaseSchema` (далее *«Схема»*) хранит определения
|
|
259
|
+
источников данных и моделей. Схема связывает модели с источниками данных
|
|
260
|
+
и используется для получения репозиториев, которые выполняют операции
|
|
261
|
+
чтения и записи.
|
|
259
262
|
|
|
260
263
|
**Методы**
|
|
261
264
|
|
|
@@ -383,14 +386,15 @@ dbs.defineModel({
|
|
|
383
386
|
**Параметры**
|
|
384
387
|
|
|
385
388
|
- `type: string` тип допустимого значения (обязательно);
|
|
386
|
-
- `itemType
|
|
387
|
-
- `
|
|
388
|
-
- `
|
|
389
|
-
- `
|
|
390
|
-
- `
|
|
391
|
-
- `
|
|
392
|
-
- `
|
|
393
|
-
- `
|
|
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` проверять значение на уникальность;
|
|
394
398
|
|
|
395
399
|
**Параметр `unique`**
|
|
396
400
|
|
|
@@ -498,8 +502,8 @@ dbs.defineModel({
|
|
|
498
502
|
|
|
499
503
|
- `id: number|string` идентификатор (первичный ключ);
|
|
500
504
|
- `data: object` данные документа (используется при записи);
|
|
501
|
-
- `where: object` условия фильтрации (см. [Фильтрация](
|
|
502
|
-
- `filter: object` параметры выборки (см. [Фильтрация](
|
|
505
|
+
- `where: object` условия фильтрации (см. [Фильтрация](#фильтрация));
|
|
506
|
+
- `filter: object` параметры выборки (см. [Фильтрация](#фильтрация));
|
|
503
507
|
|
|
504
508
|
**Получение репозитория**
|
|
505
509
|
|
|
@@ -835,8 +839,8 @@ if (!product) {
|
|
|
835
839
|
|
|
836
840
|
### repository.findById
|
|
837
841
|
|
|
838
|
-
|
|
839
|
-
|
|
842
|
+
Поиск документа по идентификатору. Если документ не найден, выбрасывается
|
|
843
|
+
ошибка.
|
|
840
844
|
|
|
841
845
|
Сигнатура:
|
|
842
846
|
|
|
@@ -1362,7 +1366,7 @@ const res = await rep.find({
|
|
|
1362
1366
|
|
|
1363
1367
|
Параметр включает связанные документы в результат вызываемого метода.
|
|
1364
1368
|
Названия включаемых связей должны быть определены в текущей модели.
|
|
1365
|
-
(см. [Связи](
|
|
1369
|
+
(см. [Связи](#связи))
|
|
1366
1370
|
|
|
1367
1371
|
**Примеры**
|
|
1368
1372
|
|