@e22m4u/js-repository 0.7.0 → 0.8.0

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 (105) hide show
  1. package/.mocharc.json +2 -3
  2. package/README.md +123 -164
  3. package/dist/cjs/index.cjs +8 -114
  4. package/eslint.config.js +29 -58
  5. package/jsconfig.json +7 -0
  6. package/package.json +11 -19
  7. package/src/adapter/adapter-loader.js +3 -4
  8. package/src/adapter/adapter.js +8 -5
  9. package/src/adapter/adapter.spec.js +10 -9
  10. package/src/adapter/builtin/memory-adapter.js +8 -7
  11. package/src/adapter/builtin/memory-adapter.spec.js +5 -2
  12. package/src/adapter/decorator/default-values-decorator.spec.js +1 -2
  13. package/src/database-schema.js +1 -2
  14. package/src/{database-schema.spec.ts → database-schema.spec.js} +5 -17
  15. package/src/definition/model/index.js +0 -1
  16. package/src/definition/model/model-definition-utils.js +1 -2
  17. package/src/definition/model/model-definition-utils.spec.js +5 -2
  18. package/src/definition/model/properties/index.js +0 -1
  19. package/src/definition/model/relations/index.js +0 -1
  20. package/src/definition/model/relations/relations-definition-validator.js +4 -5
  21. package/src/filter/include-clause-tool.js +8 -6
  22. package/src/index.js +0 -1
  23. package/src/relations/belongs-to-resolver.js +1 -2
  24. package/src/relations/belongs-to-resolver.spec.js +6 -3
  25. package/src/relations/has-many-resolver.js +1 -2
  26. package/src/relations/has-many-resolver.spec.js +6 -3
  27. package/src/relations/has-one-resolver.js +1 -2
  28. package/src/relations/has-one-resolver.spec.js +6 -3
  29. package/src/relations/references-many-resolver.js +1 -2
  30. package/src/relations/references-many-resolver.spec.js +6 -3
  31. package/src/repository/repository.js +1 -2
  32. package/src/utils/is-plain-object.js +4 -4
  33. package/src/adapter/adapter-loader.d.ts +0 -16
  34. package/src/adapter/adapter-registry.d.ts +0 -14
  35. package/src/adapter/adapter.d.ts +0 -153
  36. package/src/adapter/builtin/memory-adapter.d.ts +0 -148
  37. package/src/adapter/decorator/data-sanitizing-decorator.d.ts +0 -14
  38. package/src/adapter/decorator/default-values-decorator.d.ts +0 -14
  39. package/src/adapter/decorator/fields-filtering-decorator.d.ts +0 -14
  40. package/src/adapter/decorator/inclusion-decorator.d.ts +0 -14
  41. package/src/adapter/decorator/index.d.ts +0 -5
  42. package/src/adapter/decorator/property-uniqueness-decorator.d.ts +0 -14
  43. package/src/adapter/index.d.ts +0 -3
  44. package/src/database-schema.d.ts +0 -37
  45. package/src/definition/datasource/datasource-definition-validator.d.ts +0 -14
  46. package/src/definition/datasource/datasource-definition.d.ts +0 -8
  47. package/src/definition/datasource/index.d.ts +0 -2
  48. package/src/definition/definition-registry.d.ts +0 -50
  49. package/src/definition/index.d.ts +0 -3
  50. package/src/definition/model/index.d.ts +0 -6
  51. package/src/definition/model/model-data-sanitizer.d.ts +0 -15
  52. package/src/definition/model/model-definition-utils.d.ts +0 -180
  53. package/src/definition/model/model-definition-validator.d.ts +0 -14
  54. package/src/definition/model/model-definition.d.ts +0 -28
  55. package/src/definition/model/model-definition.js +0 -1
  56. package/src/definition/model/properties/data-type.d.ts +0 -16
  57. package/src/definition/model/properties/index.d.ts +0 -6
  58. package/src/definition/model/properties/primary-keys-definition-validator.d.ts +0 -15
  59. package/src/definition/model/properties/properties-definition-validator.d.ts +0 -15
  60. package/src/definition/model/properties/property-definition.d.ts +0 -23
  61. package/src/definition/model/properties/property-definition.js +0 -1
  62. package/src/definition/model/properties/property-uniqueness-validator.d.ts +0 -31
  63. package/src/definition/model/properties/property-uniqueness.d.ts +0 -14
  64. package/src/definition/model/relations/index.d.ts +0 -3
  65. package/src/definition/model/relations/relation-definition.d.ts +0 -236
  66. package/src/definition/model/relations/relation-definition.js +0 -1
  67. package/src/definition/model/relations/relation-type.d.ts +0 -14
  68. package/src/definition/model/relations/relations-definition-validator.d.ts +0 -15
  69. package/src/errors/index.d.ts +0 -3
  70. package/src/errors/invalid-argument-error.d.ts +0 -6
  71. package/src/errors/invalid-operator-value-error.d.ts +0 -13
  72. package/src/errors/not-implemented-error.d.ts +0 -6
  73. package/src/filter/fields-clause-tool.d.ts +0 -38
  74. package/src/filter/filter-clause.d.ts +0 -348
  75. package/src/filter/include-clause-tool.d.ts +0 -55
  76. package/src/filter/index.d.ts +0 -7
  77. package/src/filter/operator-clause-tool.d.ts +0 -224
  78. package/src/filter/order-clause-tool.d.ts +0 -32
  79. package/src/filter/slice-clause-tool.d.ts +0 -30
  80. package/src/filter/where-clause-tool.d.ts +0 -23
  81. package/src/index.d.ts +0 -9
  82. package/src/relations/belongs-to-resolver.d.ts +0 -46
  83. package/src/relations/has-many-resolver.d.ts +0 -67
  84. package/src/relations/has-one-resolver.d.ts +0 -67
  85. package/src/relations/index.d.ts +0 -4
  86. package/src/relations/references-many-resolver.d.ts +0 -27
  87. package/src/repository/index.d.ts +0 -2
  88. package/src/repository/repository-registry.d.ts +0 -29
  89. package/src/repository/repository.d.ts +0 -183
  90. package/src/types.d.ts +0 -43
  91. package/src/types.js +0 -1
  92. package/src/utils/capitalize.d.ts +0 -6
  93. package/src/utils/clone-deep.d.ts +0 -6
  94. package/src/utils/exclude-object-keys.d.ts +0 -10
  95. package/src/utils/get-value-by-path.d.ts +0 -12
  96. package/src/utils/index.d.ts +0 -12
  97. package/src/utils/is-deep-equal.d.ts +0 -10
  98. package/src/utils/is-plain-object.d.ts +0 -6
  99. package/src/utils/is-promise.d.ts +0 -10
  100. package/src/utils/like-to-regexp.d.ts +0 -14
  101. package/src/utils/model-name-to-model-key.d.ts +0 -6
  102. package/src/utils/select-object-keys.d.ts +0 -10
  103. package/src/utils/singularize.d.ts +0 -6
  104. package/src/utils/string-to-regexp.d.ts +0 -10
  105. package/tsconfig.json +0 -11
package/.mocharc.json CHANGED
@@ -1,5 +1,4 @@
1
1
  {
2
- "extension": ["js", "ts"],
3
- "spec": "src/**/*.spec.{js,ts}",
4
- "require": ["ts-node/register"]
2
+ "extension": ["js"],
3
+ "spec": "src/**/*.spec.js"
5
4
  }
package/README.md CHANGED
@@ -40,7 +40,6 @@
40
40
  - [Has One (полиморфная)](#has-one-полиморфная-версия)
41
41
  - [Has Many (полиморфная)](#has-many-полиморфная-версия)
42
42
  - [Расширение](#расширение)
43
- - [TypeScript](#typescript)
44
43
  - [Тесты](#тесты)
45
44
  - [Лицензия](#лицензия)
46
45
 
@@ -82,10 +81,10 @@ const {DatabaseSchema} = require('@e22m4u/js-repository');
82
81
  Кроме того, *модель* может определять классические связи «один к одному»,
83
82
  «один ко многим» и другие типы отношений между моделями.
84
83
 
85
- Непосредственно чтение и запись данных производится с помощью *репозитория*,
84
+ Непосредственно чтение и запись данных производятся с помощью *репозитория*,
86
85
  который есть у каждой модели с объявленным *источником данных*. Репозиторий
87
86
  может фильтровать запрашиваемые документы, выполнять валидацию свойств
88
- согласно определению модели, и встраивать связанные данные в результат
87
+ согласно определению модели и встраивать связанные данные в результат
89
88
  выборки.
90
89
 
91
90
  - *Источник данных* - определяет способ подключения к базе
@@ -257,17 +256,36 @@ console.log(cityWithCountry);
257
256
 
258
257
  ## Схема
259
258
 
260
- Экземпляр класса `DatabaseSchema` хранит определения источников данных и моделей.
259
+ Экземпляр класса `DatabaseSchema` хранит определения источников данных
260
+ и моделей.
261
261
 
262
262
  **Методы**
263
263
 
264
- - `defineDatasource(datasourceDef: object): this` - добавить источник
265
- - `defineModel(modelDef: object): this` - добавить модель
266
- - `getRepository(modelName: string): Repository` - получить репозиторий
264
+ Добавить источник
267
265
 
268
- **Примеры**
266
+ - `defineDatasource(datasourceDef)`
267
+ - `datasourceDef: object`: определение источника;
268
+ - результат: `this`;
269
+
270
+ Добавить модель:
271
+
272
+ - `defineModel(modelDef)`
273
+ - `modelDef: object`: определение модели;
274
+ - результат: `this`;
275
+
276
+ Получить репозиторий
277
+
278
+ - `getRepository(modelName)`
279
+ - `modelName: string` имя модели;
280
+ - результат: `Repository`;
281
+
282
+ **Пример**
269
283
 
270
- Импорт класса и создание экземпляра схемы.
284
+ Ниже приводится пошаговый пример настройки модели `product` и получения
285
+ экземпляра репозитория, с помощью которого можно управлять данными этой
286
+ коллекции.
287
+
288
+ 1\. Импорт класса и создание экземпляра схемы.
271
289
 
272
290
  ```js
273
291
  import {DatabaseSchema} from '@e22m4u/js-repository';
@@ -275,7 +293,7 @@ import {DatabaseSchema} from '@e22m4u/js-repository';
275
293
  const dbs = new DatabaseSchema();
276
294
  ```
277
295
 
278
- Определение нового источника.
296
+ 2\. Определение нового источника.
279
297
 
280
298
  ```js
281
299
  dbs.defineDatasource({
@@ -284,7 +302,7 @@ dbs.defineDatasource({
284
302
  });
285
303
  ```
286
304
 
287
- Определение новой модели.
305
+ 3\. Определение новой модели.
288
306
 
289
307
  ```js
290
308
  dbs.defineModel({
@@ -297,7 +315,7 @@ dbs.defineModel({
297
315
  });
298
316
  ```
299
317
 
300
- Получение репозитория по названию модели.
318
+ 4\. Получение репозитория по названию модели.
301
319
 
302
320
  ```js
303
321
  const productRep = dbs.getRepository('product');
@@ -370,7 +388,7 @@ dbs.defineModel({
370
388
  ## Свойства
371
389
 
372
390
  Параметр `properties` находится в определении модели и принимает объект, ключи
373
- которого являются свойствами этой модели, а значением тип свойства или объект
391
+ которого являются свойствами этой модели, а значениями тип свойства или объект
374
392
  с дополнительными параметрами.
375
393
 
376
394
  **Тип данных**
@@ -396,15 +414,16 @@ dbs.defineModel({
396
414
 
397
415
  **Параметр `unique`**
398
416
 
399
- Если значением параметра `unique` является `true` или `'strict'`, то выполняется
400
- строгая проверка на уникальность. В этом режиме [пустые значения](#Пустые-значения)
401
- так же подлежат проверке, где `null` и `undefined` также считаются значениями,
402
- которые должны быть уникальными.
417
+ Если значением параметра `unique` является `true` или `'strict'`,
418
+ то выполняется строгая проверка на уникальность. В этом режиме
419
+ [пустые значения](#Пустые-значения) так же подлежат проверке,
420
+ где `null` и `undefined` также считаются значениями, которые
421
+ должны быть уникальными.
403
422
 
404
- Режим `'sparse'` проверяет только значения с полезной нагрузкой, исключая
405
- [пустые значения](#Пустые-значения), список которых отличается в зависимости
406
- от типа свойства. Например, для типа `string` пустым значением будет `undefined`,
407
- `null` и `''` (пустая строка).
423
+ Режим `'sparse'` проверяет только значения с полезной нагрузкой,
424
+ исключая [пустые значения](#Пустые-значения), список которых отличается
425
+ в зависимости от типа свойства. Например, для типа `string` пустыми
426
+ значениями будут `undefined`, `null` и `''` (пустая строка).
408
427
 
409
428
  - `unique: true | 'strict'` строгая проверка на уникальность
410
429
  - `unique: 'sparse'` исключить из проверки [пустые значения](#Пустые-значения)
@@ -503,26 +522,15 @@ dbs.defineModel({
503
522
  **EmptyValuesService**
504
523
 
505
524
  Для переопределения пустых значений необходимо получить экземпляр класса
506
- `EmptyValuesService` из контейнера схемы и вызвать метод, который принимает
507
- тип данных и массив новых значений.
508
-
509
- Интерфейс:
510
-
511
- ```ts
512
- class EmptyValuesService {
513
- /**
514
- * Установить пустые значения
515
- * для определенного типа данных.
516
- *
517
- * @param dataType Тип данных.
518
- * @param emptyValues Массив новых пустых значений.
519
- */
520
- setEmptyValuesOf(
521
- dataType: DataType,
522
- emptyValues: unknown[],
523
- ): this;
524
- }
525
- ```
525
+ `EmptyValuesService` из контейнера схемы и вызвать метод `setEmptyValuesOf`,
526
+ который принимает тип данных и массив новых значений.
527
+
528
+ Сигнатура:
529
+
530
+ - `setEmptyValuesOf(dataType, emptyValues)`
531
+ - `dataType: DataType`: строковый литерал типа;
532
+ - `emptyValues: *[]`: массив новых значений;
533
+ - результат: `this`;
526
534
 
527
535
  **Пример**
528
536
 
@@ -555,24 +563,24 @@ emptyValuesService.setEmptyValuesOf(DataType.NUMBER, [undefined, null]);
555
563
 
556
564
  **Методы**
557
565
 
558
- - [`create(data, filter = undefined)`](#repositorycreate) создать новый документ;
559
- - [`replaceById(id, data, filter = undefined)`](#repositoryreplacebyid) заменить документ полностью;
560
- - [`replaceOrCreate(data, filter = undefined)`](#repositoryreplaceorcreate) заменить или создать новый;
561
- - [`patchById(id, data, filter = undefined)`](#repositorypatchbyid) обновить документ частично;
562
- - [`patch(data, where = undefined)`](#repositorypatch) обновить все документы или по условию;
563
- - [`find(filter = undefined)`](#repositoryfind) найти все документы или по условию;
564
- - [`findOne(filter = undefined)`](#repositoryfindone) найти первый документ или по условию;
565
- - [`findById(id, filter = undefined)`](#repositoryfindbyid) найти документ по идентификатору;
566
- - [`delete(where = undefined)`](#repositorydelete) удалить все документы или по условию;
566
+ - [`create(data, [filter])`](#repositorycreate) создать новый документ;
567
+ - [`replaceById(id, data, [filter])`](#repositoryreplacebyid) заменить документ полностью;
568
+ - [`replaceOrCreate(data, [filter])`](#repositoryreplaceorcreate) заменить или создать новый;
569
+ - [`patchById(id, data, [filter])`](#repositorypatchbyid) обновить документ частично;
570
+ - [`patch(data, [where])`](#repositorypatch) обновить все документы или по условию;
571
+ - [`find([filter])`](#repositoryfind) найти все документы или по условию;
572
+ - [`findOne([filter])`](#repositoryfindone) найти первый документ или по условию;
573
+ - [`findById(id, [filter])`](#repositoryfindbyid) найти документ по идентификатору;
574
+ - [`delete([where])`](#repositorydelete) удалить все документы или по условию;
567
575
  - [`deleteById(id)`](#repositorydeletebyid) удалить документ по идентификатору;
568
576
  - [`exists(id)`](#repositoryexists) проверить существование по идентификатору;
569
- - [`count(where = undefined)`](#repositorycount) подсчет всех документов или по условию;
577
+ - [`count([where])`](#repositorycount) подсчет всех документов или по условию;
570
578
 
571
579
  **Аргументы**
572
580
 
573
581
  - `id: number|string` идентификатор (первичный ключ)
574
582
  - `data: object` данные документа (используется при записи)
575
- - `where: object` условия фильтрации (см. [Фильтрация](#Фильтрация))
583
+ - `where: object` условия выборки (см. [`where`](#where))
576
584
  - `filter: object` параметры выборки (см. [Фильтрация](#Фильтрация))
577
585
 
578
586
  **Получение репозитория**
@@ -612,12 +620,10 @@ const modelRep = dbs.getRepository('myModel');
612
620
 
613
621
  Сигнатура:
614
622
 
615
- ```ts
616
- create(
617
- data: WithOptionalId<FlatData, IdName>,
618
- filter?: ItemFilterClause<FlatData>,
619
- ): Promise<FlatData>;
620
- ```
623
+ - `create(data, [filter])`
624
+ - `data: object`: данные нового документа;
625
+ - `filter?: object`: настройки выборки (см. [Фильтрация](#фильтрация));
626
+ - результат: `Promise<object>`;
621
627
 
622
628
  **Примеры**
623
629
 
@@ -678,13 +684,11 @@ console.log(product);
678
684
 
679
685
  Сигнатура:
680
686
 
681
- ```ts
682
- replaceById(
683
- id: IdType,
684
- data: WithoutId<FlatData, IdName>,
685
- filter?: ItemFilterClause<FlatData>,
686
- ): Promise<FlatData>;
687
- ```
687
+ - `replaceById(id, data, [filter])`
688
+ - `id: number|string`: идентификатор документа;
689
+ - `data: object`: новые данные;
690
+ - `filter?: object`: настройки выборки (см. [Фильтрация](#фильтрация));
691
+ - результат: `Promise<object>`;
688
692
 
689
693
  **Примеры**
690
694
 
@@ -720,12 +724,10 @@ console.log(updatedProduct);
720
724
 
721
725
  Сигнатура:
722
726
 
723
- ```ts
724
- replaceOrCreate(
725
- data: WithOptionalId<FlatData, IdName>,
726
- filter?: ItemFilterClause<FlatData>,
727
- ): Promise<FlatData>;
728
- ```
727
+ - `replaceOrCreate(data, [filter])`
728
+ - `data: object`: данные документа;
729
+ - `filter?: object`: настройки выборки (см. [Фильтрация](#фильтрация));
730
+ - результат: `Promise<object>`;
729
731
 
730
732
  **Примеры**
731
733
 
@@ -768,13 +770,11 @@ console.log(updatedProduct);
768
770
 
769
771
  Сигнатура:
770
772
 
771
- ```ts
772
- patchById(
773
- id: IdType,
774
- data: PartialWithoutId<FlatData, IdName>,
775
- filter?: ItemFilterClause<FlatData>,
776
- ): Promise<FlatData>;
777
- ```
773
+ - `patchById(id, data, [filter])`
774
+ - `id: number|string`: идентификатор обновляемого документа;
775
+ - `data: object`: новые данные;
776
+ - `filter?: object`: настройки выборки (см. [Фильтрация](#фильтрация));
777
+ - результат: `Promise<object>`;
778
778
 
779
779
  **Примеры**
780
780
 
@@ -808,12 +808,10 @@ console.log(updatedProduct);
808
808
 
809
809
  Сигнатура:
810
810
 
811
- ```ts
812
- patch(
813
- data: PartialWithoutId<FlatData, IdName>,
814
- where?: WhereClause<FlatData>,
815
- ): Promise<number>;
816
- ```
811
+ - `patch(data, [where])`
812
+ - `data: object`: новые данные;
813
+ - `where?: object`: условия выборки (см. [`where`](#where));
814
+ - результат: `Promise<number>`;
817
815
 
818
816
  **Примеры**
819
817
 
@@ -843,9 +841,9 @@ const totalCount = await productRep.patch({
843
841
 
844
842
  Сигнатура:
845
843
 
846
- ```ts
847
- find(filter?: FilterClause<FlatData>): Promise<FlatData[]>;
848
- ```
844
+ - `find([filter])`
845
+ - `filter?: object`: настройки выборки (см. [Фильтрация](#фильтрация));
846
+ - результат: `Promise<object[]>`;
849
847
 
850
848
  **Примеры**
851
849
 
@@ -879,11 +877,9 @@ const latestProducts = await productRep.find({
879
877
 
880
878
  Сигнатура:
881
879
 
882
- ```ts
883
- findOne(
884
- filter?: FilterClause<FlatData>,
885
- ): Promise<FlatData | undefined>;
886
- ```
880
+ - `findOne([filter])`
881
+ - `filter?: object`: настройки выборки (см. [Фильтрация](#фильтрация));
882
+ - результат: `Promise<object|undefined>`;
887
883
 
888
884
  **Примеры**
889
885
 
@@ -914,12 +910,10 @@ if (!product) {
914
910
 
915
911
  Сигнатура:
916
912
 
917
- ```ts
918
- findById(
919
- id: IdType,
920
- filter?: ItemFilterClause<FlatData>,
921
- ): Promise<FlatData>;
922
- ```
913
+ - `findById(id, [filter])`
914
+ - `id: number|string`: идентификатор документа;
915
+ - `filter?: object`: настройки выборки (см. [Фильтрация](#фильтрация));
916
+ - результат: `Promise<object|undefined>`;
923
917
 
924
918
  **Примеры**
925
919
 
@@ -950,9 +944,9 @@ const product = await productRep.findById(1, {
950
944
 
951
945
  Сигнатура:
952
946
 
953
- ```ts
954
- delete(where?: WhereClause<FlatData>): Promise<number>;
955
- ```
947
+ - `delete([where])`
948
+ - `where?: object`: условия выборки (см. [`where`](#where));
949
+ - результат: `Promise<number>`;
956
950
 
957
951
  **Примеры**
958
952
 
@@ -977,9 +971,15 @@ const totalCount = await productRep.delete();
977
971
 
978
972
  Сигнатура:
979
973
 
980
- ```ts
981
- deleteById(id: IdType): Promise<boolean>;
982
- ```
974
+ - `deleteById(id)`
975
+ - `id: number|string`: идентификатор документа;
976
+ - результат: `Promise<boolean>`;
977
+
978
+ Результат:
979
+
980
+ - `Promise<boolean>`: логическое значение;
981
+ - `true`: документ был найден и удален;
982
+ - `false`: документ не найден;
983
983
 
984
984
  **Примеры**
985
985
 
@@ -1001,9 +1001,15 @@ if (wasDeleted) {
1001
1001
 
1002
1002
  Сигнатура:
1003
1003
 
1004
- ```ts
1005
- exists(id: IdType): Promise<boolean>;
1006
- ```
1004
+ - `exists(id)`
1005
+ - `id: number|string`: идентификатор документа;
1006
+ - результат: `Promise<boolean>`;
1007
+
1008
+ Результат:
1009
+
1010
+ - `Promise<boolean>`: логическое значение;
1011
+ - `true`: документ с таким идентификатором найден;
1012
+ - `false`: идентификатор не найден;
1007
1013
 
1008
1014
  **Примеры**
1009
1015
 
@@ -1023,9 +1029,9 @@ if (productExists) {
1023
1029
 
1024
1030
  Сигнатура:
1025
1031
 
1026
- ```ts
1027
- count(where?: WhereClause<FlatData>): Promise<number>;
1028
- ```
1032
+ - `count([where])`
1033
+ - `where?: object`: условия выборки (см. [`where`](#where));
1034
+ - результат: `Promise<number>`;
1029
1035
 
1030
1036
  **Примеры**
1031
1037
 
@@ -1045,10 +1051,10 @@ const totalCount = await productRep.count();
1045
1051
 
1046
1052
  ## Фильтрация
1047
1053
 
1048
- Некоторые методы репозитория принимают объект настроек, влияющий
1049
- на возвращаемый результат. Максимально широкий набор таких настроек
1050
- имеет первый параметр метода `find`, где ожидается объект содержащий
1051
- набор опций указанных ниже.
1054
+ Некоторые методы репозитория принимают объект настроек возвращаемого
1055
+ результата. Максимально широкий набор таких настроек имеет первый
1056
+ параметр метода `find`, где ожидается объект, содержащий набор
1057
+ опций указанных ниже.
1052
1058
 
1053
1059
  - `where: object` условия фильтрации по свойствам документа;
1054
1060
  - `order: string|string[]` сортировка по указанным свойствам;
@@ -1917,7 +1923,7 @@ dbs.defineModel({
1917
1923
 
1918
1924
  #### Has One (полиморфная версия)
1919
1925
 
1920
- Обратная сторона полиморфная связи `belongsTo` по принципу *"один к одному"*.
1926
+ Обратная сторона полиморфной связи `belongsTo` по принципу *"один к одному"*.
1921
1927
 
1922
1928
  ```
1923
1929
  Текущая (company) <───────┐ Целевая (license)
@@ -1984,7 +1990,7 @@ dbs.defineModel({
1984
1990
 
1985
1991
  #### Has Many (полиморфная версия)
1986
1992
 
1987
- Обратная сторона полиморфная связи `belongsTo` по принципу *"один ко многим"*.
1993
+ Обратная сторона полиморфной связи `belongsTo` по принципу *"один ко многим"*.
1988
1994
 
1989
1995
  ```
1990
1996
  Текущая (letter) <─────────┐ Целевая (file)
@@ -2097,56 +2103,9 @@ const rep = dbs.getRepository('model');
2097
2103
  console.log(rep instanceof MyRepository); // true
2098
2104
  ```
2099
2105
 
2100
- *i. Так как экземпляры репозитория кэшируется, то замену конструктора
2106
+ *i. Так как экземпляры репозитория кэшируются, то замену конструктора
2101
2107
  следует выполнять до обращения к методу `getRepository`.*
2102
2108
 
2103
- ## TypeScript
2104
-
2105
- Получение типизированного репозитория с указанием интерфейса модели.
2106
-
2107
- ```ts
2108
- import {DataType} from '@e22m4u/js-repository';
2109
- import {RelationType} from '@e22m4u/js-repository';
2110
- import {DatabaseSchema} from '@e22m4u/js-repository';
2111
-
2112
- // const dbs = new DatabaseSchema();
2113
- // dbs.defineDatasource ...
2114
-
2115
- // определение модели "city"
2116
- dbs.defineModel({
2117
- name: 'city',
2118
- datasource: 'myDatasource',
2119
- properties: {
2120
- name: DataType.STRING,
2121
- timeZone: DataType.STRING,
2122
- },
2123
- });
2124
-
2125
- // определение интерфейса "city"
2126
- interface City {
2127
- id: number;
2128
- name?: string;
2129
- timeZone?: string;
2130
- }
2131
-
2132
- // при получении репозитория нужной модели
2133
- // можно указать тип документов
2134
- const cityRep = dbs.getRepository<City>('city');
2135
-
2136
- // теперь, методы репозитория возвращают
2137
- // тип City вместо Record<string, unknown>
2138
- const city: City = await cityRep.create({
2139
- name: 'Moscow',
2140
- timeZone: 'Europe/Moscow',
2141
- });
2142
- ```
2143
-
2144
- Для определения моделей с помощью TypeScript классов,
2145
- рекомендуется использовать специальную версию данного модуля
2146
- [@e22m4u/ts-repository](https://www.npmjs.com/package/@e22m4u/ts-repository),
2147
- поставляемую с набором TypeScript декораторов и дополнительных
2148
- инструментов для работы в TypeScript окружении.
2149
-
2150
2109
  ## Тесты
2151
2110
 
2152
2111
  ```bash