dinegg 2.13.2 → 3.0.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 (66) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +181 -178
  3. package/agent.d.ts +13 -0
  4. package/agent.js +84 -62
  5. package/app/extend/application.d.ts +5 -0
  6. package/app/extend/application.js +23 -26
  7. package/app/extend/context.d.ts +6 -0
  8. package/app/extend/context.js +29 -42
  9. package/app/extend/helper.d.ts +5 -0
  10. package/app/extend/helper.js +41 -28
  11. package/app/middleware/catchNoCatchError.d.ts +9 -0
  12. package/app/middleware/catchNoCatchError.js +77 -0
  13. package/app/middleware/jwtLogin.d.ts +9 -0
  14. package/app/middleware/jwtLogin.js +80 -54
  15. package/app/schedule/archiveLogFile.d.ts +1 -0
  16. package/app/schedule/archiveLogFile.js +34 -24
  17. package/app/service/restful.d.ts +59 -0
  18. package/app/service/restful.js +121 -55
  19. package/app.d.ts +13 -0
  20. package/app.js +90 -66
  21. package/config/config.default.d.ts +3 -0
  22. package/config/config.default.js +67 -53
  23. package/config/locales/en-US.js +5 -0
  24. package/config/locales/zh-CN.js +5 -0
  25. package/config/plugin.d.ts +3 -0
  26. package/config/plugin.js +34 -21
  27. package/decorator/ControllerDecorator.d.ts +23 -0
  28. package/decorator/ControllerDecorator.js +128 -0
  29. package/decorator/index.d.ts +3 -0
  30. package/decorator/index.js +7 -0
  31. package/decorator/permission.d.ts +28 -0
  32. package/decorator/permission.js +78 -0
  33. package/decorator/serviceDecorator.d.ts +14 -0
  34. package/decorator/serviceDecorator.js +126 -0
  35. package/index.d.ts +207 -383
  36. package/index.js +2 -6
  37. package/lib/core/AppCache.d.ts +37 -0
  38. package/lib/core/AppCache.js +85 -62
  39. package/lib/core/Subscription/Subscription.d.ts +4 -0
  40. package/lib/core/Subscription/Subscription.js +18 -12
  41. package/lib/core/controller/DineggController.d.ts +33 -0
  42. package/lib/core/controller/DineggController.js +68 -20
  43. package/lib/core/controller/dineggControllerInitializer.d.ts +1 -0
  44. package/lib/core/controller/dineggControllerInitializer.js +120 -89
  45. package/lib/core/loader/DingAgentWorkerLoader.d.ts +11 -0
  46. package/lib/core/loader/DingAgentWorkerLoader.js +92 -74
  47. package/lib/core/loader/DingAppWorkerLoader.d.ts +34 -0
  48. package/lib/core/loader/DingAppWorkerLoader.js +276 -206
  49. package/lib/core/logs-archive/index.d.ts +19 -0
  50. package/lib/core/logs-archive/index.js +77 -48
  51. package/lib/core/service/DineggService.d.ts +4 -0
  52. package/lib/core/service/DineggService.js +18 -12
  53. package/lib/framework.d.ts +26 -0
  54. package/lib/framework.js +46 -47
  55. package/lib/typings/shim.schedule.d.ts +64 -64
  56. package/lib/typings/shim.validate.d.ts +130 -130
  57. package/lib/util.d.ts +1 -0
  58. package/lib/util.js +19 -0
  59. package/package.json +83 -76
  60. package/changelog.md +0 -25
  61. package/lib/core/controller/Func.js +0 -26
  62. package/lib/core/controller/Rest.js +0 -100
  63. package/lib/core/decorator/ControllerDecorator.js +0 -101
  64. package/lib/core/decorator/permission.js +0 -62
  65. package/lib/core/decorator/serviceDecorator.js +0 -68
  66. package/lib/tshelper.js +0 -125
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2021 三生石
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2021 三生石
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,178 +1,181 @@
1
- <!--
2
- * @copyright: Huang Ding
3
- * @Author: ding-cx
4
- * @Date: 2021-01-29 14:58:29
5
- * @LastEditors: ding-cx
6
- * @LastEditTime: 2021-09-25 10:54:18
7
- * @Description: file content
8
- -->
9
-
10
- # dinegg
11
-
12
- ding-egg framework
13
-
14
- ## QuickStart
15
-
16
- ```bash
17
- $ npm install
18
- $ npm test
19
- ```
20
-
21
- publish your framework to npm, then change app's framework config:
22
-
23
- ```js
24
- // {app_root}/index.js
25
- {
26
- "name": "my-project",
27
- "egg": {
28
- "framework": "dinegg"
29
- }
30
- }
31
- ```
32
-
33
- ## 使用 modules 封装业务逻辑代码在同一个目录下
34
-
35
- - 将 service、controller、middleware 等文件放在同一个目录,类似 nest 的模块组织程序结构。
36
- - 文件名以这些单词结尾,如 a.service.ts
37
-
38
- 使用指南:
39
-
40
- - 文件放置在 app/modules 目录下,以模块划分目录。如 app/modules/user/login.service.ts
41
- - 配置 config.modules 可以设置哪些模块导出(可控制哪些用哪些不用)。注意这里同时最好同步设置 ets 相关配置,这样代码提示也就不会有未导出的模块功能。
42
- - breking: 控制器定义必须以.controller.ts 结尾,在原 egg 定义的,第一层目录就必须与 module 的配置导出名一致才能引用到。
43
- - 注意,由于使用的.controller.ts 这种后缀,对原 egg 的控制器加载会有影响,原 egg 需同样后缀,且,如果使用了模块导出,原 egg 也必须外部套一层模块名目录。
44
-
45
- ```
46
- //支持的文件
47
- **/*.service.ts
48
- **/*.controller.ts
49
- **/router.ts
50
- task/*.ts
51
- schedule/*.ts
52
- app.ts
53
- agent.ts
54
- ```
55
-
56
- ```config.js
57
- // 配置文件
58
- config.modules = {
59
- imports: ["mod_user","cat"],//配置需要使用的模块
60
- enable:true,//此属性配置用于开启module。开启后必须遵从本文档指南撰写代码,否则将和egg原来的方式造成冲突。
61
- };
62
-
63
- // tshelper.js
64
- require('dinegg/lib/tshelper')([moduleName1,mod2])
65
- ```
66
-
67
- - 使用
68
-
69
- ```
70
- //service
71
- this.ctx.service.
72
- //controller
73
- app.controller.
74
- //schedule 定时任务,从模块目录下的task/或者schedule/目录读取任务文件。只匹配模块下的第一层目录。*/task/task1.ts 和 */schedule/task2.ts
75
-
76
- ```
77
-
78
- ## permission 权限控制
79
-
80
- - 装饰器@permission
81
-
82
- 装饰器可以从 controllerDecorator 和 serviceDecorator 导入,效果一致!
83
-
84
- ```ts
85
- // controller.ts
86
- import { controllerDecorator } from "dinegg";
87
- const { permission } = controllerDecorator;
88
-
89
- class Controller {
90
- @get("/api/abc")
91
- @permission(["abc:bcd"])
92
- async method() {}
93
- }
94
- ```
95
-
96
- - 权限控制类实现及使用
97
-
98
- ```ts
99
-
100
- // 自定义权限控制实现类
101
- import { AbstractPermissionAccessControl } from "egg";
102
-
103
- export default class RoleAccessControl2 extends AbstractPermissionAccessControl {
104
- async main() {
105
- // console.log(this.roles);
106
- // console.log(this.methodName);
107
- // console.log(this.ctx);
108
- const userRole = this.ctx.request.query.myRole;
109
- console.log("userRole", userRole);
110
- if (this.permId.includes(userRole)) {
111
- return true;
112
- } else {
113
- throw new Error(`抱歉,您没有权限!需要的权限:${this.permId.toString()}`);
114
- }
115
- // return true;
116
- }
117
- }
118
-
119
-
120
- // 绑定在app.ts中 绑定后即可使用。在控制器或service的方法上绑定装饰器,如果验证权限失败会抛出错误。
121
- import { Application, IBoot } from "egg";
122
- import PermissionAccessControl from "./PermissionAccessControl";
123
- // import * as path from "path"
124
-
125
- export default class AppInit implements IBoot {
126
- private readonly app: Application;
127
-
128
- constructor(_app: Application) {
129
- this.app = _app;
130
- this.app.PermissionAccessControl = PermissionAccessControl;
131
- }
132
-
133
- async willReady() {}
134
- }
135
-
136
- ```
137
-
138
- ## cache 内存缓存简单实现 map 接口
139
-
140
- - `this.app.cache.set()`
141
- - `this.app.cache.get()`
142
- - `this.app.cache.remove()`
143
- - `this.app.cache.clear()`
144
-
145
- -使用方式 dts 声明
146
-
147
- ```ts
148
- /**
149
- * 添加一个缓存
150
- *
151
- * @param {string} key 字段key,注意不能重复
152
- * @param {*} value
153
- * @param {number} seconds 缓存时间,按s为单位 默认20s
154
- * @memberof AppCache
155
- */
156
- set(key: string, value: any, expire: number = 20): boolean;
157
- /**
158
- * 获取缓存
159
- *
160
- * @template T
161
- * @param {string} key
162
- * @return {*} {(T | null)}
163
- * @memberof AppCache
164
- */
165
- get<T extends any>(key: string): T | null;
166
- remove(key: string): boolean;
167
- delete(key: string): boolean;
168
- /** 移除已过期的key value */
169
- removeExpired(): boolean;
170
- /** 重置整个map为新的,原来的放弃,被垃圾回收 */
171
- reset(): void;
172
- /** 重置整个map为新的,原来的放弃,被垃圾回收 */
173
- clear(): void;
174
- ```
175
-
176
- ## Questions & Suggestions
177
-
178
- Please open an issue [here](https://github.com/eggjs/egg/issues).
1
+ <!--
2
+ * @copyright: Huang Ding
3
+ * @Author: ding-cx
4
+ * @Date: 2021-01-29 14:58:29
5
+ * @LastEditors: ding-cx
6
+ * @LastEditTime: 2021-09-25 10:54:18
7
+ * @Description: file content
8
+ -->
9
+
10
+ # dinegg
11
+
12
+ ding-egg framework
13
+
14
+ ## v3 breaking change
15
+
16
+ - dinegg v3 使用最新 3.0 的 egg,由于 egg3 最低支持 node 14.20,因此使用 dinegg v3 也不再兼容低版本 node,当前推荐使用 16/18
17
+ - sequelize 使用最新版的 6.0 版本
18
+ - dinegg v3 强烈不建议在 service 中访问 ctx 上的属性,所有的 http 入参(body,params,query,header)等,都建议只在 controller 中获取。响应也只能在 controller 中返回统一对象。然后显示传递参数给到service,也就是说将service作为业务逻辑方法库,提供明确的入参出参。不直接访问ctx
19
+
20
+ ## QuickStart
21
+
22
+ ```bash
23
+ $ npm install
24
+ $ npm test
25
+ ```
26
+
27
+ publish your framework to npm, then change app's framework config:
28
+
29
+ ```js
30
+ // {app_root}/index.js
31
+ {
32
+ "name": "my-project",
33
+ "egg": {
34
+ "framework": "dinegg"
35
+ }
36
+ }
37
+ ```
38
+
39
+ ## 使用 modules 封装业务逻辑代码在同一个目录下
40
+
41
+ - service、controller、middleware 等文件放在同一个目录,类似 nest 的模块组织程序结构。
42
+ - 文件名以这些单词结尾,如 a.service.ts
43
+
44
+ 使用指南:
45
+
46
+ - 文件放置在 app/modules 目录下,以模块划分目录。如 app/modules/user/login.service.ts
47
+ - 配置 config.modules 可以设置哪些模块导出(可控制哪些用哪些不用)。注意这里同时最好同步设置 ets 相关配置,这样代码提示也就不会有未导出的模块功能。
48
+ - breking: 控制器定义必须以.controller.ts 结尾,在原 egg 定义的,第一层目录就必须与 module 的配置导出名一致才能引用到。
49
+ - 注意,由于使用的.controller.ts 这种后缀,对原 egg 的控制器加载会有影响,原 egg 需同样后缀,且,如果使用了模块导出,原 egg 也必须外部套一层模块名目录。
50
+
51
+ ```
52
+ //支持的文件
53
+ **/*.service.ts
54
+ **/*.controller.ts
55
+ **/router.ts
56
+ task/*.ts
57
+ schedule/*.ts
58
+ app.ts
59
+ agent.ts
60
+ ```
61
+
62
+ ```config.js
63
+ // 配置文件
64
+ config.modules = {
65
+ imports: ["mod_user","cat"],//配置需要使用的模块
66
+ enable:true,//此属性配置用于开启module。开启后必须遵从本文档指南撰写代码,否则将和egg原来的方式造成冲突。
67
+ };
68
+
69
+ // tshelper.js
70
+ require('dinegg/lib/tshelper')([moduleName1,mod2])
71
+ ```
72
+
73
+ - 使用
74
+
75
+ ```
76
+ //service
77
+ this.ctx.service.
78
+ //controller
79
+ app.controller.
80
+ //schedule 定时任务,从模块目录下的task/或者schedule/目录读取任务文件。只匹配模块下的第一层目录。*/task/task1.ts 和 */schedule/task2.ts
81
+
82
+ ```
83
+
84
+ ## permission 权限控制
85
+
86
+ - 装饰器@permission
87
+
88
+ 装饰器可以从 controllerDecorator 和 serviceDecorator 导入,效果一致!
89
+
90
+ ```ts
91
+ // controller.ts
92
+ import { controllerDecorator } from "dinegg";
93
+ const { permission } = controllerDecorator;
94
+
95
+ class Controller {
96
+ @get("/api/abc")
97
+ @permission(["abc:bcd"])
98
+ async method() {}
99
+ }
100
+ ```
101
+
102
+ - 权限控制类实现及使用
103
+
104
+ ```ts
105
+ // 自定义权限控制实现类
106
+ import { AbstractPermissionAccessControl } from "egg";
107
+
108
+ export default class RoleAccessControl2 extends AbstractPermissionAccessControl {
109
+ async main() {
110
+ // console.log(this.roles);
111
+ // console.log(this.methodName);
112
+ // console.log(this.ctx);
113
+ const userRole = this.ctx.request.query.myRole;
114
+ console.log("userRole", userRole);
115
+ if (this.permId.includes(userRole)) {
116
+ return true;
117
+ } else {
118
+ throw new Error(`抱歉,您没有权限!需要的权限:${this.permId.toString()}`);
119
+ }
120
+ // return true;
121
+ }
122
+ }
123
+
124
+ // 绑定在app.ts中 绑定后即可使用。在控制器或service的方法上绑定装饰器,如果验证权限失败会抛出错误。
125
+ import { Application, IBoot } from "egg";
126
+ import PermissionAccessControl from "./PermissionAccessControl";
127
+ // import * as path from "path"
128
+
129
+ export default class AppInit implements IBoot {
130
+ private readonly app: Application;
131
+
132
+ constructor(_app: Application) {
133
+ this.app = _app;
134
+ this.app.PermissionAccessControl = PermissionAccessControl;
135
+ }
136
+
137
+ async willReady() {}
138
+ }
139
+ ```
140
+
141
+ ## cache 内存缓存简单实现 map 接口
142
+
143
+ - `this.app.cache.set()`
144
+ - `this.app.cache.get()`
145
+ - `this.app.cache.remove()`
146
+ - `this.app.cache.clear()`
147
+
148
+ -使用方式 dts 声明
149
+
150
+ ```ts
151
+ /**
152
+ * 添加一个缓存
153
+ *
154
+ * @param {string} key 字段key,注意不能重复
155
+ * @param {*} value
156
+ * @param {number} seconds 缓存时间,按s为单位 默认20s
157
+ * @memberof AppCache
158
+ */
159
+ set(key: string, value: any, expire: number = 20): boolean;
160
+ /**
161
+ * 获取缓存
162
+ *
163
+ * @template T
164
+ * @param {string} key
165
+ * @return {*} {(T | null)}
166
+ * @memberof AppCache
167
+ */
168
+ get<T extends any>(key: string): T | null;
169
+ remove(key: string): boolean;
170
+ delete(key: string): boolean;
171
+ /** 移除已过期的key value */
172
+ removeExpired(): boolean;
173
+ /** 重置整个map为新的,原来的放弃,被垃圾回收 */
174
+ reset(): void;
175
+ /** 重置整个map为新的,原来的放弃,被垃圾回收 */
176
+ clear(): void;
177
+ ```
178
+
179
+ ## Questions & Suggestions
180
+
181
+ Please open an issue [here](https://github.com/eggjs/egg/issues).
package/agent.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ import { Agent } from "egg";
2
+ export default class AppBoot {
3
+ app: Agent;
4
+ inst: any[];
5
+ constructor(app: Agent);
6
+ configWillLoad(): void;
7
+ configDidLoad(): void;
8
+ didLoad(): Promise<void>;
9
+ willReady(): Promise<void>;
10
+ didReady(): Promise<void>;
11
+ serverDidReady(): Promise<void>;
12
+ beforeClose(): Promise<void>;
13
+ }
package/agent.js CHANGED
@@ -1,62 +1,84 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const AppCache_1 = require("./lib/core/AppCache");
4
- async function moduleAppHooks(hooks, hook) {
5
- if (hooks.length === 0)
6
- return Promise.resolve(true);
7
- return new Promise((resolve) => {
8
- const len = hooks.length;
9
- let count = 0;
10
- hooks.forEach(async (oneHook) => {
11
- oneHook[hook] && (await oneHook[hook]());
12
- count++;
13
- if (count === len) {
14
- resolve(true);
15
- }
16
- });
17
- });
18
- }
19
- class AppBoot {
20
- constructor(app) {
21
- this.app = app;
22
- this.inst = this.app.__moduleExportAppBootInstanceList;
23
- app.__moduleExportAppBootInstanceList = undefined;
24
- }
25
- configWillLoad() {
26
- var _a;
27
- (_a = this.inst) === null || _a === void 0 ? void 0 : _a.forEach((item) => {
28
- var _a;
29
- (_a = item === null || item === void 0 ? void 0 : item.configWillLoad) === null || _a === void 0 ? void 0 : _a.call(item);
30
- });
31
- }
32
- configDidLoad() {
33
- var _a;
34
- this.app.cache = AppCache_1.default.init(this.app.config);
35
- (_a = this.inst) === null || _a === void 0 ? void 0 : _a.forEach((item) => {
36
- var _a;
37
- (_a = item === null || item === void 0 ? void 0 : item.configDidLoad) === null || _a === void 0 ? void 0 : _a.call(item);
38
- });
39
- }
40
- async didLoad() {
41
- const inst = this.inst;
42
- inst && (await moduleAppHooks(inst, "didLoad"));
43
- }
44
- async willReady() {
45
- const inst = this.inst;
46
- inst && (await moduleAppHooks(inst, "willReady"));
47
- }
48
- async didReady() {
49
- const inst = this.inst;
50
- inst && (await moduleAppHooks(inst, "didReady"));
51
- }
52
- async serverDidReady() {
53
- const inst = this.inst;
54
- inst && (await moduleAppHooks(inst, "serverDidReady"));
55
- }
56
- async beforeClose() {
57
- const inst = this.inst;
58
- inst && (await moduleAppHooks(inst, "beforeClose"));
59
- }
60
- }
61
- exports.default = AppBoot;
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLGtEQUEyQztBQVczQyxLQUFLLFVBQVUsY0FBYyxDQUFDLEtBQVksRUFBRSxJQUFZO0lBTXZELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUM5QixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3pCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QyxLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTtnQkFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2Q7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQXFCLE9BQU87SUFLM0IsWUFBWSxHQUFVO1FBQ3JCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBSSxJQUFJLENBQUMsR0FBVyxDQUFDLGlDQUFpQyxDQUFDO1FBQy9ELEdBQVcsQ0FBQyxpQ0FBaUMsR0FBRyxTQUFTLENBQUM7SUFDNUQsQ0FBQztJQUVELGNBQWM7O1FBRWIsTUFBQSxJQUFJLENBQUMsSUFBSSwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTs7WUFDM0IsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsY0FBYywrQ0FBcEIsSUFBSSxDQUFvQixDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWE7O1FBRVosSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsa0JBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUdoRCxNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFOztZQUMzQixNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxhQUFhLCtDQUFuQixJQUFJLENBQW1CLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFFWixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUztRQUVkLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsTUFBTSxjQUFjLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBR2IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFFbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUVoQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7Q0FDRDtBQTFERCwwQkEwREMifQ==
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const AppCache_1 = require("./lib/core/AppCache");
4
+ /*
5
+ * @copyright: Huang Ding
6
+ * @Author: ding-cx
7
+ * @Date: 2021-02-26 14:11:08
8
+ * @LastEditors: ding-cx
9
+ * @LastEditTime: 2021-09-07 18:21:36
10
+ * @Description: file content
11
+ */
12
+ async function moduleAppHooks(hooks, hook) {
13
+ // sync all hook
14
+ // for (const oneHook of hooks) {
15
+ // oneHook[hook] && (await oneHook[hook]());
16
+ // }
17
+ // async all hook
18
+ if (hooks.length === 0)
19
+ return Promise.resolve(true);
20
+ return new Promise((resolve) => {
21
+ const len = hooks.length;
22
+ let count = 0;
23
+ hooks.forEach(async (oneHook) => {
24
+ oneHook[hook] && (await oneHook[hook]());
25
+ count++;
26
+ if (count === len) {
27
+ resolve(true);
28
+ }
29
+ });
30
+ });
31
+ }
32
+ class AppBoot {
33
+ constructor(app) {
34
+ this.app = app;
35
+ this.inst = this.app.__moduleExportAppBootInstanceList;
36
+ app.__moduleExportAppBootInstanceList = undefined;
37
+ }
38
+ configWillLoad() {
39
+ var _a;
40
+ // 执行模块导出的app.js导出的引导类的同名方法。
41
+ (_a = this.inst) === null || _a === void 0 ? void 0 : _a.forEach((item) => {
42
+ var _a;
43
+ (_a = item === null || item === void 0 ? void 0 : item.configWillLoad) === null || _a === void 0 ? void 0 : _a.call(item);
44
+ });
45
+ }
46
+ configDidLoad() {
47
+ var _a;
48
+ // @ts-ignore 挂载缓存实例到agent
49
+ this.app.cache = AppCache_1.default.init(this.app.config);
50
+ // Config, plugin files have loaded.
51
+ (_a = this.inst) === null || _a === void 0 ? void 0 : _a.forEach((item) => {
52
+ var _a;
53
+ (_a = item === null || item === void 0 ? void 0 : item.configDidLoad) === null || _a === void 0 ? void 0 : _a.call(item);
54
+ });
55
+ }
56
+ async didLoad() {
57
+ // All files have loaded, start plugin here.
58
+ const inst = this.inst;
59
+ inst && (await moduleAppHooks(inst, "didLoad"));
60
+ }
61
+ async willReady() {
62
+ // All plugins have started, can do some thing before app ready.
63
+ const inst = this.inst;
64
+ inst && (await moduleAppHooks(inst, "willReady"));
65
+ }
66
+ async didReady() {
67
+ // Worker is ready, can do some things
68
+ // don't need to block the app boot.
69
+ const inst = this.inst;
70
+ inst && (await moduleAppHooks(inst, "didReady"));
71
+ }
72
+ async serverDidReady() {
73
+ // Server is listening.
74
+ const inst = this.inst;
75
+ inst && (await moduleAppHooks(inst, "serverDidReady"));
76
+ }
77
+ async beforeClose() {
78
+ // Do some thing before app close.
79
+ const inst = this.inst;
80
+ inst && (await moduleAppHooks(inst, "beforeClose"));
81
+ }
82
+ }
83
+ exports.default = AppBoot;
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLGtEQUEyQztBQUUzQzs7Ozs7OztHQU9HO0FBRUgsS0FBSyxVQUFVLGNBQWMsQ0FBQyxLQUFZLEVBQUUsSUFBWTtJQUN2RCxnQkFBZ0I7SUFDaEIsaUNBQWlDO0lBQ2pDLDhDQUE4QztJQUM5QyxJQUFJO0lBQ0osaUJBQWlCO0lBQ2pCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUM5QixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3pCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QyxLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTtnQkFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2Q7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQXFCLE9BQU87SUFLM0IsWUFBWSxHQUFVO1FBQ3JCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBSSxJQUFJLENBQUMsR0FBVyxDQUFDLGlDQUFpQyxDQUFDO1FBQy9ELEdBQVcsQ0FBQyxpQ0FBaUMsR0FBRyxTQUFTLENBQUM7SUFDNUQsQ0FBQztJQUVELGNBQWM7O1FBQ2IsNEJBQTRCO1FBQzVCLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7O1lBQzNCLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGNBQWMsb0RBQUksQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhOztRQUNaLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxrQkFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWhELG9DQUFvQztRQUNwQyxNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFOztZQUMzQixNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxhQUFhLG9EQUFJLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFDWiw0Q0FBNEM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVM7UUFDZCxnRUFBZ0U7UUFDaEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVE7UUFDYixzQ0FBc0M7UUFDdEMsb0NBQW9DO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsTUFBTSxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ25CLHVCQUF1QjtRQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2hCLGtDQUFrQztRQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7Q0FDRDtBQTFERCwwQkEwREMifQ==
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ /** app挂载内存缓存对象 */
3
+ readonly cache: any;
4
+ };
5
+ export default _default;
@@ -1,26 +1,23 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const AppCache_1 = require("../../lib/core/AppCache");
4
- const cacheKeySymbol = Symbol("dinegg#appCacheTemp");
5
- exports.default = {
6
- routerRegister(router, controller, routeName, mainPath, middlewares = []) {
7
- router.resources(routeName, mainPath, ...middlewares, controller);
8
- controller.batchPost && router.post(routeName, mainPath + "/batchPost", ...middlewares, controller.batchPost);
9
- controller.batchDelete && router.post(routeName, mainPath + "/batchDelete", ...middlewares, controller.batchDelete);
10
- controller.getSearchData && router.post(routeName, mainPath + "/getSearchData", ...middlewares, controller.getSearchData);
11
- },
12
- createDingContext(req) {
13
- const ctx = this.createAnonymousContext();
14
- ctx.request.body = req === null || req === void 0 ? void 0 : req.body;
15
- ctx.query = req === null || req === void 0 ? void 0 : req.query;
16
- ctx.params = req === null || req === void 0 ? void 0 : req.params;
17
- return ctx;
18
- },
19
- get cache() {
20
- if (!this[cacheKeySymbol]) {
21
- this[cacheKeySymbol] = AppCache_1.default.init(this.config);
22
- }
23
- return this[cacheKeySymbol];
24
- },
25
- };
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhcHBsaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxZQUFZLENBQUM7O0FBR2Isc0RBQStDO0FBRS9DLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRXJELGtCQUFlO0lBRWQsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLEdBQUcsRUFBRTtRQUV2RSxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFbEUsVUFBVSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEdBQUcsWUFBWSxFQUFFLEdBQUcsV0FBVyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5RyxVQUFVLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsR0FBRyxjQUFjLEVBQUUsR0FBRyxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXBILFVBQVUsQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxHQUFHLGdCQUFnQixFQUFFLEdBQUcsV0FBVyxFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMzSCxDQUFDO0lBRUQsaUJBQWlCLENBQW9CLEdBQVE7UUFDNUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDMUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLElBQUksQ0FBQztRQUM3QixHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxLQUFLLENBQUM7UUFDdkIsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsTUFBTSxDQUFDO1FBQ3pCLE9BQU8sR0FBRyxDQUFDO0lBQ1osQ0FBQztJQUVELElBQUksS0FBSztRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFFMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLGtCQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNsRDtRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7Q0FDRCxDQUFDIn0=
1
+ /*
2
+ * @copyright: Huang Ding
3
+ * @Author: ding-cx
4
+ * @Date: 2021-02-24 17:49:09
5
+ * @LastEditors: ding-cx
6
+ * @LastEditTime: 2021-10-21 16:41:54
7
+ * @Description: file content
8
+ */
9
+ "use strict";
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ const AppCache_1 = require("../../lib/core/AppCache");
12
+ const cacheKeySymbol = Symbol("dinegg#appCacheTempKey");
13
+ exports.default = {
14
+ /** app挂载内存缓存对象 */
15
+ get cache() {
16
+ if (!this[cacheKeySymbol]) {
17
+ // @ts-ignore
18
+ this[cacheKeySymbol] = AppCache_1.default.init(this.config);
19
+ }
20
+ return this[cacheKeySymbol];
21
+ },
22
+ };
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhcHBsaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBQ0gsWUFBWSxDQUFDOztBQUViLHNEQUErQztBQUUvQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUV4RCxrQkFBZTtJQUNkLGtCQUFrQjtJQUNsQixJQUFJLEtBQUs7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQzFCLGFBQWE7WUFDYixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsa0JBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2xEO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDN0IsQ0FBQztDQUNELENBQUMifQ==
@@ -0,0 +1,6 @@
1
+ declare const _default: {
2
+ throw(msg: string, ...args: any[]): never;
3
+ success(data: any, code?: number, msg?: string): never;
4
+ error(data: any, code?: number, msg?: string): never;
5
+ };
6
+ export default _default;