@e22m4u/js-repository 0.8.3 → 0.8.5

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 CHANGED
@@ -15,8 +15,6 @@
15
15
  - [Источник данных](#источник-данных)
16
16
  - [Модель](#модель)
17
17
  - [Свойства](#свойства)
18
- - [Пустые значения](#пустые-значения)
19
- - [Переопределение пустых значений](#переопределение-пустых-значений)
20
18
  - [Репозиторий](#репозиторий)
21
19
  - [create](#repositorycreate)
22
20
  - [replaceById](#repositoryreplacebyid)
@@ -88,9 +86,9 @@ const {DatabaseSchema} = require('@e22m4u/js-repository');
88
86
  согласно определению модели, и встраивать связанные данные в результат
89
87
  выборки.
90
88
 
91
- - *Источник данных* - определяет способ подключения к базе
92
- - *Модель* - описывает структуру документа и связи к другим моделям
93
- - *Репозиторий* - выполняет операции чтения и записи документов модели
89
+ - *Источник данных* - определяет способ подключения к базе;
90
+ - *Модель* - описывает структуру документа и связи к другим моделям;
91
+ - *Репозиторий* - выполняет операции чтения и записи документов модели;
94
92
 
95
93
  ```mermaid
96
94
  flowchart TD
@@ -261,9 +259,9 @@ console.log(cityWithCountry);
261
259
 
262
260
  **Методы**
263
261
 
264
- - `defineDatasource(datasourceDef: object): this` - добавить источник
265
- - `defineModel(modelDef: object): this` - добавить модель
266
- - `getRepository(modelName: string): Repository` - получить репозиторий
262
+ - `defineDatasource(datasourceDef: object): this` - добавить источник;
263
+ - `defineModel(modelDef: object): this` - добавить модель;
264
+ - `getRepository(modelName: string): Repository` - получить репозиторий;
267
265
 
268
266
  **Примеры**
269
267
 
@@ -311,9 +309,9 @@ const productRep = dbs.getRepository('product');
311
309
 
312
310
  **Параметры**
313
311
 
314
- - `name: string` уникальное название
315
- - `adapter: string` выбранный адаптер
316
- - параметры адаптера (если имеются)
312
+ - `name: string` уникальное название;
313
+ - `adapter: string` выбранный адаптер;
314
+ - параметры адаптера (если имеются);
317
315
 
318
316
  **Примеры**
319
317
 
@@ -346,12 +344,12 @@ dbs.defineDatasource({
346
344
 
347
345
  **Параметры**
348
346
 
349
- - `name: string` название модели (обязательно)
350
- - `base: string` название наследуемой модели
351
- - `tableName: string` название коллекции в базе
352
- - `datasource: string` выбранный источник данных
353
- - `properties: object` определения свойств (см. [Свойства](#Свойства))
354
- - `relations: object` определения связей (см. [Связи](#Связи))
347
+ - `name: string` название модели (обязательно);
348
+ - `base: string` название наследуемой модели;
349
+ - `tableName: string` название коллекции в базе;
350
+ - `datasource: string` выбранный источник данных;
351
+ - `properties: object` определения свойств (см. [Свойства](#Свойства));
352
+ - `relations: object` определения связей (см. [Связи](#Связи));
355
353
 
356
354
  **Примеры**
357
355
 
@@ -375,47 +373,50 @@ dbs.defineModel({
375
373
 
376
374
  **Тип данных**
377
375
 
378
- - `DataType.ANY` разрешено любое значение
379
- - `DataType.STRING` только значение типа `string`
380
- - `DataType.NUMBER` только значение типа `number`
381
- - `DataType.BOOLEAN` только значение типа `boolean`
382
- - `DataType.ARRAY` только значение типа `array`
383
- - `DataType.OBJECT` только значение типа `object`
376
+ - `DataType.ANY` разрешено любое значение;
377
+ - `DataType.STRING` только значение типа `string`;
378
+ - `DataType.NUMBER` только значение типа `number`;
379
+ - `DataType.BOOLEAN` только значение типа `boolean`;
380
+ - `DataType.ARRAY` только значение типа `array`;
381
+ - `DataType.OBJECT` только значение типа `object`;
384
382
 
385
383
  **Параметры**
386
384
 
387
- - `type: string` тип допустимого значения (обязательно)
388
- - `itemType: string` тип элемента массива (для `type: 'array'`)
389
- - `model: string` модель объекта (для `type: 'object'`)
390
- - `primaryKey: boolean` объявить свойство первичным ключом
391
- - `columnName: string` переопределение названия колонки
392
- - `columnType: string` тип колонки (определяется адаптером)
393
- - `required: boolean` объявить свойство обязательным
394
- - `default: any` значение по умолчанию
395
- - `unique: boolean | string` проверять значение на уникальность
385
+ - `type: string` тип допустимого значения (обязательно);
386
+ - `itemType: string` тип элемента массива (для `type: 'array'`);
387
+ - `model: string` модель объекта (для `type: 'object'`);
388
+ - `primaryKey: boolean` объявить свойство первичным ключом;
389
+ - `columnName: string` переопределение названия колонки;
390
+ - `columnType: string` тип колонки (определяется адаптером);
391
+ - `required: boolean` объявить свойство обязательным;
392
+ - `default: any` значение по умолчанию (заменяет `undefined` и `null`);
393
+ - `unique: boolean | string` проверять значение на уникальность;
396
394
 
397
395
  **Параметр `unique`**
398
396
 
399
- Если значением параметра `unique` является `true` или `'strict'`, то выполняется
400
- строгая проверка на уникальность. В этом режиме [пустые значения](#Пустые-значения)
401
- так же подлежат проверке, где `null` и `undefined` также считаются значениями,
402
- которые должны быть уникальными.
397
+ Если значением параметра `unique` является `true` или `"strict"`, то выполняется
398
+ строгая проверка на уникальность. В этом режиме любое значение данного свойства
399
+ не может быть представлено более одного раза.
403
400
 
404
- Режим `'sparse'` проверяет только значения с полезной нагрузкой, исключая
405
- [пустые значения](#Пустые-значения), список которых отличается в зависимости
406
- от типа свойства. Например, для типа `string` пустым значением будет `undefined`,
407
- `null` и `''` (пустая строка).
401
+ - `unique: true | 'strict'` строгая проверка на уникальность;
402
+ - `unique: 'sparse'` исключить из проверки ложные значения;
403
+ - `unique: false | 'nonUnique'` не проверять на уникальность (по умолчанию);
408
404
 
409
- - `unique: true | 'strict'` строгая проверка на уникальность
410
- - `unique: 'sparse'` исключить из проверки [пустые значения](#Пустые-значения)
411
- - `unique: false | 'nonUnique'` не проверять на уникальность (по умолчанию)
405
+ Режим `"sparse"` исключает из проверки на уникальность ложные значения с точки
406
+ зрения JavaScript. Указанные ниже значения будут проигнорированы при проверке
407
+ в данном режиме.
408
+
409
+ - `""` пустая строка;
410
+ - `0` число ноль;
411
+ - `false` логическое отрицание;
412
+ - `undefined` и `null`;
412
413
 
413
414
  В качестве значений параметра `unique` можно использовать предопределенные
414
415
  константы как эквивалент строковых значений `strict`, `sparse` и `nonUnique`.
415
416
 
416
- - `PropertyUniqueness.STRICT`
417
- - `PropertyUniqueness.SPARSE`
418
- - `PropertyUniqueness.NON_UNIQUE`
417
+ - `PropertyUniqueness.STRICT`;
418
+ - `PropertyUniqueness.SPARSE`;
419
+ - `PropertyUniqueness.NON_UNIQUE`;
419
420
 
420
421
  **Примеры**
421
422
 
@@ -473,81 +474,6 @@ dbs.defineModel({
473
474
  });
474
475
  ```
475
476
 
476
- ## Пустые значения
477
-
478
- Разные типы свойств имеют свои наборы пустых значений. Эти наборы используются
479
- для определения наличия полезной нагрузки в значении свойства. Например,
480
- параметр `default` в определении свойства устанавливает значение по умолчанию,
481
- только если входящее значение является пустым. Параметр `required` исключает
482
- пустые значения выбрасывая ошибку. А параметр `unique` в режиме `sparse`
483
- наоборот допускает дублирование пустых значений уникального свойства,
484
- поскольку они не участвуют в проверке.
485
-
486
- | константа | тип | пустые значения |
487
- |--------------------|-------------|------------------------------|
488
- | `DataType.ANY` | `"any"` | *пустые значения всех типов* |
489
- | `DataType.STRING` | `"string"` | `undefined`, `null`, `""` |
490
- | `DataType.NUMBER` | `"number"` | `undefined`, `null`, `0` |
491
- | `DataType.BOOLEAN` | `"boolean"` | `undefined`, `null` |
492
- | `DataType.ARRAY` | `"array"` | `undefined`, `null`, `[]` |
493
- | `DataType.OBJECT` | `"object"` | `undefined`, `null`, `{}` |
494
-
495
- ### Переопределение пустых значений
496
-
497
- Набор пустых значений для любого типа данных можно переопределить. Управление
498
- этими наборами осуществляется через специальный сервис, который предоставляет
499
- модуль
500
- [@e22m4u/js-empty-values](https://www.npmjs.com/package/@e22m4u/js-empty-values)
501
- (не требует установки).
502
-
503
- **EmptyValuesService**
504
-
505
- Для переопределения пустых значений необходимо получить экземпляр класса
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
- ```
526
-
527
- **Пример**
528
-
529
- Если свойство с типом `string` является обязательным, то попытка записи пустой
530
- строки приведет к ошибке. Следующий пример демонстрирует, как изменить данное
531
- поведение, оставив в качестве пустых значений только `undefined` и `null`.
532
-
533
- ```js
534
- import {DataType} from '@e22m4u/js-repository';
535
- import {DatabaseSchema} from '@e22m4u/js-repository';
536
- import {EmptyValuesService} from '@e22m4u/js-empty-values';
537
-
538
- const dbs = new DatabaseSchema();
539
-
540
- // получение сервиса для работы с пустыми значениями
541
- const emptyValuesService = dbs.getService(EmptyValuesService);
542
-
543
- // переопределение пустых значений для типа DataType.STRING
544
- emptyValuesService.setEmptyValuesOf(DataType.STRING, [undefined, null]);
545
- ```
546
-
547
- Теперь пустая строка будет успешно проходить проверку для обязательных свойств
548
- с типом `string`, а также не будет заменяться на значение по умолчанию
549
- для необязательных свойств модели.
550
-
551
477
  ## Репозиторий
552
478
 
553
479
  Репозиторий выполняет операции чтения и записи данных определенной модели.
@@ -570,10 +496,10 @@ emptyValuesService.setEmptyValuesOf(DataType.STRING, [undefined, null]);
570
496
 
571
497
  **Аргументы**
572
498
 
573
- - `id: number|string` идентификатор (первичный ключ)
574
- - `data: object` данные документа (используется при записи)
575
- - `where: object` условия фильтрации (см. [Фильтрация](#Фильтрация))
576
- - `filter: object` параметры выборки (см. [Фильтрация](#Фильтрация))
499
+ - `id: number|string` идентификатор (первичный ключ);
500
+ - `data: object` данные документа (используется при записи);
501
+ - `where: object` условия фильтрации (см. [Фильтрация](#Фильтрация));
502
+ - `filter: object` параметры выборки (см. [Фильтрация](#Фильтрация));
577
503
 
578
504
  **Получение репозитория**
579
505
 
@@ -1083,26 +1009,26 @@ const news = await newsRepository.find({
1083
1009
  операторов сравнения.
1084
1010
 
1085
1011
  - [Поиск по значению](#поиск-по-значению-сокращенная-форма)
1086
- - [`eq`](#eq-строгое-равенство) (строгое равенство)
1087
- - [`neq`](#neq-неравенство) (неравенство)
1088
- - [`gt`](#gt-больше-чем) (больше чем)
1089
- - [`lt`](#lt-меньше-чем) (меньше чем)
1090
- - [`gte`](#gte-больше-или-равно) (больше или равно)
1091
- - [`lte`](#lte-меньше-или-равно) (меньше или равно)
1092
- - [`inq`](#inq-в-списке) (в списке)
1093
- - [`nin`](#nin-не-в-списке) (не в списке)
1094
- - [`between`](#between-диапазон) (диапазон)
1095
- - [`exists`](#exists-наличие-свойства) (наличие свойства)
1096
- - [`like`](#like-шаблон) (шаблон)
1097
- - [`nlike`](#nlike-исключающий-шаблон) (исключающий шаблон)
1098
- - [`ilike`](#ilike-регистронезависимый-шаблон) (регистронезависимый шаблон)
1099
- - [`nilike`](#nilike-регистронезависимый-шаблон-исключения) (регистронезависимый шаблон исключения)
1100
- - [`regexp`](#regexp-регулярное-выражение) (регулярное выражение)
1012
+ - [`eq`](#eq-строгое-равенство) строгое равенство;
1013
+ - [`neq`](#neq-неравенство) неравенство;
1014
+ - [`gt`](#gt-больше-чем) больше чем;
1015
+ - [`lt`](#lt-меньше-чем) меньше чем;
1016
+ - [`gte`](#gte-больше-или-равно) больше или равно;
1017
+ - [`lte`](#lte-меньше-или-равно) меньше или равно;
1018
+ - [`inq`](#inq-в-списке) в списке;
1019
+ - [`nin`](#nin-не-в-списке) не в списке;
1020
+ - [`between`](#between-диапазон) диапазон;
1021
+ - [`exists`](#exists-наличие-свойства) наличие свойства;
1022
+ - [`like`](#like-шаблон) *SQL*-подобный шаблон;
1023
+ - [`nlike`](#nlike-исключающий-шаблон) исключающий шаблон;
1024
+ - [`ilike`](#ilike-регистронезависимый-шаблон) регистронезависимый шаблон;
1025
+ - [`nilike`](#nilike-регистронезависимый-шаблон-исключения) регистронезависимый шаблон исключения;
1026
+ - [`regexp`](#regexp-регулярное-выражение) регулярное выражение;
1101
1027
 
1102
1028
  Условия можно объединять логическими операторами:
1103
1029
 
1104
- - [`and`](#and-логическое-и) (логическое И)
1105
- - [`or`](#or-логическое-или) (логическое ИЛИ)
1030
+ - [`and`](#and-логическое-и) логическое *И*;
1031
+ - [`or`](#or-логическое-или) логическое *ИЛИ*;
1106
1032
 
1107
1033
  #### Поиск по значению (сокращенная форма)
1108
1034
 
@@ -2141,12 +2067,6 @@ const city: City = await cityRep.create({
2141
2067
  });
2142
2068
  ```
2143
2069
 
2144
- Для определения моделей с помощью TypeScript классов,
2145
- рекомендуется использовать специальную версию данного модуля
2146
- [@e22m4u/ts-repository](https://www.npmjs.com/package/@e22m4u/ts-repository),
2147
- поставляемую с набором TypeScript декораторов и дополнительных
2148
- инструментов для работы в TypeScript окружении.
2149
-
2150
2070
  ## Тесты
2151
2071
 
2152
2072
  ```bash