@hile/typeorm 1.0.7 → 1.0.9
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 +22 -18
- package/SKILL.md +35 -76
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @hile/typeorm
|
|
2
2
|
|
|
3
|
-
基于 `@hile/core` 的 TypeORM 集成:将
|
|
3
|
+
基于 `@hile/core` 的 TypeORM 集成:将 `DataSource` 封装为 Hile 服务(单例、可优雅销毁),并提供事务辅助函数 `transaction`。
|
|
4
4
|
|
|
5
5
|
## 安装
|
|
6
6
|
|
|
@@ -8,12 +8,10 @@
|
|
|
8
8
|
pnpm add @hile/typeorm
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
同时安装依赖:`@hile/core`、`typeorm`。
|
|
12
12
|
|
|
13
13
|
## 快速开始
|
|
14
14
|
|
|
15
|
-
通过环境变量配置数据库,用 `loadService` 获取 DataSource:
|
|
16
|
-
|
|
17
15
|
```typescript
|
|
18
16
|
import { loadService } from '@hile/core'
|
|
19
17
|
import typeormService from '@hile/typeorm'
|
|
@@ -24,7 +22,7 @@ const ds = await loadService(typeormService)
|
|
|
24
22
|
|
|
25
23
|
## 环境变量
|
|
26
24
|
|
|
27
|
-
DataSource 从以下环境变量读取配置:
|
|
25
|
+
默认 DataSource 从以下环境变量读取配置:
|
|
28
26
|
|
|
29
27
|
| 变量 | 说明 |
|
|
30
28
|
|------|------|
|
|
@@ -34,15 +32,20 @@ DataSource 从以下环境变量读取配置:
|
|
|
34
32
|
| `TYPEORM_PASSWORD` | 密码 |
|
|
35
33
|
| `TYPEORM_DATABASE` | 数据库名 |
|
|
36
34
|
| `TYPEORM_PORT` | 端口 |
|
|
37
|
-
| `TYPEORM_CHARSET` |
|
|
35
|
+
| `TYPEORM_CHARSET` | 字符集 |
|
|
38
36
|
| `TYPEORM_ENTITY_PREFIX` | 实体表名前缀 |
|
|
39
37
|
| `TYPEORM_ENTITIES` | 实体目录(单一路径) |
|
|
40
38
|
|
|
41
|
-
|
|
39
|
+
行为说明:
|
|
40
|
+
|
|
41
|
+
- `synchronize: true`
|
|
42
|
+
- 当 `NODE_ENV === 'development'` 时启用 `logging`
|
|
43
|
+
- 未配置 `TYPEORM_ENTITIES` 时,实体数组为空
|
|
44
|
+
- 进程退出时通过 Hile 的 shutdown 自动销毁连接
|
|
42
45
|
|
|
43
|
-
##
|
|
46
|
+
## 事务辅助
|
|
44
47
|
|
|
45
|
-
使用 `transaction` 在 DataSource
|
|
48
|
+
使用 `transaction` 在 DataSource 上执行事务,并注册失败时的回滚逻辑(LIFO):
|
|
46
49
|
|
|
47
50
|
```typescript
|
|
48
51
|
import { loadService } from '@hile/core'
|
|
@@ -52,20 +55,21 @@ import typeormService from '@hile/typeorm'
|
|
|
52
55
|
const ds = await loadService(typeormService)
|
|
53
56
|
|
|
54
57
|
const result = await transaction(ds, async (runner, rollback) => {
|
|
55
|
-
//
|
|
58
|
+
// 用 runner 执行数据库操作
|
|
56
59
|
rollback(() => {
|
|
57
|
-
//
|
|
60
|
+
// 事务失败时执行的补偿逻辑
|
|
58
61
|
})
|
|
62
|
+
|
|
59
63
|
return value
|
|
60
64
|
})
|
|
61
65
|
```
|
|
62
66
|
|
|
63
|
-
-
|
|
64
|
-
-
|
|
67
|
+
- 成功:提交事务并返回回调结果
|
|
68
|
+
- 失败:回滚事务,并按后进先出顺序执行 `rollback(fn)` 注册函数,最后抛出原错误
|
|
65
69
|
|
|
66
70
|
## 与 @hile/cli 一起使用
|
|
67
71
|
|
|
68
|
-
|
|
72
|
+
可在 `package.json` 配置自动加载:
|
|
69
73
|
|
|
70
74
|
```json
|
|
71
75
|
{
|
|
@@ -75,15 +79,15 @@ const result = await transaction(ds, async (runner, rollback) => {
|
|
|
75
79
|
}
|
|
76
80
|
```
|
|
77
81
|
|
|
78
|
-
|
|
82
|
+
这样应用启动时会初始化 DataSource,退出时自动销毁。
|
|
79
83
|
|
|
80
84
|
## 开发
|
|
81
85
|
|
|
82
86
|
```bash
|
|
83
87
|
pnpm install
|
|
84
|
-
pnpm build
|
|
85
|
-
pnpm dev
|
|
86
|
-
pnpm test
|
|
88
|
+
pnpm build
|
|
89
|
+
pnpm dev
|
|
90
|
+
pnpm test
|
|
87
91
|
```
|
|
88
92
|
|
|
89
93
|
## License
|
package/SKILL.md
CHANGED
|
@@ -1,118 +1,77 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hile-typeorm
|
|
3
|
-
description:
|
|
3
|
+
description: @hile/typeorm 的代码生成与使用规范。适用于 DataSource 服务加载、transaction 事务封装、及与 @hile/core/@hile/cli 集成场景。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# @hile/typeorm
|
|
6
|
+
# @hile/typeorm SKILL
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
本文档规范 `@hile/typeorm` 的使用方式,确保 DataSource 生命周期与事务行为一致。
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
## 1. 架构总览
|
|
10
|
+
## 1. 架构概览
|
|
13
11
|
|
|
14
|
-
`@hile/typeorm`
|
|
12
|
+
`@hile/typeorm` 提供:
|
|
15
13
|
|
|
16
|
-
-
|
|
17
|
-
-
|
|
14
|
+
- 默认导出:Hile 服务化的 TypeORM `DataSource`
|
|
15
|
+
- `transaction`:事务封装,支持失败时 LIFO 执行补偿回调
|
|
18
16
|
|
|
19
|
-
依赖:`@hile/core`、`typeorm
|
|
20
|
-
|
|
21
|
-
---
|
|
17
|
+
依赖:`@hile/core`、`typeorm`。
|
|
22
18
|
|
|
23
|
-
## 2.
|
|
24
|
-
|
|
25
|
-
### 2.1 环境变量(DataSource 默认服务)
|
|
19
|
+
## 2. 环境变量
|
|
26
20
|
|
|
27
21
|
| 变量 | 说明 |
|
|
28
|
-
|
|
22
|
+
|---|---|
|
|
29
23
|
| `TYPEORM_TYPE` | 数据库类型 |
|
|
30
24
|
| `TYPEORM_HOST` | 主机 |
|
|
31
25
|
| `TYPEORM_USERNAME` | 用户名 |
|
|
32
26
|
| `TYPEORM_PASSWORD` | 密码 |
|
|
33
27
|
| `TYPEORM_DATABASE` | 数据库名 |
|
|
34
|
-
| `TYPEORM_PORT` |
|
|
35
|
-
| `TYPEORM_CHARSET` |
|
|
36
|
-
| `TYPEORM_ENTITY_PREFIX` |
|
|
37
|
-
| `TYPEORM_ENTITIES` |
|
|
38
|
-
|
|
39
|
-
DataSource 行为:`synchronize: true`;`logging` 在 `NODE_ENV === 'development'` 时为 `true`。未设置 `TYPEORM_ENTITIES` 时 `entities` 为空数组。
|
|
40
|
-
|
|
41
|
-
### 2.2 类型(生成代码时须遵循)
|
|
28
|
+
| `TYPEORM_PORT` | 端口(字符串转数字) |
|
|
29
|
+
| `TYPEORM_CHARSET` | 字符集 |
|
|
30
|
+
| `TYPEORM_ENTITY_PREFIX` | 表名前缀 |
|
|
31
|
+
| `TYPEORM_ENTITIES` | 实体目录(单一路径) |
|
|
42
32
|
|
|
43
|
-
|
|
44
|
-
- **transaction** 签名:
|
|
45
|
-
|
|
46
|
-
```typescript
|
|
47
|
-
function transaction<T>(
|
|
48
|
-
datasource: DataSource,
|
|
49
|
-
callback: (
|
|
50
|
-
runner: QueryRunner,
|
|
51
|
-
rollback: (roll: () => unknown | Promise<unknown>) => number
|
|
52
|
-
) => Promise<T>
|
|
53
|
-
): Promise<T>;
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
- 默认服务:`defineService(async (shutdown) => { ... return connection; })`,在 `connection.initialize()` 前 `shutdown(() => connection.destroy())`。
|
|
57
|
-
|
|
58
|
-
---
|
|
33
|
+
行为:
|
|
59
34
|
|
|
60
|
-
|
|
35
|
+
- `synchronize: true`
|
|
36
|
+
- `NODE_ENV === 'development'` 时 `logging: true`
|
|
37
|
+
- 未设置 `TYPEORM_ENTITIES` 时实体为空数组
|
|
61
38
|
|
|
62
|
-
|
|
39
|
+
## 3. 标准模板
|
|
63
40
|
|
|
64
|
-
|
|
41
|
+
### 3.1 加载默认 DataSource 服务
|
|
65
42
|
|
|
66
43
|
```typescript
|
|
67
44
|
import { loadService } from '@hile/core'
|
|
68
45
|
import typeormService from '@hile/typeorm'
|
|
69
46
|
|
|
70
47
|
const ds = await loadService(typeormService)
|
|
71
|
-
// 使用 ds 进行 TypeORM 操作
|
|
72
48
|
```
|
|
73
49
|
|
|
74
|
-
|
|
75
|
-
- 仅通过 `loadService(默认导出)` 获取 DataSource,不要自行 `new DataSource` 并暴露为“全局数据源”与 Hile 并存。
|
|
76
|
-
- 环境变量在应用启动前必须配置完整,否则 DataSource 初始化可能失败。
|
|
77
|
-
|
|
78
|
-
### 3.2 在事务中执行并注册回滚
|
|
79
|
-
|
|
80
|
-
**模板:**
|
|
50
|
+
### 3.2 事务执行与补偿
|
|
81
51
|
|
|
82
52
|
```typescript
|
|
83
|
-
import { loadService } from '@hile/core'
|
|
84
53
|
import { transaction } from '@hile/typeorm'
|
|
85
|
-
import typeormService from '@hile/typeorm'
|
|
86
|
-
|
|
87
|
-
const ds = await loadService(typeormService)
|
|
88
54
|
|
|
89
55
|
const result = await transaction(ds, async (runner, rollback) => {
|
|
90
|
-
|
|
91
|
-
|
|
56
|
+
rollback(async () => {
|
|
57
|
+
// 事务失败时执行的补偿逻辑
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
// 使用 runner 执行写操作
|
|
92
61
|
return value
|
|
93
62
|
})
|
|
94
63
|
```
|
|
95
64
|
|
|
96
|
-
|
|
97
|
-
- 第一个参数必须是 `DataSource` 实例(通常来自 `loadService(typeormService)`)。
|
|
98
|
-
- 回调内需要“事务失败时执行”的逻辑通过 `rollback(fn)` 注册,不要依赖在回调外再执行清理。
|
|
99
|
-
|
|
100
|
-
### 3.3 与 @hile/core 的约定
|
|
101
|
-
|
|
102
|
-
- 本包默认导出是 Hile 服务(`defineService`),遵循 core 的 SKILL:服务函数为 `async (shutdown)`,资源创建后立即 `shutdown(() => connection.destroy())`。
|
|
103
|
-
- 其他服务若依赖 DataSource,应在该服务函数内 `loadService(typeormService)` 获取,不要在模块顶层缓存 DataSource。
|
|
65
|
+
## 4. 强制规则
|
|
104
66
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
- **不要**省略 `shutdown(() => connection.destroy())` 或将其放在 `initialize()` 之后才注册(应在连接初始化前注册,与源码一致)。
|
|
110
|
-
|
|
111
|
-
---
|
|
67
|
+
1. 统一通过 `loadService(typeormService)` 获取 DataSource。
|
|
68
|
+
2. 不在多个模块里自行 new 全局 DataSource 与本包混用。
|
|
69
|
+
3. 需要失败补偿时,使用 `rollback(fn)` 注册,不在事务外分散处理。
|
|
70
|
+
4. 依赖 DataSource 的服务在函数内部 `loadService`,不要模块顶层缓存。
|
|
112
71
|
|
|
113
|
-
##
|
|
72
|
+
## 5. API 速查
|
|
114
73
|
|
|
115
74
|
| 导出 | 说明 |
|
|
116
|
-
|
|
117
|
-
| 默认导出 |
|
|
118
|
-
| `transaction(datasource, callback)` |
|
|
75
|
+
|---|---|
|
|
76
|
+
| 默认导出 | Hile 服务化 DataSource |
|
|
77
|
+
| `transaction(datasource, callback)` | 事务封装,失败时执行 rollback 队列 |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hile/typeorm",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"description": "TypeORM DataSource as Hile service with transaction helper",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"vitest": "^4.0.18"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@hile/core": "1.0.
|
|
25
|
+
"@hile/core": "^1.0.17",
|
|
26
26
|
"typeorm": "^0.3.28"
|
|
27
27
|
},
|
|
28
|
-
"gitHead": "
|
|
28
|
+
"gitHead": "6672fc4cdc551c4265912cc85ee2e96fc44bc4c9"
|
|
29
29
|
}
|