@e22m4u/js-repository 0.8.9 → 0.8.10
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 +86 -16
- package/dist/cjs/index.cjs +7 -2
- package/eslint.config.js +0 -4
- package/package.json +19 -19
package/README.md
CHANGED
|
@@ -3,18 +3,21 @@
|
|
|
3
3
|

|
|
4
4
|

|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
ORM/ODM библиотека для Node.js, реализующая слой управления данными на основе
|
|
7
|
+
паттерна «Репозиторий». Унифицирует интерфейс различных баз данных, фильтрацию
|
|
8
|
+
и работу со связанными документами независимо от источника.
|
|
7
9
|
|
|
8
10
|
## Содержание
|
|
9
11
|
|
|
10
12
|
- [Установка](#установка)
|
|
11
13
|
- [Импорт](#импорт)
|
|
12
14
|
- [Описание](#описание)
|
|
13
|
-
- [
|
|
15
|
+
- [Терминология](#терминология)
|
|
16
|
+
- [Базовый пример](#пример)
|
|
14
17
|
- [Схема баз данных](#схема-баз-данных)
|
|
15
18
|
- [Источник данных](#источник-данных)
|
|
16
19
|
- [Модель](#модель)
|
|
17
|
-
- [Свойства](#свойства)
|
|
20
|
+
- [Свойства](#свойства)
|
|
18
21
|
- [Репозиторий](#репозиторий)
|
|
19
22
|
- [create](#repositorycreate)
|
|
20
23
|
- [replaceById](#repositoryreplacebyid)
|
|
@@ -50,10 +53,15 @@ npm install @e22m4u/js-repository
|
|
|
50
53
|
|
|
51
54
|
Опционально устанавливается нужный адаптер.
|
|
52
55
|
|
|
53
|
-
| адаптер | описание
|
|
54
|
-
|
|
55
|
-
| `memory` | Виртуальная база в памяти процесса
|
|
56
|
-
| `mongodb` | MongoDB - документо-ориентированная база данных
|
|
56
|
+
| адаптер | описание | |
|
|
57
|
+
|-----------|---------------------------------------------------|------------------------------------------------------------------------------------|
|
|
58
|
+
| `memory` | Виртуальная база данных в памяти процесса Node.js | *встроенный* |
|
|
59
|
+
| `mongodb` | MongoDB - документо-ориентированная база данных | [*установка*](https://www.npmjs.com/package/@e22m4u/js-repository-mongodb-adapter) |
|
|
60
|
+
|
|
61
|
+
**Утилиты**
|
|
62
|
+
|
|
63
|
+
- [@e22m4u/js-repository-json-schema](https://www.npmjs.com/package/@e22m4u/js-repository-json-schema)
|
|
64
|
+
*Генератор JSON Schema для моделей репозитория*
|
|
57
65
|
|
|
58
66
|
## Импорт
|
|
59
67
|
|
|
@@ -122,11 +130,49 @@ flowchart TD
|
|
|
122
130
|
G-->K
|
|
123
131
|
```
|
|
124
132
|
|
|
133
|
+
### Терминология
|
|
134
|
+
|
|
135
|
+
Описание ключевых понятий.
|
|
136
|
+
|
|
137
|
+
- **Схема баз данных** (*DatabaseSchema*) - хранит определения источников
|
|
138
|
+
данных и моделей. Связывает модели с источниками данных и предоставляет
|
|
139
|
+
доступ к экземплярам репозитория.
|
|
140
|
+
|
|
141
|
+
- **Источник данных** (*Datasource*) - именованная конфигурация подключения
|
|
142
|
+
к базе данных. Содержит название используемого адаптера и параметры соединения.
|
|
143
|
+
|
|
144
|
+
- **Адаптер** (*Adapter*) - низкоуровневая реализация для взаимодействия с
|
|
145
|
+
конкретной СУБД. Обеспечивает совместимость хранилища с унифицированным
|
|
146
|
+
интерфейсом репозитория.
|
|
147
|
+
|
|
148
|
+
- **Коллекция** (*Collection*) - физическая область хранения записей или
|
|
149
|
+
документов в базе данных, ассоциированная с конкретной моделью. В контексте
|
|
150
|
+
реляционных баз данных является эквивалентом таблицы.
|
|
151
|
+
|
|
152
|
+
- **Модель** (*Model*) - структурное описание коллекции базы данных. Содержит
|
|
153
|
+
определения свойств документа и отношений с другими моделями.
|
|
154
|
+
|
|
155
|
+
- **Свойство** (*Property*) - описание отдельного поля модели. Определяет тип
|
|
156
|
+
данных, значение по умолчанию, обязательность наличия и правила проверки
|
|
157
|
+
на уникальность.
|
|
158
|
+
|
|
159
|
+
- **Связь** (*Relation*) - абстракция отношений между моделями. Поддерживает
|
|
160
|
+
классические отношения и полиморфный режим динамического определения
|
|
161
|
+
целевой модели через поле дискриминатора.
|
|
162
|
+
|
|
163
|
+
- **Дискриминатор** (*Discriminator*) - свойство документа в рамках полиморфной
|
|
164
|
+
связи. Хранит строковое название целевой модели, что позволяет динамически
|
|
165
|
+
определять связанную коллекцию при выполнении запросов.
|
|
166
|
+
|
|
167
|
+
- **Репозиторий** (*Repository*) - абстрактный фасад для работы с данными
|
|
168
|
+
конкретной модели. Изолирует логику приложения от деталей реализации
|
|
169
|
+
базы данных. Выполняет операции записи, поиска, обновления и удаления.
|
|
170
|
+
|
|
125
171
|
## Пример
|
|
126
172
|
|
|
127
|
-
Пример демонстрирует создание экземпляра
|
|
128
|
-
и модели `country`.
|
|
129
|
-
|
|
173
|
+
Пример демонстрирует создание экземпляра `DatabaseSchema`, объявление источника
|
|
174
|
+
данных `myDb` и модели `country`. Далее в коллекцию добавляется новый документ,
|
|
175
|
+
содержимого которого выводится в консоль.
|
|
130
176
|
|
|
131
177
|
```
|
|
132
178
|
Страна (country)
|
|
@@ -351,8 +397,8 @@ dbs.defineDatasource({
|
|
|
351
397
|
- `base: string` название наследуемой модели;
|
|
352
398
|
- `tableName: string` название коллекции в базе;
|
|
353
399
|
- `datasource: string` выбранный источник данных;
|
|
354
|
-
- `properties: object` определения свойств (см. [Свойства](
|
|
355
|
-
- `relations: object` определения связей (см. [Связи](
|
|
400
|
+
- `properties: object` определения свойств (см. [Свойства](#свойства));
|
|
401
|
+
- `relations: object` определения связей (см. [Связи](#связи));
|
|
356
402
|
|
|
357
403
|
**Примеры**
|
|
358
404
|
|
|
@@ -368,13 +414,32 @@ dbs.defineModel({
|
|
|
368
414
|
});
|
|
369
415
|
```
|
|
370
416
|
|
|
371
|
-
|
|
417
|
+
### Свойства
|
|
372
418
|
|
|
373
419
|
Параметр `properties` находится в определении модели и принимает объект, ключи
|
|
374
420
|
которого являются свойствами этой модели, а значением тип свойства или объект
|
|
375
|
-
с дополнительными параметрами.
|
|
421
|
+
с дополнительными параметрами. Параметры свойства используется репозиторием
|
|
422
|
+
для проверки документов перед сохранением.
|
|
376
423
|
|
|
377
|
-
|
|
424
|
+
```js
|
|
425
|
+
dbs.defineModel({
|
|
426
|
+
name: 'user',
|
|
427
|
+
properties: {
|
|
428
|
+
// краткая форма (только тип)
|
|
429
|
+
name: DataType.STRING,
|
|
430
|
+
// расширенное определение (см. далее)
|
|
431
|
+
email: {
|
|
432
|
+
type: DataType.STRING,
|
|
433
|
+
unique: PropertyUniqueness.SPARSE,
|
|
434
|
+
default: '',
|
|
435
|
+
},
|
|
436
|
+
},
|
|
437
|
+
});
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
*i. В контексте реляционных баз данных свойства отражают колонки таблицы.*
|
|
441
|
+
|
|
442
|
+
**Типы данных**
|
|
378
443
|
|
|
379
444
|
- `DataType.ANY` разрешено любое значение;
|
|
380
445
|
- `DataType.STRING` только значение типа `string`;
|
|
@@ -383,7 +448,12 @@ dbs.defineModel({
|
|
|
383
448
|
- `DataType.ARRAY` только значение типа `array`;
|
|
384
449
|
- `DataType.OBJECT` только значение типа `object`;
|
|
385
450
|
|
|
386
|
-
|
|
451
|
+
**Параметры свойства**
|
|
452
|
+
|
|
453
|
+
Объект с параметрами (расширенное определение) позволяет задавать значения
|
|
454
|
+
по умолчанию, правила проверки на уникальность и обязательность наличия данных.
|
|
455
|
+
Для массивов и вложенных объектов предусмотрено указание типа элемента
|
|
456
|
+
и название модели.
|
|
387
457
|
|
|
388
458
|
- `type: string` тип допустимого значения (обязательно);
|
|
389
459
|
- `itemType?: string` тип элемента массива (для `type: 'array'`);
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -9,8 +9,13 @@ var __glob = (map) => (path) => {
|
|
|
9
9
|
if (fn) return fn();
|
|
10
10
|
throw new Error("Module not found in bundle: " + path);
|
|
11
11
|
};
|
|
12
|
-
var __esm = (fn, res) => function __init() {
|
|
13
|
-
|
|
12
|
+
var __esm = (fn, res, err) => function __init() {
|
|
13
|
+
if (err) throw err[0];
|
|
14
|
+
try {
|
|
15
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
16
|
+
} catch (e) {
|
|
17
|
+
throw err = [e], e;
|
|
18
|
+
}
|
|
14
19
|
};
|
|
15
20
|
var __export = (target, all) => {
|
|
16
21
|
for (var name in all)
|
package/eslint.config.js
CHANGED
|
@@ -2,7 +2,6 @@ import globals from 'globals';
|
|
|
2
2
|
import eslintJs from '@eslint/js';
|
|
3
3
|
import eslintJsdocPlugin from 'eslint-plugin-jsdoc';
|
|
4
4
|
import eslintMochaPlugin from 'eslint-plugin-mocha';
|
|
5
|
-
import eslintImportPlugin from 'eslint-plugin-import';
|
|
6
5
|
import eslintPrettierConfig from 'eslint-config-prettier';
|
|
7
6
|
import eslintChaiExpectPlugin from 'eslint-plugin-chai-expect';
|
|
8
7
|
|
|
@@ -18,19 +17,16 @@ export default [{
|
|
|
18
17
|
plugins: {
|
|
19
18
|
'jsdoc': eslintJsdocPlugin,
|
|
20
19
|
'mocha': eslintMochaPlugin,
|
|
21
|
-
'import': eslintImportPlugin,
|
|
22
20
|
'chai-expect': eslintChaiExpectPlugin,
|
|
23
21
|
},
|
|
24
22
|
rules: {
|
|
25
23
|
...eslintJs.configs.recommended.rules,
|
|
26
24
|
...eslintPrettierConfig.rules,
|
|
27
|
-
...eslintImportPlugin.flatConfigs.recommended.rules,
|
|
28
25
|
...eslintMochaPlugin.configs.recommended.rules,
|
|
29
26
|
...eslintChaiExpectPlugin.configs['recommended-flat'].rules,
|
|
30
27
|
...eslintJsdocPlugin.configs['flat/recommended-error'].rules,
|
|
31
28
|
'curly': 'error',
|
|
32
29
|
'no-duplicate-imports': 'error',
|
|
33
|
-
'import/export': 0,
|
|
34
30
|
'jsdoc/reject-any-type': 0,
|
|
35
31
|
'jsdoc/reject-function-type': 0,
|
|
36
32
|
'jsdoc/require-param-description': 0,
|
package/package.json
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@e22m4u/js-repository",
|
|
3
|
-
"version": "0.8.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.8.10",
|
|
4
|
+
"description": "ORM/ODM библиотека для работы с базами данных",
|
|
5
5
|
"author": "Mikhail Evstropov <e22m4u@yandex.ru>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"keywords": [
|
|
8
|
-
"
|
|
9
|
-
"
|
|
8
|
+
"js-repository",
|
|
9
|
+
"orm",
|
|
10
|
+
"odm",
|
|
10
11
|
"database",
|
|
11
12
|
"datasource",
|
|
12
13
|
"repository",
|
|
13
14
|
"relations"
|
|
14
15
|
],
|
|
15
|
-
"homepage": "https://
|
|
16
|
+
"homepage": "https://github.com/e22m4u/js-repository",
|
|
16
17
|
"repository": {
|
|
17
18
|
"type": "git",
|
|
18
|
-
"url": "git+https://
|
|
19
|
+
"url": "git+https://github.com/e22m4u/js-repository.git"
|
|
19
20
|
},
|
|
20
21
|
"type": "module",
|
|
21
22
|
"types": "./src/index.d.ts",
|
|
@@ -43,27 +44,26 @@
|
|
|
43
44
|
"@e22m4u/js-service": "~0.6.2"
|
|
44
45
|
},
|
|
45
46
|
"devDependencies": {
|
|
46
|
-
"@commitlint/cli": "~
|
|
47
|
-
"@commitlint/config-conventional": "~
|
|
47
|
+
"@commitlint/cli": "~21.2.1",
|
|
48
|
+
"@commitlint/config-conventional": "~21.2.0",
|
|
48
49
|
"@e22m4u/js-spy": "~0.3.6",
|
|
49
|
-
"@eslint/js": "~
|
|
50
|
+
"@eslint/js": "~10.0.1",
|
|
50
51
|
"@types/chai": "~5.2.3",
|
|
51
52
|
"@types/chai-as-promised": "~8.0.2",
|
|
52
53
|
"@types/mocha": "~10.0.10",
|
|
53
|
-
"c8": "~
|
|
54
|
+
"c8": "~12.0.0",
|
|
54
55
|
"chai": "~6.2.2",
|
|
55
56
|
"chai-as-promised": "~8.0.2",
|
|
56
|
-
"esbuild": "~0.
|
|
57
|
-
"eslint": "~
|
|
57
|
+
"esbuild": "~0.28.1",
|
|
58
|
+
"eslint": "~10.7.0",
|
|
58
59
|
"eslint-config-prettier": "~10.1.8",
|
|
59
|
-
"eslint-plugin-chai-expect": "~4.
|
|
60
|
-
"eslint-plugin-
|
|
61
|
-
"eslint-plugin-
|
|
62
|
-
"eslint-plugin-mocha": "~11.2.0",
|
|
60
|
+
"eslint-plugin-chai-expect": "~4.1.0",
|
|
61
|
+
"eslint-plugin-jsdoc": "~63.2.0",
|
|
62
|
+
"eslint-plugin-mocha": "~11.3.0",
|
|
63
63
|
"husky": "~9.1.7",
|
|
64
|
-
"mocha": "~11.7.
|
|
65
|
-
"prettier": "~3.
|
|
64
|
+
"mocha": "~11.7.6",
|
|
65
|
+
"prettier": "~3.9.6",
|
|
66
66
|
"rimraf": "~6.1.3",
|
|
67
|
-
"typescript": "~
|
|
67
|
+
"typescript": "~7.0.2"
|
|
68
68
|
}
|
|
69
69
|
}
|