wok-server 0.1.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.
- package/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/cache/cache.js +94 -0
- package/dist/cache/config.js +19 -0
- package/dist/cache/index.js +27 -0
- package/dist/cache/purge-task.js +56 -0
- package/dist/cache/stat.js +47 -0
- package/dist/config/convert.js +36 -0
- package/dist/config/exception.js +14 -0
- package/dist/config/index.js +67 -0
- package/dist/http-client/index.js +132 -0
- package/dist/i18n/ar.js +17 -0
- package/dist/i18n/de.js +17 -0
- package/dist/i18n/en-us.js +17 -0
- package/dist/i18n/es.js +17 -0
- package/dist/i18n/fr.js +17 -0
- package/dist/i18n/i18n.js +231 -0
- package/dist/i18n/index.js +52 -0
- package/dist/i18n/ja.js +17 -0
- package/dist/i18n/ko.js +17 -0
- package/dist/i18n/msg.js +2 -0
- package/dist/i18n/pt.js +17 -0
- package/dist/i18n/ru.js +17 -0
- package/dist/i18n/tag.js +18 -0
- package/dist/i18n/zh-HK.js +17 -0
- package/dist/i18n/zh-TW.js +17 -0
- package/dist/i18n/zh-cn.js +17 -0
- package/dist/index.js +13 -0
- package/dist/log/config.js +28 -0
- package/dist/log/date.js +21 -0
- package/dist/log/file.js +79 -0
- package/dist/log/index.js +109 -0
- package/dist/log/level.js +39 -0
- package/dist/log/store.js +16 -0
- package/dist/mongodb/collection.js +2 -0
- package/dist/mongodb/config.js +34 -0
- package/dist/mongodb/doc.js +2 -0
- package/dist/mongodb/exception.js +14 -0
- package/dist/mongodb/index.js +58 -0
- package/dist/mongodb/manager/base.js +563 -0
- package/dist/mongodb/manager/index.js +63 -0
- package/dist/mongodb/manager/tx-strict.js +84 -0
- package/dist/mongodb/manager/tx.js +30 -0
- package/dist/mongodb/migration.js +52 -0
- package/dist/mvc/access-log.js +31 -0
- package/dist/mvc/config.js +20 -0
- package/dist/mvc/exchange.js +113 -0
- package/dist/mvc/handler/index.js +6 -0
- package/dist/mvc/handler/json.js +33 -0
- package/dist/mvc/handler/restful.js +35 -0
- package/dist/mvc/handler/upload.js +33 -0
- package/dist/mvc/index.js +316 -0
- package/dist/mvc/interceptor.js +2 -0
- package/dist/mvc/query.js +43 -0
- package/dist/mvc/render/file.js +177 -0
- package/dist/mvc/render/html/html.js +90 -0
- package/dist/mvc/render/html/index.js +18 -0
- package/dist/mvc/render/html/style.js +2 -0
- package/dist/mvc/render/index.js +7 -0
- package/dist/mvc/render/json.js +26 -0
- package/dist/mvc/render/text.js +16 -0
- package/dist/mvc/router.js +2 -0
- package/dist/mysql/config.js +49 -0
- package/dist/mysql/exception.js +14 -0
- package/dist/mysql/index.js +85 -0
- package/dist/mysql/manager/base.js +233 -0
- package/dist/mysql/manager/index.js +107 -0
- package/dist/mysql/manager/ops/count.js +20 -0
- package/dist/mysql/manager/ops/criteria.js +326 -0
- package/dist/mysql/manager/ops/delete.js +65 -0
- package/dist/mysql/manager/ops/exist.js +26 -0
- package/dist/mysql/manager/ops/find.js +111 -0
- package/dist/mysql/manager/ops/index.js +14 -0
- package/dist/mysql/manager/ops/insert.js +101 -0
- package/dist/mysql/manager/ops/modify.js +10 -0
- package/dist/mysql/manager/ops/paginate.js +23 -0
- package/dist/mysql/manager/ops/query.js +9 -0
- package/dist/mysql/manager/ops/update.js +201 -0
- package/dist/mysql/manager/tx-strict.js +98 -0
- package/dist/mysql/manager/tx.js +30 -0
- package/dist/mysql/manager/utils.js +56 -0
- package/dist/mysql/migration.js +136 -0
- package/dist/mysql/table-info.js +8 -0
- package/dist/task/daily.js +58 -0
- package/dist/task/fixed-delay.js +33 -0
- package/dist/task/fixed-rate.js +37 -0
- package/dist/task/index.js +9 -0
- package/dist/task/task.js +39 -0
- package/dist/validation/exception.js +44 -0
- package/dist/validation/index.js +29 -0
- package/dist/validation/validator/array.js +38 -0
- package/dist/validation/validator/enum.js +28 -0
- package/dist/validation/validator/index.js +14 -0
- package/dist/validation/validator/length.js +40 -0
- package/dist/validation/validator/max-length.js +35 -0
- package/dist/validation/validator/max.js +29 -0
- package/dist/validation/validator/min-length.js +33 -0
- package/dist/validation/validator/min.js +29 -0
- package/dist/validation/validator/not-blank.js +33 -0
- package/dist/validation/validator/not-null.js +21 -0
- package/dist/validation/validator/plain-obj.js +32 -0
- package/dist/validation/validator/regexp.js +30 -0
- package/documentation/en/index.md +1 -0
- package/documentation/zh-cn/cache.md +59 -0
- package/documentation/zh-cn/config.md +68 -0
- package/documentation/zh-cn/http-client.md +33 -0
- package/documentation/zh-cn/i18n.md +154 -0
- package/documentation/zh-cn/index.md +25 -0
- package/documentation/zh-cn/log.md +40 -0
- package/documentation/zh-cn/mongodb.md +262 -0
- package/documentation/zh-cn/mvc.md +430 -0
- package/documentation/zh-cn/mysql.md +389 -0
- package/documentation/zh-cn/task.md +50 -0
- package/documentation/zh-cn/test.md +57 -0
- package/documentation/zh-cn/validate.md +125 -0
- package/package.json +46 -0
- package/types/cache/cache.d.ts +52 -0
- package/types/cache/config.d.ts +32 -0
- package/types/cache/index.d.ts +2 -0
- package/types/cache/purge-task.d.ts +11 -0
- package/types/cache/stat.d.ts +26 -0
- package/types/config/convert.d.ts +6 -0
- package/types/config/exception.d.ts +7 -0
- package/types/config/index.d.ts +15 -0
- package/types/http-client/index.d.ts +71 -0
- package/types/i18n/ar.d.ts +2 -0
- package/types/i18n/de.d.ts +2 -0
- package/types/i18n/en-us.d.ts +2 -0
- package/types/i18n/es.d.ts +2 -0
- package/types/i18n/fr.d.ts +2 -0
- package/types/i18n/i18n.d.ts +102 -0
- package/types/i18n/index.d.ts +9 -0
- package/types/i18n/ja.d.ts +2 -0
- package/types/i18n/ko.d.ts +2 -0
- package/types/i18n/msg.d.ts +50 -0
- package/types/i18n/pt.d.ts +2 -0
- package/types/i18n/ru.d.ts +2 -0
- package/types/i18n/tag.d.ts +11 -0
- package/types/i18n/zh-HK.d.ts +2 -0
- package/types/i18n/zh-TW.d.ts +2 -0
- package/types/i18n/zh-cn.d.ts +2 -0
- package/types/index.d.ts +10 -0
- package/types/log/config.d.ts +27 -0
- package/types/log/date.d.ts +2 -0
- package/types/log/file.d.ts +5 -0
- package/types/log/index.d.ts +34 -0
- package/types/log/level.d.ts +15 -0
- package/types/log/store.d.ts +12 -0
- package/types/mongodb/collection.d.ts +25 -0
- package/types/mongodb/config.d.ts +45 -0
- package/types/mongodb/doc.d.ts +11 -0
- package/types/mongodb/exception.d.ts +7 -0
- package/types/mongodb/index.d.ts +29 -0
- package/types/mongodb/manager/base.d.ts +188 -0
- package/types/mongodb/manager/index.d.ts +38 -0
- package/types/mongodb/manager/tx-strict.d.ts +41 -0
- package/types/mongodb/manager/tx.d.ts +21 -0
- package/types/mongodb/migration.d.ts +12 -0
- package/types/mvc/access-log.d.ts +7 -0
- package/types/mvc/config.d.ts +30 -0
- package/types/mvc/exchange.d.ts +72 -0
- package/types/mvc/handler/index.d.ts +3 -0
- package/types/mvc/handler/json.d.ts +23 -0
- package/types/mvc/handler/restful.d.ts +11 -0
- package/types/mvc/handler/upload.d.ts +40 -0
- package/types/mvc/index.d.ts +49 -0
- package/types/mvc/interceptor.d.ts +11 -0
- package/types/mvc/query.d.ts +13 -0
- package/types/mvc/render/file.d.ts +10 -0
- package/types/mvc/render/html/html.d.ts +98 -0
- package/types/mvc/render/html/index.d.ts +11 -0
- package/types/mvc/render/html/style.d.ts +1201 -0
- package/types/mvc/render/index.d.ts +4 -0
- package/types/mvc/render/json.d.ts +17 -0
- package/types/mvc/render/text.d.ts +10 -0
- package/types/mvc/router.d.ts +11 -0
- package/types/mysql/config.d.ts +86 -0
- package/types/mysql/exception.d.ts +7 -0
- package/types/mysql/index.d.ts +16 -0
- package/types/mysql/manager/base.d.ts +158 -0
- package/types/mysql/manager/index.d.ts +36 -0
- package/types/mysql/manager/ops/count.d.ts +13 -0
- package/types/mysql/manager/ops/criteria.d.ts +120 -0
- package/types/mysql/manager/ops/delete.d.ts +46 -0
- package/types/mysql/manager/ops/exist.d.ts +6 -0
- package/types/mysql/manager/ops/find.d.ts +66 -0
- package/types/mysql/manager/ops/index.d.ts +10 -0
- package/types/mysql/manager/ops/insert.d.ts +18 -0
- package/types/mysql/manager/ops/modify.d.ts +3 -0
- package/types/mysql/manager/ops/paginate.d.ts +36 -0
- package/types/mysql/manager/ops/query.d.ts +3 -0
- package/types/mysql/manager/ops/update.d.ts +70 -0
- package/types/mysql/manager/tx-strict.d.ts +34 -0
- package/types/mysql/manager/tx.d.ts +15 -0
- package/types/mysql/manager/utils.d.ts +17 -0
- package/types/mysql/migration.d.ts +8 -0
- package/types/mysql/table-info.d.ts +36 -0
- package/types/task/daily.d.ts +15 -0
- package/types/task/fixed-delay.d.ts +8 -0
- package/types/task/fixed-rate.d.ts +8 -0
- package/types/task/index.d.ts +4 -0
- package/types/task/task.d.ts +33 -0
- package/types/validation/exception.d.ts +43 -0
- package/types/validation/index.d.ts +32 -0
- package/types/validation/validator/array.d.ts +5 -0
- package/types/validation/validator/enum.d.ts +8 -0
- package/types/validation/validator/index.d.ts +11 -0
- package/types/validation/validator/length.d.ts +10 -0
- package/types/validation/validator/max-length.d.ts +8 -0
- package/types/validation/validator/max.d.ts +7 -0
- package/types/validation/validator/min-length.d.ts +6 -0
- package/types/validation/validator/min.d.ts +7 -0
- package/types/validation/validator/not-blank.d.ts +7 -0
- package/types/validation/validator/not-null.d.ts +6 -0
- package/types/validation/validator/plain-obj.d.ts +7 -0
- package/types/validation/validator/regexp.d.ts +8 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { MongoDBManager } from './manager';
|
|
2
|
+
import { MongoMigrationVersion } from './migration';
|
|
3
|
+
/**
|
|
4
|
+
* 启用 MongoDB
|
|
5
|
+
* @param opts 选项
|
|
6
|
+
*/
|
|
7
|
+
export declare function enableMongoDB(opts?: {
|
|
8
|
+
/**
|
|
9
|
+
* 配置名称,同时也是环境变量配置的前缀,英文开头,由英文数字和下划线成.
|
|
10
|
+
*/
|
|
11
|
+
name?: string;
|
|
12
|
+
/**
|
|
13
|
+
* 迁移
|
|
14
|
+
*/
|
|
15
|
+
migration?: {
|
|
16
|
+
versionList: MongoMigrationVersion[];
|
|
17
|
+
};
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* 获取管理器实例
|
|
21
|
+
* @param name
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
export declare function getMongoDBManager(name?: string): MongoDBManager;
|
|
25
|
+
export { MongoDBConfig } from './config';
|
|
26
|
+
export * from './exception';
|
|
27
|
+
export { MongoMigrationVersion } from './migration';
|
|
28
|
+
export * from './collection';
|
|
29
|
+
export * from './doc';
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { ClientSession, Db, Document, Filter, UpdateFilter } from 'mongodb';
|
|
2
|
+
import { MongoCollection } from '../collection';
|
|
3
|
+
import { MongoDBConfig } from '../config';
|
|
4
|
+
import { MongoDocId, MongoDocWithId } from '../doc';
|
|
5
|
+
/**
|
|
6
|
+
* mysql 分页查询结果
|
|
7
|
+
*/
|
|
8
|
+
export interface MongoPage<T> {
|
|
9
|
+
total: number;
|
|
10
|
+
list: T[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* mongodb 管理器基类,提供基本的操作功能.
|
|
14
|
+
*/
|
|
15
|
+
export declare abstract class BaseMongoManager {
|
|
16
|
+
protected config: MongoDBConfig;
|
|
17
|
+
protected readonly db: Db;
|
|
18
|
+
private session?;
|
|
19
|
+
/**
|
|
20
|
+
* mongodb 管理器构建
|
|
21
|
+
* @param db 库
|
|
22
|
+
* @param session 要绑定的会话,用于事务
|
|
23
|
+
*/
|
|
24
|
+
constructor(config: MongoDBConfig, db: Db, session?: ClientSession | undefined);
|
|
25
|
+
getCollection<T extends Document>(collInfo: MongoCollection<T>): import("mongodb").Collection<T>;
|
|
26
|
+
/**
|
|
27
|
+
* 查询计时
|
|
28
|
+
* @param opts
|
|
29
|
+
*/
|
|
30
|
+
protected timingQuery<T, D extends {
|
|
31
|
+
op: string;
|
|
32
|
+
coll: string;
|
|
33
|
+
}>(opts: {
|
|
34
|
+
query: () => Promise<T>;
|
|
35
|
+
desc: () => D;
|
|
36
|
+
}): Promise<T>;
|
|
37
|
+
findById<T extends Document>(coll: MongoCollection<T>, id: MongoDocId): Promise<MongoDocWithId<T> | null>;
|
|
38
|
+
/**
|
|
39
|
+
* 根据id列表查询
|
|
40
|
+
* @param coll
|
|
41
|
+
* @param ids
|
|
42
|
+
* @returns
|
|
43
|
+
*/
|
|
44
|
+
findByIdIn<T extends Document>(coll: MongoCollection<T>, ids: MongoDocId[]): Promise<MongoDocWithId<T>[]>;
|
|
45
|
+
/**
|
|
46
|
+
* 根据id判定是否存在
|
|
47
|
+
* @param coll
|
|
48
|
+
* @param id
|
|
49
|
+
*/
|
|
50
|
+
existsById<T extends Document>(coll: MongoCollection<T>, id: MongoDocId): Promise<boolean>;
|
|
51
|
+
/**
|
|
52
|
+
* 按指定的条件来判定是否存在记录
|
|
53
|
+
* @param coll
|
|
54
|
+
* @param filter
|
|
55
|
+
*/
|
|
56
|
+
existsBy<T extends Document>(coll: MongoCollection<T>, filter: Filter<MongoDocWithId<T>>): Promise<boolean>;
|
|
57
|
+
/**
|
|
58
|
+
* 按id进行删除
|
|
59
|
+
* @param coll
|
|
60
|
+
* @param id
|
|
61
|
+
* @returns
|
|
62
|
+
*/
|
|
63
|
+
deleteById<T extends Document>(coll: MongoCollection<T>, id: MongoDocId): Promise<boolean>;
|
|
64
|
+
/**
|
|
65
|
+
* 仅删除一条记录
|
|
66
|
+
* @param coll
|
|
67
|
+
* @param filter
|
|
68
|
+
* @returns
|
|
69
|
+
*/
|
|
70
|
+
deleteOne<T extends Document>(coll: MongoCollection<T>, filter: Partial<T>): Promise<boolean>;
|
|
71
|
+
/**
|
|
72
|
+
* 按条件删除数据,返回删除的记录行数.
|
|
73
|
+
* 务必谨慎使用,大批量删除容易带来性能问题,造成线上事故.
|
|
74
|
+
* @param coll
|
|
75
|
+
* @param filter
|
|
76
|
+
* @returns 被删除记录的数量
|
|
77
|
+
*/
|
|
78
|
+
deleteMany<T extends Document>(coll: MongoCollection<T>, filter: Filter<MongoDocWithId<T>>): Promise<number>;
|
|
79
|
+
/**
|
|
80
|
+
* 查询集合中所有记录.谨慎使用!
|
|
81
|
+
* @param coll
|
|
82
|
+
* @returns
|
|
83
|
+
*/
|
|
84
|
+
findAll<T extends Document>(coll: MongoCollection<T>): Promise<MongoDocWithId<T>[]>;
|
|
85
|
+
/**
|
|
86
|
+
* 根据给定的条件查找第一条符合条件的记录
|
|
87
|
+
* @param coll
|
|
88
|
+
* @param filter
|
|
89
|
+
* @returns
|
|
90
|
+
*/
|
|
91
|
+
findFirst<T extends Document>(coll: MongoCollection<T>, filter: Filter<MongoDocWithId<T>>): Promise<MongoDocWithId<T> | null>;
|
|
92
|
+
/**
|
|
93
|
+
* 插入新记录
|
|
94
|
+
* @param coll
|
|
95
|
+
* @param data
|
|
96
|
+
* @returns
|
|
97
|
+
*/
|
|
98
|
+
insert<T extends Document>(coll: MongoCollection<T>, data: T & {
|
|
99
|
+
_id?: MongoDocId;
|
|
100
|
+
}): Promise<MongoDocWithId<T>>;
|
|
101
|
+
/**
|
|
102
|
+
* 插入多条,批量插入.
|
|
103
|
+
* @param coll
|
|
104
|
+
* @param list
|
|
105
|
+
*/
|
|
106
|
+
insertMany<T extends Document>(coll: MongoCollection<T>, list: Array<T & {
|
|
107
|
+
_id?: MongoDocId;
|
|
108
|
+
}>): Promise<MongoDocWithId<T>[]>;
|
|
109
|
+
/**
|
|
110
|
+
* 更新,更新完整的文档内容。
|
|
111
|
+
* @param coll 集合信息
|
|
112
|
+
* @param data 要更新的数据,必须包含 _id 字段,支持 mongo 更新语法 $inc 等
|
|
113
|
+
* @returns 返回最新的数据
|
|
114
|
+
* @throws MongoDBException 当无法完成更新时抛出
|
|
115
|
+
*/
|
|
116
|
+
update<T extends Document>(coll: MongoCollection<T>, data: MongoDocWithId<T>): Promise<MongoDocWithId<T>>;
|
|
117
|
+
/**
|
|
118
|
+
* 仅更新一条记录
|
|
119
|
+
* @param coll
|
|
120
|
+
* @param filter
|
|
121
|
+
* @param updater
|
|
122
|
+
*/
|
|
123
|
+
updateOne<T extends Document>(coll: MongoCollection<T>, filter: Partial<T>, updater: UpdateFilter<T>): Promise<boolean>;
|
|
124
|
+
/**
|
|
125
|
+
* 局部更新,仅更新部分字段,可对字段做递增或数组元组的处理。
|
|
126
|
+
* @param coll 集合信息
|
|
127
|
+
* @param id id
|
|
128
|
+
* @param updater 更新内容
|
|
129
|
+
* @returns 更新是否成功
|
|
130
|
+
*/
|
|
131
|
+
partialUpdate<T extends Document>(coll: MongoCollection<T>, id: MongoDocId, updater: UpdateFilter<T>): Promise<boolean>;
|
|
132
|
+
/**
|
|
133
|
+
* 根据条件更新多条记录,和 partialUpdate 区别是可以根据过滤条件来处理多条记录。
|
|
134
|
+
* @param coll 集合
|
|
135
|
+
* @param filter 过滤规则
|
|
136
|
+
* @param updater 更新内容
|
|
137
|
+
* @returns 此次更新的记录数
|
|
138
|
+
*/
|
|
139
|
+
updateMany<T extends Document>(coll: MongoCollection<T>, filter: Filter<MongoDocWithId<T>>, updater: UpdateFilter<T>): Promise<number>;
|
|
140
|
+
/**
|
|
141
|
+
* 条件查询
|
|
142
|
+
* @param coll 集合信息
|
|
143
|
+
* @param filter 过滤条件
|
|
144
|
+
* @param opts 额外的选项
|
|
145
|
+
* @returns
|
|
146
|
+
*/
|
|
147
|
+
find<T extends Document>(coll: MongoCollection<T>, filter: Filter<MongoDocWithId<T>>, opts?: {
|
|
148
|
+
/**
|
|
149
|
+
* 偏移,需要 limit 有值才可以
|
|
150
|
+
*/
|
|
151
|
+
offset?: number;
|
|
152
|
+
/**
|
|
153
|
+
* 限制返回的数量
|
|
154
|
+
*/
|
|
155
|
+
limit?: number;
|
|
156
|
+
/**
|
|
157
|
+
* 排序规则,按先后顺序放入,每个规则是一个元组,第一个元素是字段名称,第二个元素是顺序
|
|
158
|
+
*/
|
|
159
|
+
orderBy?: Array<[keyof MongoDocWithId<T>, 'asc' | 'desc']>;
|
|
160
|
+
}): Promise<MongoDocWithId<T>[]>;
|
|
161
|
+
/**
|
|
162
|
+
* 查询符合条件的文档数量。请谨慎使用,count 是不能从索引直接读取的,只能实时计数,使用不当容易造成性能问题,引发线上事故。
|
|
163
|
+
* @param coll
|
|
164
|
+
* @param filter
|
|
165
|
+
* @returns
|
|
166
|
+
*/
|
|
167
|
+
count<T extends Document>(coll: MongoCollection<T>, filter: Filter<MongoDocWithId<T>>): Promise<number>;
|
|
168
|
+
/**
|
|
169
|
+
* 分页查询。谨慎使用,不建议对规模较大的数据查询直接使用分页。
|
|
170
|
+
* @param coll 集合信息
|
|
171
|
+
* @param filter 过滤条件
|
|
172
|
+
* @param opts 分页参数
|
|
173
|
+
*/
|
|
174
|
+
paginate<T extends Document>(coll: MongoCollection<T>, filter: Filter<MongoDocWithId<T>>, opts: {
|
|
175
|
+
/**
|
|
176
|
+
* 页码,从1开始,第一页是 1
|
|
177
|
+
*/
|
|
178
|
+
pn: number;
|
|
179
|
+
/**
|
|
180
|
+
* 每页的数据量大小
|
|
181
|
+
*/
|
|
182
|
+
pz: number;
|
|
183
|
+
/**
|
|
184
|
+
* 排序规则,按先后顺序放入,每个规则是一个元组,第一个元素是字段名称,第二个元素是顺序
|
|
185
|
+
*/
|
|
186
|
+
orderBy?: Array<[keyof MongoDocWithId<T>, 'asc' | 'desc']>;
|
|
187
|
+
}): Promise<MongoPage<MongoDocWithId<T>>>;
|
|
188
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Db, MongoClient, ReadConcernLike, ReadPreferenceLike, WriteConcern } from 'mongodb';
|
|
2
|
+
import { MongoDBConfig } from '../config';
|
|
3
|
+
import { BaseMongoManager } from './base';
|
|
4
|
+
import { MongoTxSession } from './tx';
|
|
5
|
+
/**
|
|
6
|
+
* mysql 分页查询结果
|
|
7
|
+
*/
|
|
8
|
+
export interface MongoPage<T> {
|
|
9
|
+
total: number;
|
|
10
|
+
list: T[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* mongodb 管理器,目前尚未实现事务的处理.
|
|
14
|
+
*/
|
|
15
|
+
export declare class MongoDBManager extends BaseMongoManager {
|
|
16
|
+
private readonly client;
|
|
17
|
+
/**
|
|
18
|
+
* mongodb 管理器构建
|
|
19
|
+
* @param db 库
|
|
20
|
+
*/
|
|
21
|
+
constructor(config: MongoDBConfig, db: Db, client: MongoClient);
|
|
22
|
+
/**
|
|
23
|
+
* 事务操作。mongodb 的版本必须在 4.0 以上,连接的必须是副本集节点或分片集群的mongos节点。
|
|
24
|
+
* @param ops 操作逻辑,所有事务相关的操作都必须使用函数提供的 session 对象
|
|
25
|
+
* @param opts mongo 事务选项
|
|
26
|
+
*/
|
|
27
|
+
tx<T>(ops: (session: MongoTxSession) => Promise<T>, opts?: {
|
|
28
|
+
/** 超时时间,单位毫秒,设置后会覆盖全局设置,设置为0表示不限制 */
|
|
29
|
+
timeout?: number;
|
|
30
|
+
/** A default read concern for commands in this transaction */
|
|
31
|
+
readConcern?: ReadConcernLike;
|
|
32
|
+
/** A default writeConcern for commands in this transaction */
|
|
33
|
+
writeConcern?: WriteConcern;
|
|
34
|
+
/** A default read preference for commands in this transaction */
|
|
35
|
+
readPreference?: ReadPreferenceLike;
|
|
36
|
+
}): Promise<T>;
|
|
37
|
+
}
|
|
38
|
+
export { BaseMongoManager, MongoTxSession };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ClientSession, Db, Document, Filter, UpdateFilter } from 'mongodb';
|
|
2
|
+
import { MongoCollection } from '../collection';
|
|
3
|
+
import { MongoDBConfig } from '../config';
|
|
4
|
+
import { MongoDocId, MongoDocWithId } from '../doc';
|
|
5
|
+
import { MongoPage } from './base';
|
|
6
|
+
import { MongoTxSession } from './tx';
|
|
7
|
+
/**
|
|
8
|
+
* 严格事务会话
|
|
9
|
+
*/
|
|
10
|
+
export declare class MongoStrictTxSession extends MongoTxSession {
|
|
11
|
+
#private;
|
|
12
|
+
constructor(config: MongoDBConfig, db: Db, session: ClientSession);
|
|
13
|
+
findById<T extends Document>(coll: MongoCollection<T>, id: MongoDocId): Promise<MongoDocWithId<T> | null>;
|
|
14
|
+
findByIdIn<T extends Document>(coll: MongoCollection<T>, ids: MongoDocId[]): Promise<MongoDocWithId<T>[]>;
|
|
15
|
+
existsBy<T extends Document>(coll: MongoCollection<T>, filter: Filter<MongoDocWithId<T>>): Promise<boolean>;
|
|
16
|
+
deleteById<T extends Document>(coll: MongoCollection<T>, id: MongoDocId): Promise<boolean>;
|
|
17
|
+
deleteOne<T extends Document>(coll: MongoCollection<T>, filter: Partial<T>): Promise<boolean>;
|
|
18
|
+
deleteMany<T extends Document>(coll: MongoCollection<T>, filter: Filter<MongoDocWithId<T>>): Promise<number>;
|
|
19
|
+
findAll<T extends Document>(coll: MongoCollection<T>): Promise<MongoDocWithId<T>[]>;
|
|
20
|
+
findFirst<T extends Document>(coll: MongoCollection<T>, filter: Filter<MongoDocWithId<T>>): Promise<MongoDocWithId<T> | null>;
|
|
21
|
+
insert<T extends Document>(coll: MongoCollection<T>, data: T & {
|
|
22
|
+
_id?: MongoDocId | undefined;
|
|
23
|
+
}): Promise<MongoDocWithId<T>>;
|
|
24
|
+
insertMany<T extends Document>(coll: MongoCollection<T>, list: (T & {
|
|
25
|
+
_id?: MongoDocId | undefined;
|
|
26
|
+
})[]): Promise<MongoDocWithId<T>[]>;
|
|
27
|
+
update<T extends Document>(coll: MongoCollection<T>, data: MongoDocWithId<T>): Promise<MongoDocWithId<T>>;
|
|
28
|
+
partialUpdate<T extends Document>(coll: MongoCollection<T>, id: MongoDocId, updator: UpdateFilter<T>): Promise<boolean>;
|
|
29
|
+
updateMany<T extends Document>(coll: MongoCollection<T>, filter: Filter<MongoDocWithId<T>>, updator: UpdateFilter<T>): Promise<number>;
|
|
30
|
+
find<T extends Document>(coll: MongoCollection<T>, filter: Filter<MongoDocWithId<T>>, opts?: {
|
|
31
|
+
offset?: number | undefined;
|
|
32
|
+
limit?: number | undefined;
|
|
33
|
+
orderBy?: ['_id' | keyof T, 'asc' | 'desc'][] | undefined;
|
|
34
|
+
} | undefined): Promise<MongoDocWithId<T>[]>;
|
|
35
|
+
count<T extends Document>(coll: MongoCollection<T>, filter: Filter<MongoDocWithId<T>>): Promise<number>;
|
|
36
|
+
paginate<T extends Document>(coll: MongoCollection<T>, filter: Filter<MongoDocWithId<T>>, opts: {
|
|
37
|
+
pn: number;
|
|
38
|
+
pz: number;
|
|
39
|
+
orderBy?: ['_id' | keyof T, 'asc' | 'desc'][] | undefined;
|
|
40
|
+
}): Promise<MongoPage<MongoDocWithId<T>>>;
|
|
41
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ClientSession, Db } from 'mongodb';
|
|
2
|
+
import { MongoDBConfig } from '../config';
|
|
3
|
+
import { BaseMongoManager } from './base';
|
|
4
|
+
/**
|
|
5
|
+
* 事务会话
|
|
6
|
+
*/
|
|
7
|
+
export declare class MongoTxSession extends BaseMongoManager {
|
|
8
|
+
#private;
|
|
9
|
+
constructor(config: MongoDBConfig, db: Db, session: ClientSession);
|
|
10
|
+
protected timingQuery<T, D extends {
|
|
11
|
+
op: string;
|
|
12
|
+
coll: string;
|
|
13
|
+
}>(opts: {
|
|
14
|
+
query: () => Promise<T>;
|
|
15
|
+
desc: () => D;
|
|
16
|
+
}): Promise<T>;
|
|
17
|
+
/**
|
|
18
|
+
* 中止,被中止后的会话不能再进行任何操作
|
|
19
|
+
*/
|
|
20
|
+
abort(): void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Db } from 'mongodb';
|
|
2
|
+
/**
|
|
3
|
+
* 迁移版本,是一个函数,可以在函数的内部通过 mongodb 驱动提升的 api 来完成操作。
|
|
4
|
+
* 注:驱动里有些 api 是没有的,和 mongodb 的脚本有区分,但是有些是可以通过 db.command() 来替代的。
|
|
5
|
+
*/
|
|
6
|
+
export type MongoMigrationVersion = (db: Db) => Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* 迁移
|
|
9
|
+
* @param db
|
|
10
|
+
* @param versionList
|
|
11
|
+
*/
|
|
12
|
+
export declare function migrate(db: Db, versionList: MongoMigrationVersion[]): Promise<void>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mvc 模块配置.
|
|
3
|
+
*/
|
|
4
|
+
export interface WebConfig {
|
|
5
|
+
/**
|
|
6
|
+
* 端口号
|
|
7
|
+
*/
|
|
8
|
+
port: number;
|
|
9
|
+
/**
|
|
10
|
+
* 超时时间
|
|
11
|
+
*/
|
|
12
|
+
timeout: number;
|
|
13
|
+
/**
|
|
14
|
+
* 是否开启访问日志.
|
|
15
|
+
*/
|
|
16
|
+
accessLog: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* 跨域允许的源域名
|
|
19
|
+
*/
|
|
20
|
+
corsAllowOrigin: string;
|
|
21
|
+
/**
|
|
22
|
+
* 跨域允许的消息头
|
|
23
|
+
*/
|
|
24
|
+
corsAllowHeaders: string;
|
|
25
|
+
/**
|
|
26
|
+
* 跨域允许的请求方法
|
|
27
|
+
*/
|
|
28
|
+
corsAllowMethods: string;
|
|
29
|
+
}
|
|
30
|
+
export declare const config: WebConfig;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { IncomingMessage, ServerResponse } from 'http';
|
|
4
|
+
import { QueryString } from './query';
|
|
5
|
+
import { HtmlStuct } from './render';
|
|
6
|
+
/**
|
|
7
|
+
* 服务的数据交换对象.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ServerExchange {
|
|
10
|
+
#private;
|
|
11
|
+
readonly request: IncomingMessage;
|
|
12
|
+
readonly response: ServerResponse;
|
|
13
|
+
constructor(request: IncomingMessage, response: ServerResponse);
|
|
14
|
+
bodyBuffer(): Promise<Buffer>;
|
|
15
|
+
bodyText(): Promise<string>;
|
|
16
|
+
bodyJson<T>(): Promise<T>;
|
|
17
|
+
/**
|
|
18
|
+
* 响应纯文本
|
|
19
|
+
* @param text 文本内容
|
|
20
|
+
* @param status 状态码,可选,默认 200
|
|
21
|
+
*/
|
|
22
|
+
respondText(text: string, status?: number): void;
|
|
23
|
+
/**
|
|
24
|
+
* 响应 json
|
|
25
|
+
* @param json 任意可被 json 序列化的对象
|
|
26
|
+
* @param status 状态码,可选,默认 200
|
|
27
|
+
*/
|
|
28
|
+
respondJson(json: any, status?: number): void;
|
|
29
|
+
/**
|
|
30
|
+
* 响应错误信息提示,提供一个统一的格式封装,json 格式
|
|
31
|
+
* @param message 消息
|
|
32
|
+
* @param status 状态码,默认 400 ,表示业务错误
|
|
33
|
+
* @returns
|
|
34
|
+
*/
|
|
35
|
+
respondErrMsg(message: string, status?: number): void;
|
|
36
|
+
/**
|
|
37
|
+
* 响应文件
|
|
38
|
+
* @param filePath 文件路径,绝对路径
|
|
39
|
+
* @param download 是否下载模式
|
|
40
|
+
* @returns
|
|
41
|
+
*/
|
|
42
|
+
respondFile(filePath: string, download?: boolean): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* 响应 html
|
|
45
|
+
* @param html html 内容,一个特定结构的对象或者是字符串
|
|
46
|
+
* @param status 状态码,可选,默认 200
|
|
47
|
+
*/
|
|
48
|
+
respondHtml(html: HtmlStuct | string, status?: number): void;
|
|
49
|
+
/**
|
|
50
|
+
* 响应
|
|
51
|
+
* @param opts
|
|
52
|
+
*/
|
|
53
|
+
respond(opts: {
|
|
54
|
+
/**
|
|
55
|
+
* 状态码.
|
|
56
|
+
*/
|
|
57
|
+
statusCode: number;
|
|
58
|
+
/**
|
|
59
|
+
* 响应正文内容.
|
|
60
|
+
*/
|
|
61
|
+
body?: string | Buffer | Uint8Array;
|
|
62
|
+
/**
|
|
63
|
+
* 自定义消息头
|
|
64
|
+
*/
|
|
65
|
+
headers?: Record<string, string>;
|
|
66
|
+
}): void;
|
|
67
|
+
/**
|
|
68
|
+
* 解析 queryString
|
|
69
|
+
* @returns
|
|
70
|
+
*/
|
|
71
|
+
parseQueryString(): QueryString;
|
|
72
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ValidationOpts } from '../../validation';
|
|
2
|
+
import { ServerExchange } from '../exchange';
|
|
3
|
+
import { RouterHandler } from '../router';
|
|
4
|
+
/**
|
|
5
|
+
* 创建 json 处理器..
|
|
6
|
+
* @param <REQ> 表示请求的 json 数据格式类型
|
|
7
|
+
* @param <RES> 表示响应的类型,可选,如果不需要响应 json 数据,则方法可以不返回任何值
|
|
8
|
+
* @param opts
|
|
9
|
+
* @returns
|
|
10
|
+
*/
|
|
11
|
+
export declare function createJsonHandler<REQ, RES = void>(opts: {
|
|
12
|
+
/**
|
|
13
|
+
* 校验信息,可选,用于检查请求信息.对于一些特殊情况,无法使用校验器的,可以在 handle 中继续处理.
|
|
14
|
+
*/
|
|
15
|
+
validation?: ValidationOpts<REQ>;
|
|
16
|
+
/**
|
|
17
|
+
* 处理请求.
|
|
18
|
+
* @param body 正文内容
|
|
19
|
+
* @param exchange 请求传输对象,用于获取请求的基本信息
|
|
20
|
+
* @returns
|
|
21
|
+
*/
|
|
22
|
+
handle: (body: REQ, exchange: ServerExchange) => Promise<RES>;
|
|
23
|
+
}): RouterHandler;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { RouterHandler } from '../router';
|
|
2
|
+
/**
|
|
3
|
+
* 构建 restful 风格路由
|
|
4
|
+
*/
|
|
5
|
+
export declare function restful(opts: {
|
|
6
|
+
get?: RouterHandler;
|
|
7
|
+
post?: RouterHandler;
|
|
8
|
+
put?: RouterHandler;
|
|
9
|
+
patch?: RouterHandler;
|
|
10
|
+
delete?: RouterHandler;
|
|
11
|
+
}): RouterHandler;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { IncomingHttpHeaders } from 'http';
|
|
4
|
+
import { QueryString } from '../query';
|
|
5
|
+
import { RouterHandler } from '../router';
|
|
6
|
+
/**
|
|
7
|
+
* 上传请求传输对象.
|
|
8
|
+
*/
|
|
9
|
+
export interface UploadRouterExchange {
|
|
10
|
+
/**
|
|
11
|
+
* 请求地址
|
|
12
|
+
*/
|
|
13
|
+
url: string;
|
|
14
|
+
/**
|
|
15
|
+
* 请求头
|
|
16
|
+
*/
|
|
17
|
+
headers: IncomingHttpHeaders;
|
|
18
|
+
/**
|
|
19
|
+
* querystring 解析结果
|
|
20
|
+
*/
|
|
21
|
+
query: QueryString;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 创建上传处理器. 上传要求一次只能传输一个文件,并且请求正文就是文件二进制内容。
|
|
25
|
+
* 必须是 post 请求,额外的参数只能通过 queryString 或 header 来传递。
|
|
26
|
+
* 和 postman 中的 binary 模式是一致的,这样上传文件性能会好一些,但是局限性也很大。
|
|
27
|
+
*
|
|
28
|
+
* @param opts
|
|
29
|
+
* @param <RES> 响应json数据类型
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
export declare function createUploadHandler<RES = void>(opts: {
|
|
33
|
+
/**
|
|
34
|
+
* 处理请求.
|
|
35
|
+
* @param body 正文内容
|
|
36
|
+
* @param exchange 请求传输对象,用于获取请求的基本信息
|
|
37
|
+
* @returns
|
|
38
|
+
*/
|
|
39
|
+
handle: (body: Buffer, exchange: UploadRouterExchange) => Promise<RES>;
|
|
40
|
+
}): RouterHandler;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Server } from 'http';
|
|
3
|
+
import { Interceptor } from './interceptor';
|
|
4
|
+
import { Routers } from './router';
|
|
5
|
+
/**
|
|
6
|
+
* 启动 web服务
|
|
7
|
+
* @param opts
|
|
8
|
+
*/
|
|
9
|
+
export declare function startWebServer(opts: {
|
|
10
|
+
/**
|
|
11
|
+
* 路由配置.
|
|
12
|
+
*/
|
|
13
|
+
routers: Routers;
|
|
14
|
+
/**
|
|
15
|
+
* 拦截器,在路由处理前可以做一些额外操作.
|
|
16
|
+
*/
|
|
17
|
+
interceptors?: Interceptor[];
|
|
18
|
+
/**
|
|
19
|
+
* 前置控制器,在服务启动之前,对服务做一些额外的操作。比如可以连接 socket.io 或者一些其它
|
|
20
|
+
* 支持 nodejs 原生 http 服务的组件.
|
|
21
|
+
* @param server
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
preHandler?: (server: Server<any>) => Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* 静态文件设置,key 是访问路径,value 是相关设置. 如果希望根目录映射,可以将 key 的值设置为 /。
|
|
27
|
+
* 访问路径和目录的设置都是不允许重复的。
|
|
28
|
+
*/
|
|
29
|
+
static?: Record<string, {
|
|
30
|
+
/**
|
|
31
|
+
* 目录
|
|
32
|
+
*/
|
|
33
|
+
dir: string;
|
|
34
|
+
/**
|
|
35
|
+
* 缓存时长,单位秒,根据设定生成消息头 Cache-Control: max-age=时长,设置为小于等于0可关闭
|
|
36
|
+
*/
|
|
37
|
+
cacheAge?: number;
|
|
38
|
+
}>;
|
|
39
|
+
}): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* 停止 web 服务
|
|
42
|
+
* @returns
|
|
43
|
+
*/
|
|
44
|
+
export declare function stopWebServer(): Promise<void>;
|
|
45
|
+
export * from './exchange';
|
|
46
|
+
export * from './handler';
|
|
47
|
+
export * from './render';
|
|
48
|
+
export * from './router';
|
|
49
|
+
export * from './interceptor';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ServerExchange } from './exchange';
|
|
2
|
+
/**
|
|
3
|
+
* 拦截器.
|
|
4
|
+
*/
|
|
5
|
+
export interface Interceptor {
|
|
6
|
+
/**
|
|
7
|
+
* @param exchange 传输对象,提供获取请求信息和通用的响应数据功能
|
|
8
|
+
* @param next 执行后面的流程,可能是下一个拦截器,也可能是路由
|
|
9
|
+
*/
|
|
10
|
+
(exchange: ServerExchange, next: () => Promise<void>): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { IncomingMessage, ServerResponse } from 'http';
|
|
3
|
+
/**
|
|
4
|
+
* 响应一个文件.
|
|
5
|
+
* @param request 请求信息
|
|
6
|
+
* @param response 响应信息
|
|
7
|
+
* @param filePath 文件路径,如果文件不存在,则会响应 404
|
|
8
|
+
* @param download 是否下载
|
|
9
|
+
*/
|
|
10
|
+
export declare function renderFile(request: IncomingMessage, response: ServerResponse, filePath: string, download?: boolean): Promise<void>;
|