@ruiapp/rapid-core 0.9.9 → 0.10.1

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 (198) hide show
  1. package/CHANGELOG.md +11 -11
  2. package/dist/bootstrapApplicationConfig.d.ts +51 -0
  3. package/dist/index.js +168 -40
  4. package/dist/plugins/auth/services/AuthService.d.ts +7 -1
  5. package/dist/types.d.ts +4 -0
  6. package/package.json +1 -1
  7. package/rollup.config.js +16 -16
  8. package/src/bootstrapApplicationConfig.ts +897 -782
  9. package/src/core/actionHandler.ts +23 -23
  10. package/src/core/eventManager.ts +20 -20
  11. package/src/core/facility.ts +7 -7
  12. package/src/core/http/formDataParser.ts +89 -89
  13. package/src/core/http-types.ts +4 -4
  14. package/src/core/pluginManager.ts +193 -193
  15. package/src/core/providers/runtimeProvider.ts +5 -5
  16. package/src/core/request.ts +96 -96
  17. package/src/core/response.ts +79 -79
  18. package/src/core/routeContext.ts +127 -127
  19. package/src/core/routes/healthz.ts +20 -20
  20. package/src/core/routes/index.ts +3 -3
  21. package/src/core/routesBuilder.ts +110 -110
  22. package/src/core/server.ts +156 -156
  23. package/src/dataAccess/columnTypeMapper.ts +22 -22
  24. package/src/dataAccess/dataAccessTypes.ts +165 -165
  25. package/src/dataAccess/dataAccessor.ts +135 -135
  26. package/src/dataAccess/entityManager.ts +1932 -1932
  27. package/src/dataAccess/entityMapper.ts +111 -111
  28. package/src/dataAccess/entityValidator.ts +33 -33
  29. package/src/dataAccess/propertyMapper.ts +28 -28
  30. package/src/deno-std/assert/assert.ts +9 -9
  31. package/src/deno-std/assert/assertion_error.ts +7 -7
  32. package/src/deno-std/datetime/to_imf.ts +32 -32
  33. package/src/deno-std/encoding/base64.ts +141 -141
  34. package/src/deno-std/http/cookie.ts +372 -372
  35. package/src/facilities/cache/CacheFacilityTypes.ts +29 -29
  36. package/src/facilities/cache/CacheFactory.ts +31 -31
  37. package/src/facilities/cache/MemoryCache.ts +58 -58
  38. package/src/facilities/cache/MemoryCacheProvider.ts +15 -15
  39. package/src/facilities/log/LogFacility.ts +35 -35
  40. package/src/helpers/entityHelper.ts +89 -89
  41. package/src/helpers/filterHelper.ts +148 -148
  42. package/src/helpers/inputHelper.ts +11 -11
  43. package/src/helpers/licenseHelper.ts +29 -29
  44. package/src/helpers/metaHelper.ts +111 -111
  45. package/src/helpers/runCollectionEntityActionHandler.ts +58 -58
  46. package/src/index.ts +82 -82
  47. package/src/plugins/auth/AuthPlugin.ts +107 -103
  48. package/src/plugins/auth/AuthPluginTypes.ts +11 -11
  49. package/src/plugins/auth/actionHandlers/changePassword.ts +61 -61
  50. package/src/plugins/auth/actionHandlers/createSession.ts +68 -68
  51. package/src/plugins/auth/actionHandlers/deleteSession.ts +18 -18
  52. package/src/plugins/auth/actionHandlers/getMyProfile.ts +28 -38
  53. package/src/plugins/auth/actionHandlers/index.ts +8 -8
  54. package/src/plugins/auth/actionHandlers/resetPassword.ts +45 -45
  55. package/src/plugins/auth/models/AccessToken.ts +56 -56
  56. package/src/plugins/auth/models/index.ts +3 -3
  57. package/src/plugins/auth/routes/changePassword.ts +15 -15
  58. package/src/plugins/auth/routes/getMyProfile.ts +15 -15
  59. package/src/plugins/auth/routes/index.ts +7 -7
  60. package/src/plugins/auth/routes/resetPassword.ts +15 -15
  61. package/src/plugins/auth/routes/signin.ts +15 -15
  62. package/src/plugins/auth/routes/signout.ts +15 -15
  63. package/src/plugins/auth/services/AuthService.ts +66 -39
  64. package/src/plugins/cronJob/CronJobPlugin.ts +104 -104
  65. package/src/plugins/cronJob/CronJobPluginTypes.ts +44 -44
  66. package/src/plugins/cronJob/actionHandlers/index.ts +4 -4
  67. package/src/plugins/cronJob/actionHandlers/runCronJob.ts +32 -32
  68. package/src/plugins/cronJob/entityWatchers/cronJobEntityWatchers.ts +24 -24
  69. package/src/plugins/cronJob/entityWatchers/index.ts +4 -4
  70. package/src/plugins/cronJob/models/CronJob.ts +129 -129
  71. package/src/plugins/cronJob/models/index.ts +3 -3
  72. package/src/plugins/cronJob/routes/index.ts +3 -3
  73. package/src/plugins/cronJob/routes/runCronJob.ts +15 -15
  74. package/src/plugins/cronJob/services/CronJobService.ts +252 -252
  75. package/src/plugins/dataManage/DataManagePlugin.ts +163 -163
  76. package/src/plugins/dataManage/actionHandlers/addEntityRelations.ts +15 -15
  77. package/src/plugins/dataManage/actionHandlers/countCollectionEntities.ts +17 -17
  78. package/src/plugins/dataManage/actionHandlers/createCollectionEntitiesBatch.ts +81 -81
  79. package/src/plugins/dataManage/actionHandlers/createCollectionEntity.ts +20 -20
  80. package/src/plugins/dataManage/actionHandlers/deleteCollectionEntities.ts +45 -45
  81. package/src/plugins/dataManage/actionHandlers/deleteCollectionEntityById.ts +20 -20
  82. package/src/plugins/dataManage/actionHandlers/findCollectionEntities.ts +27 -27
  83. package/src/plugins/dataManage/actionHandlers/findCollectionEntityById.ts +30 -30
  84. package/src/plugins/dataManage/actionHandlers/queryDatabase.ts +22 -22
  85. package/src/plugins/dataManage/actionHandlers/removeEntityRelations.ts +15 -15
  86. package/src/plugins/dataManage/actionHandlers/updateCollectionEntityById.ts +38 -38
  87. package/src/plugins/entityAccessControl/EntityAccessControlPlugin.ts +146 -146
  88. package/src/plugins/fileManage/FileManagePlugin.ts +52 -52
  89. package/src/plugins/fileManage/actionHandlers/downloadDocument.ts +65 -65
  90. package/src/plugins/fileManage/actionHandlers/downloadFile.ts +44 -44
  91. package/src/plugins/fileManage/actionHandlers/uploadFile.ts +33 -33
  92. package/src/plugins/fileManage/routes/downloadDocument.ts +15 -15
  93. package/src/plugins/fileManage/routes/downloadFile.ts +15 -15
  94. package/src/plugins/fileManage/routes/index.ts +5 -5
  95. package/src/plugins/fileManage/routes/uploadFile.ts +15 -15
  96. package/src/plugins/license/LicensePlugin.ts +79 -79
  97. package/src/plugins/license/LicensePluginTypes.ts +95 -95
  98. package/src/plugins/license/LicenseService.ts +137 -137
  99. package/src/plugins/license/actionHandlers/getLicense.ts +18 -18
  100. package/src/plugins/license/actionHandlers/index.ts +5 -5
  101. package/src/plugins/license/actionHandlers/updateLicense.ts +24 -24
  102. package/src/plugins/license/helpers/certHelper.ts +21 -21
  103. package/src/plugins/license/helpers/cryptoHelper.ts +47 -47
  104. package/src/plugins/license/models/index.ts +1 -1
  105. package/src/plugins/license/routes/getLicense.ts +15 -15
  106. package/src/plugins/license/routes/index.ts +4 -4
  107. package/src/plugins/license/routes/updateLicense.ts +15 -15
  108. package/src/plugins/mail/MailPlugin.ts +74 -74
  109. package/src/plugins/mail/MailPluginTypes.ts +27 -27
  110. package/src/plugins/mail/MailService.ts +38 -38
  111. package/src/plugins/mail/actionHandlers/index.ts +3 -3
  112. package/src/plugins/mail/models/index.ts +1 -1
  113. package/src/plugins/mail/routes/index.ts +1 -1
  114. package/src/plugins/metaManage/MetaManagePlugin.ts +198 -198
  115. package/src/plugins/metaManage/actionHandlers/getMetaModelDetail.ts +10 -10
  116. package/src/plugins/metaManage/actionHandlers/listMetaModels.ts +9 -9
  117. package/src/plugins/metaManage/actionHandlers/listMetaRoutes.ts +9 -9
  118. package/src/plugins/metaManage/services/MetaService.ts +376 -376
  119. package/src/plugins/notification/NotificationPlugin.ts +68 -68
  120. package/src/plugins/notification/NotificationPluginTypes.ts +13 -13
  121. package/src/plugins/notification/NotificationService.ts +25 -25
  122. package/src/plugins/notification/actionHandlers/index.ts +3 -3
  123. package/src/plugins/notification/models/Notification.ts +60 -60
  124. package/src/plugins/notification/models/index.ts +3 -3
  125. package/src/plugins/notification/routes/index.ts +1 -1
  126. package/src/plugins/routeManage/RouteManagePlugin.ts +64 -64
  127. package/src/plugins/routeManage/actionHandlers/httpProxy.ts +13 -13
  128. package/src/plugins/routeManage/actionHandlers/mock.ts +28 -28
  129. package/src/plugins/sequence/SequencePlugin.ts +146 -146
  130. package/src/plugins/sequence/SequencePluginTypes.ts +69 -69
  131. package/src/plugins/sequence/SequenceService.ts +92 -92
  132. package/src/plugins/sequence/actionHandlers/generateSn.ts +32 -32
  133. package/src/plugins/sequence/actionHandlers/index.ts +4 -4
  134. package/src/plugins/sequence/models/SequenceAutoIncrementRecord.ts +49 -49
  135. package/src/plugins/sequence/models/SequenceRule.ts +42 -42
  136. package/src/plugins/sequence/models/index.ts +4 -4
  137. package/src/plugins/sequence/routes/generateSn.ts +15 -15
  138. package/src/plugins/sequence/routes/index.ts +3 -3
  139. package/src/plugins/sequence/segment-utility.ts +11 -11
  140. package/src/plugins/sequence/segments/autoIncrement.ts +90 -90
  141. package/src/plugins/sequence/segments/dayOfMonth.ts +19 -19
  142. package/src/plugins/sequence/segments/index.ts +9 -9
  143. package/src/plugins/sequence/segments/literal.ts +16 -16
  144. package/src/plugins/sequence/segments/month.ts +19 -19
  145. package/src/plugins/sequence/segments/parameter.ts +20 -20
  146. package/src/plugins/sequence/segments/year.ts +19 -19
  147. package/src/plugins/serverOperation/ServerOperationPlugin.ts +91 -91
  148. package/src/plugins/serverOperation/ServerOperationPluginTypes.ts +15 -15
  149. package/src/plugins/serverOperation/actionHandlers/index.ts +4 -4
  150. package/src/plugins/serverOperation/actionHandlers/runServerOperation.ts +15 -15
  151. package/src/plugins/setting/SettingPlugin.ts +68 -68
  152. package/src/plugins/setting/SettingPluginTypes.ts +37 -37
  153. package/src/plugins/setting/SettingService.ts +213 -213
  154. package/src/plugins/setting/actionHandlers/getSystemSettingValues.ts +30 -30
  155. package/src/plugins/setting/actionHandlers/getUserSettingValues.ts +38 -38
  156. package/src/plugins/setting/actionHandlers/index.ts +6 -6
  157. package/src/plugins/setting/actionHandlers/setSystemSettingValues.ts +30 -30
  158. package/src/plugins/setting/models/SystemSettingGroupSetting.ts +57 -57
  159. package/src/plugins/setting/models/SystemSettingItem.ts +48 -48
  160. package/src/plugins/setting/models/SystemSettingItemSetting.ts +73 -73
  161. package/src/plugins/setting/models/UserSettingGroupSetting.ts +57 -57
  162. package/src/plugins/setting/models/UserSettingItem.ts +55 -55
  163. package/src/plugins/setting/models/UserSettingItemSetting.ts +73 -73
  164. package/src/plugins/setting/models/index.ts +8 -8
  165. package/src/plugins/setting/routes/getSystemSettingValues.ts +15 -15
  166. package/src/plugins/setting/routes/getUserSettingValues.ts +15 -15
  167. package/src/plugins/setting/routes/index.ts +5 -5
  168. package/src/plugins/setting/routes/setSystemSettingValues.ts +15 -15
  169. package/src/plugins/stateMachine/StateMachinePlugin.ts +196 -196
  170. package/src/plugins/stateMachine/StateMachinePluginTypes.ts +48 -48
  171. package/src/plugins/stateMachine/actionHandlers/index.ts +4 -4
  172. package/src/plugins/stateMachine/actionHandlers/sendStateMachineEvent.ts +54 -54
  173. package/src/plugins/stateMachine/models/StateMachine.ts +42 -42
  174. package/src/plugins/stateMachine/models/index.ts +3 -3
  175. package/src/plugins/stateMachine/routes/index.ts +3 -3
  176. package/src/plugins/stateMachine/routes/sendStateMachineEvent.ts +15 -15
  177. package/src/plugins/stateMachine/stateMachineHelper.ts +36 -36
  178. package/src/plugins/webhooks/WebhooksPlugin.ts +148 -148
  179. package/src/plugins/webhooks/pluginConfig.ts +75 -75
  180. package/src/polyfill.ts +5 -5
  181. package/src/proxy/mod.ts +38 -38
  182. package/src/proxy/types.ts +21 -21
  183. package/src/queryBuilder/index.ts +1 -1
  184. package/src/queryBuilder/queryBuilder.ts +755 -755
  185. package/src/server.ts +530 -530
  186. package/src/types/cron-job-types.ts +66 -66
  187. package/src/types.ts +862 -856
  188. package/src/utilities/accessControlUtility.ts +33 -33
  189. package/src/utilities/entityUtility.ts +18 -18
  190. package/src/utilities/errorUtility.ts +15 -15
  191. package/src/utilities/fsUtility.ts +137 -137
  192. package/src/utilities/httpUtility.ts +19 -19
  193. package/src/utilities/jwtUtility.ts +26 -26
  194. package/src/utilities/passwordUtility.ts +26 -26
  195. package/src/utilities/pathUtility.ts +14 -14
  196. package/src/utilities/timeUtility.ts +17 -17
  197. package/src/utilities/typeUtility.ts +15 -15
  198. package/tsconfig.json +19 -19
@@ -1,193 +1,193 @@
1
- import { CreateEntityOptions, RpdApplicationConfig, RpdDataModel, RpdRouteActionConfig, UpdateEntityByIdOptions } from "~/types";
2
- import { IRpdServer, RapidPlugin } from "./server";
3
- import { RouteContext } from "./routeContext";
4
- import { ActionHandlerContext } from "./actionHandler";
5
-
6
- class PluginManager {
7
- #server: IRpdServer;
8
- #plugins: RapidPlugin[];
9
-
10
- constructor(server: IRpdServer) {
11
- this.#server = server;
12
- this.#plugins = [];
13
- }
14
-
15
- async loadPlugins(plugins: RapidPlugin[]) {
16
- for (const plugin of plugins) {
17
- this.#plugins.push(plugin);
18
- }
19
- }
20
-
21
- /** 初始化插件时调用。 */
22
- async initPlugins() {
23
- for (const plugin of this.#plugins) {
24
- if (plugin.initPlugin) {
25
- await plugin.initPlugin(this.#server);
26
- }
27
- }
28
- }
29
-
30
- /** 注册中间件 */
31
- async registerMiddlewares() {
32
- for (const plugin of this.#plugins) {
33
- if (plugin.registerMiddlewares) {
34
- await plugin.registerMiddlewares(this.#server);
35
- }
36
- }
37
- }
38
-
39
- /** 注册接口动作处理程序 */
40
- async registerActionHandlers() {
41
- for (const plugin of this.#plugins) {
42
- if (plugin.registerActionHandlers) {
43
- await plugin.registerActionHandlers(this.#server);
44
- }
45
- }
46
- }
47
-
48
- /** 注册事件处理程序 */
49
- async registerEventHandlers() {
50
- for (const plugin of this.#plugins) {
51
- if (plugin.registerEventHandlers) {
52
- await plugin.registerEventHandlers(this.#server);
53
- }
54
- }
55
- }
56
-
57
- /** 注册消息处理程序 */
58
- async registerMessageHandlers() {
59
- for (const plugin of this.#plugins) {
60
- if (plugin.registerMessageHandlers) {
61
- await plugin.registerMessageHandlers(this.#server);
62
- }
63
- }
64
- }
65
-
66
- /** 注册任务处理程序 */
67
- async registerTaskProcessors() {
68
- for (const plugin of this.#plugins) {
69
- if (plugin.registerTaskProcessors) {
70
- await plugin.registerTaskProcessors(this.#server);
71
- }
72
- }
73
- }
74
-
75
- /** 在加载应用前调用。 */
76
- async onLoadingApplication(applicationConfig: RpdApplicationConfig) {
77
- for (const plugin of this.#plugins) {
78
- if (plugin.onLoadingApplication) {
79
- await plugin.onLoadingApplication(this.#server, applicationConfig);
80
- }
81
- }
82
- }
83
-
84
- /** 配置数据模型 */
85
- async configureModels(applicationConfig: RpdApplicationConfig) {
86
- for (const plugin of this.#plugins) {
87
- if (plugin.configureModels) {
88
- await plugin.configureModels(this.#server, applicationConfig);
89
- }
90
- }
91
- }
92
-
93
- /** 配置模型属性 */
94
- async configureModelProperties(applicationConfig: RpdApplicationConfig) {
95
- for (const plugin of this.#plugins) {
96
- if (plugin.configureModelProperties) {
97
- await plugin.configureModelProperties(this.#server, applicationConfig);
98
- }
99
- }
100
- }
101
-
102
- /** 配置服务 */
103
- async configureServices(applicationConfig: RpdApplicationConfig) {
104
- for (const plugin of this.#plugins) {
105
- if (plugin.configureServices) {
106
- await plugin.configureServices(this.#server, applicationConfig);
107
- }
108
- }
109
- }
110
-
111
- /** 配置路由 */
112
- async configureRoutes(applicationConfig: RpdApplicationConfig) {
113
- for (const plugin of this.#plugins) {
114
- if (plugin.configureRoutes) {
115
- await plugin.configureRoutes(this.#server, applicationConfig);
116
- }
117
- }
118
- }
119
-
120
- /** 配置定时任务 */
121
- async registerCronJobs() {
122
- for (const plugin of this.#plugins) {
123
- if (plugin.registerCronJobs) {
124
- await plugin.registerCronJobs(this.#server);
125
- }
126
- }
127
- }
128
-
129
- /** 在应用配置加载完成后调用。此时插件可以进行一些数据的初始化工作。 */
130
- async onApplicationLoaded(applicationConfig: RpdApplicationConfig) {
131
- for (const plugin of this.#plugins) {
132
- if (plugin.onApplicationLoaded) {
133
- await plugin.onApplicationLoaded(this.#server, applicationConfig);
134
- }
135
- }
136
- }
137
-
138
- /** 在应用准备完成后调用。此时服务器已经可以处理网络请求。 */
139
- async onApplicationReady(applicationConfig: RpdApplicationConfig) {
140
- for (const plugin of this.#plugins) {
141
- if (plugin.onApplicationReady) {
142
- await plugin.onApplicationReady(this.#server, applicationConfig);
143
- }
144
- }
145
- }
146
-
147
- /** 在接收到HTTP请求,准备路由上下文时调用。 */
148
- async onPrepareRouteContext(routeContext: RouteContext) {
149
- for (const plugin of this.#plugins) {
150
- if (plugin.onPrepareRouteContext) {
151
- await plugin.onPrepareRouteContext(this.#server, routeContext);
152
- }
153
- }
154
- }
155
-
156
- /** 在接收到HTTP请求,执行 actions 前调用。 */
157
- async beforeRunRouteActions(handlerContext: ActionHandlerContext) {
158
- for (const plugin of this.#plugins) {
159
- if (plugin.beforeRunRouteActions) {
160
- await plugin.beforeRunRouteActions(this.#server, handlerContext);
161
- }
162
- }
163
- }
164
-
165
- /** 在执行 action hanlder 前调用。 */
166
- async beforeRunActionHandler(handlerContext: ActionHandlerContext, actionConfig: RpdRouteActionConfig) {
167
- for (const plugin of this.#plugins) {
168
- if (plugin.beforeRunActionHandler) {
169
- await plugin.beforeRunActionHandler(this.#server, handlerContext, actionConfig);
170
- }
171
- }
172
- }
173
-
174
- /** 在创建实体前调用。 */
175
- async beforeCreateEntity(model: RpdDataModel, options: CreateEntityOptions) {
176
- for (const plugin of this.#plugins) {
177
- if (plugin.beforeCreateEntity) {
178
- await plugin.beforeCreateEntity(this.#server, model, options);
179
- }
180
- }
181
- }
182
-
183
- /** 在更新实体前调用。 */
184
- async beforeUpdateEntity(model: RpdDataModel, options: UpdateEntityByIdOptions, currentEntity: any) {
185
- for (const plugin of this.#plugins) {
186
- if (plugin.beforeUpdateEntity) {
187
- await plugin.beforeUpdateEntity(this.#server, model, options, currentEntity);
188
- }
189
- }
190
- }
191
- }
192
-
193
- export default PluginManager;
1
+ import { CreateEntityOptions, RpdApplicationConfig, RpdDataModel, RpdRouteActionConfig, UpdateEntityByIdOptions } from "~/types";
2
+ import { IRpdServer, RapidPlugin } from "./server";
3
+ import { RouteContext } from "./routeContext";
4
+ import { ActionHandlerContext } from "./actionHandler";
5
+
6
+ class PluginManager {
7
+ #server: IRpdServer;
8
+ #plugins: RapidPlugin[];
9
+
10
+ constructor(server: IRpdServer) {
11
+ this.#server = server;
12
+ this.#plugins = [];
13
+ }
14
+
15
+ async loadPlugins(plugins: RapidPlugin[]) {
16
+ for (const plugin of plugins) {
17
+ this.#plugins.push(plugin);
18
+ }
19
+ }
20
+
21
+ /** 初始化插件时调用。 */
22
+ async initPlugins() {
23
+ for (const plugin of this.#plugins) {
24
+ if (plugin.initPlugin) {
25
+ await plugin.initPlugin(this.#server);
26
+ }
27
+ }
28
+ }
29
+
30
+ /** 注册中间件 */
31
+ async registerMiddlewares() {
32
+ for (const plugin of this.#plugins) {
33
+ if (plugin.registerMiddlewares) {
34
+ await plugin.registerMiddlewares(this.#server);
35
+ }
36
+ }
37
+ }
38
+
39
+ /** 注册接口动作处理程序 */
40
+ async registerActionHandlers() {
41
+ for (const plugin of this.#plugins) {
42
+ if (plugin.registerActionHandlers) {
43
+ await plugin.registerActionHandlers(this.#server);
44
+ }
45
+ }
46
+ }
47
+
48
+ /** 注册事件处理程序 */
49
+ async registerEventHandlers() {
50
+ for (const plugin of this.#plugins) {
51
+ if (plugin.registerEventHandlers) {
52
+ await plugin.registerEventHandlers(this.#server);
53
+ }
54
+ }
55
+ }
56
+
57
+ /** 注册消息处理程序 */
58
+ async registerMessageHandlers() {
59
+ for (const plugin of this.#plugins) {
60
+ if (plugin.registerMessageHandlers) {
61
+ await plugin.registerMessageHandlers(this.#server);
62
+ }
63
+ }
64
+ }
65
+
66
+ /** 注册任务处理程序 */
67
+ async registerTaskProcessors() {
68
+ for (const plugin of this.#plugins) {
69
+ if (plugin.registerTaskProcessors) {
70
+ await plugin.registerTaskProcessors(this.#server);
71
+ }
72
+ }
73
+ }
74
+
75
+ /** 在加载应用前调用。 */
76
+ async onLoadingApplication(applicationConfig: RpdApplicationConfig) {
77
+ for (const plugin of this.#plugins) {
78
+ if (plugin.onLoadingApplication) {
79
+ await plugin.onLoadingApplication(this.#server, applicationConfig);
80
+ }
81
+ }
82
+ }
83
+
84
+ /** 配置数据模型 */
85
+ async configureModels(applicationConfig: RpdApplicationConfig) {
86
+ for (const plugin of this.#plugins) {
87
+ if (plugin.configureModels) {
88
+ await plugin.configureModels(this.#server, applicationConfig);
89
+ }
90
+ }
91
+ }
92
+
93
+ /** 配置模型属性 */
94
+ async configureModelProperties(applicationConfig: RpdApplicationConfig) {
95
+ for (const plugin of this.#plugins) {
96
+ if (plugin.configureModelProperties) {
97
+ await plugin.configureModelProperties(this.#server, applicationConfig);
98
+ }
99
+ }
100
+ }
101
+
102
+ /** 配置服务 */
103
+ async configureServices(applicationConfig: RpdApplicationConfig) {
104
+ for (const plugin of this.#plugins) {
105
+ if (plugin.configureServices) {
106
+ await plugin.configureServices(this.#server, applicationConfig);
107
+ }
108
+ }
109
+ }
110
+
111
+ /** 配置路由 */
112
+ async configureRoutes(applicationConfig: RpdApplicationConfig) {
113
+ for (const plugin of this.#plugins) {
114
+ if (plugin.configureRoutes) {
115
+ await plugin.configureRoutes(this.#server, applicationConfig);
116
+ }
117
+ }
118
+ }
119
+
120
+ /** 配置定时任务 */
121
+ async registerCronJobs() {
122
+ for (const plugin of this.#plugins) {
123
+ if (plugin.registerCronJobs) {
124
+ await plugin.registerCronJobs(this.#server);
125
+ }
126
+ }
127
+ }
128
+
129
+ /** 在应用配置加载完成后调用。此时插件可以进行一些数据的初始化工作。 */
130
+ async onApplicationLoaded(applicationConfig: RpdApplicationConfig) {
131
+ for (const plugin of this.#plugins) {
132
+ if (plugin.onApplicationLoaded) {
133
+ await plugin.onApplicationLoaded(this.#server, applicationConfig);
134
+ }
135
+ }
136
+ }
137
+
138
+ /** 在应用准备完成后调用。此时服务器已经可以处理网络请求。 */
139
+ async onApplicationReady(applicationConfig: RpdApplicationConfig) {
140
+ for (const plugin of this.#plugins) {
141
+ if (plugin.onApplicationReady) {
142
+ await plugin.onApplicationReady(this.#server, applicationConfig);
143
+ }
144
+ }
145
+ }
146
+
147
+ /** 在接收到HTTP请求,准备路由上下文时调用。 */
148
+ async onPrepareRouteContext(routeContext: RouteContext) {
149
+ for (const plugin of this.#plugins) {
150
+ if (plugin.onPrepareRouteContext) {
151
+ await plugin.onPrepareRouteContext(this.#server, routeContext);
152
+ }
153
+ }
154
+ }
155
+
156
+ /** 在接收到HTTP请求,执行 actions 前调用。 */
157
+ async beforeRunRouteActions(handlerContext: ActionHandlerContext) {
158
+ for (const plugin of this.#plugins) {
159
+ if (plugin.beforeRunRouteActions) {
160
+ await plugin.beforeRunRouteActions(this.#server, handlerContext);
161
+ }
162
+ }
163
+ }
164
+
165
+ /** 在执行 action hanlder 前调用。 */
166
+ async beforeRunActionHandler(handlerContext: ActionHandlerContext, actionConfig: RpdRouteActionConfig) {
167
+ for (const plugin of this.#plugins) {
168
+ if (plugin.beforeRunActionHandler) {
169
+ await plugin.beforeRunActionHandler(this.#server, handlerContext, actionConfig);
170
+ }
171
+ }
172
+ }
173
+
174
+ /** 在创建实体前调用。 */
175
+ async beforeCreateEntity(model: RpdDataModel, options: CreateEntityOptions) {
176
+ for (const plugin of this.#plugins) {
177
+ if (plugin.beforeCreateEntity) {
178
+ await plugin.beforeCreateEntity(this.#server, model, options);
179
+ }
180
+ }
181
+ }
182
+
183
+ /** 在更新实体前调用。 */
184
+ async beforeUpdateEntity(model: RpdDataModel, options: UpdateEntityByIdOptions, currentEntity: any) {
185
+ for (const plugin of this.#plugins) {
186
+ if (plugin.beforeUpdateEntity) {
187
+ await plugin.beforeUpdateEntity(this.#server, model, options, currentEntity);
188
+ }
189
+ }
190
+ }
191
+ }
192
+
193
+ export default PluginManager;
@@ -1,5 +1,5 @@
1
- export interface IRuntimeProvider {
2
- copyFile(fromPath: string, toPath: string): Promise<void>;
3
-
4
- removeFile(path: string): Promise<void>;
5
- }
1
+ export interface IRuntimeProvider {
2
+ copyFile(fromPath: string, toPath: string): Promise<void>;
3
+
4
+ removeFile(path: string): Promise<void>;
5
+ }
@@ -1,96 +1,96 @@
1
- import qs from "qs";
2
- import { parseFormDataBody } from "./http/formDataParser";
3
- import { getCookies } from "~/deno-std/http/cookie";
4
- import { IRpdServer } from "./server";
5
- import { Logger } from "~/facilities/log/LogFacility";
6
-
7
- export const GlobalRequest = global.Request;
8
-
9
- export interface RapidRequestBody {
10
- type: "form-data" | "json" | "form";
11
- value: any;
12
- }
13
-
14
- export class RapidRequest {
15
- #logger: Logger;
16
- #raw: Request;
17
- #bodyParsed: boolean;
18
- #body: RapidRequestBody;
19
- #headers: Headers;
20
- #parsedCookies: Record<string, string>;
21
- method: string;
22
- url: URL;
23
- ip?: string;
24
-
25
- constructor(server: IRpdServer, req: Request) {
26
- this.#logger = server.getLogger();
27
- this.#raw = req;
28
- this.method = req.method;
29
- this.url = new URL(req.url);
30
- this.#headers = req.headers;
31
- }
32
-
33
- async parseBody(): Promise<void> {
34
- if (this.#bodyParsed) {
35
- this.#logger.warn("Request body has been parsed. 'parseBody()' method should not be called more than once.");
36
- return;
37
- }
38
-
39
- const requestMethod = this.method;
40
- if (requestMethod !== "POST" && requestMethod !== "PUT" && requestMethod !== "PATCH") {
41
- this.#body = null;
42
- this.#bodyParsed = true;
43
- return;
44
- }
45
-
46
- const contentLength = parseInt(this.#headers.get("Content-Length") || "0", 10);
47
- if (!contentLength) {
48
- this.#body = null;
49
- this.#bodyParsed = true;
50
- return;
51
- }
52
-
53
- const req = this.#raw;
54
- const contentType = this.#headers.get("Content-Type") || "application/json";
55
- if (contentType.includes("json")) {
56
- this.#body = {
57
- type: "json",
58
- value: await req.json(),
59
- };
60
- } else if (contentType.startsWith("application/x-www-form-urlencoded")) {
61
- const bodyText = await req.text();
62
- this.#body = {
63
- type: "form",
64
- value: qs.parse(bodyText),
65
- };
66
- } else if (contentType.startsWith("multipart/form-data")) {
67
- this.#body = {
68
- type: "form-data",
69
- value: await parseFormDataBody(req),
70
- };
71
- }
72
- this.#bodyParsed = true;
73
- }
74
-
75
- get rawRequest(): Request {
76
- return this.#raw;
77
- }
78
-
79
- get headers(): Headers {
80
- return this.#headers;
81
- }
82
-
83
- get cookies(): Record<string, string> {
84
- if (!this.#parsedCookies) {
85
- this.#parsedCookies = getCookies(this.#headers);
86
- }
87
- return this.#parsedCookies;
88
- }
89
-
90
- get body(): RapidRequestBody {
91
- if (!this.#bodyParsed) {
92
- throw new Error("Request body not parsed, you should call 'parseBody()' method before getting the body.");
93
- }
94
- return this.#body;
95
- }
96
- }
1
+ import qs from "qs";
2
+ import { parseFormDataBody } from "./http/formDataParser";
3
+ import { getCookies } from "~/deno-std/http/cookie";
4
+ import { IRpdServer } from "./server";
5
+ import { Logger } from "~/facilities/log/LogFacility";
6
+
7
+ export const GlobalRequest = global.Request;
8
+
9
+ export interface RapidRequestBody {
10
+ type: "form-data" | "json" | "form";
11
+ value: any;
12
+ }
13
+
14
+ export class RapidRequest {
15
+ #logger: Logger;
16
+ #raw: Request;
17
+ #bodyParsed: boolean;
18
+ #body: RapidRequestBody;
19
+ #headers: Headers;
20
+ #parsedCookies: Record<string, string>;
21
+ method: string;
22
+ url: URL;
23
+ ip?: string;
24
+
25
+ constructor(server: IRpdServer, req: Request) {
26
+ this.#logger = server.getLogger();
27
+ this.#raw = req;
28
+ this.method = req.method;
29
+ this.url = new URL(req.url);
30
+ this.#headers = req.headers;
31
+ }
32
+
33
+ async parseBody(): Promise<void> {
34
+ if (this.#bodyParsed) {
35
+ this.#logger.warn("Request body has been parsed. 'parseBody()' method should not be called more than once.");
36
+ return;
37
+ }
38
+
39
+ const requestMethod = this.method;
40
+ if (requestMethod !== "POST" && requestMethod !== "PUT" && requestMethod !== "PATCH") {
41
+ this.#body = null;
42
+ this.#bodyParsed = true;
43
+ return;
44
+ }
45
+
46
+ const contentLength = parseInt(this.#headers.get("Content-Length") || "0", 10);
47
+ if (!contentLength) {
48
+ this.#body = null;
49
+ this.#bodyParsed = true;
50
+ return;
51
+ }
52
+
53
+ const req = this.#raw;
54
+ const contentType = this.#headers.get("Content-Type") || "application/json";
55
+ if (contentType.includes("json")) {
56
+ this.#body = {
57
+ type: "json",
58
+ value: await req.json(),
59
+ };
60
+ } else if (contentType.startsWith("application/x-www-form-urlencoded")) {
61
+ const bodyText = await req.text();
62
+ this.#body = {
63
+ type: "form",
64
+ value: qs.parse(bodyText),
65
+ };
66
+ } else if (contentType.startsWith("multipart/form-data")) {
67
+ this.#body = {
68
+ type: "form-data",
69
+ value: await parseFormDataBody(req),
70
+ };
71
+ }
72
+ this.#bodyParsed = true;
73
+ }
74
+
75
+ get rawRequest(): Request {
76
+ return this.#raw;
77
+ }
78
+
79
+ get headers(): Headers {
80
+ return this.#headers;
81
+ }
82
+
83
+ get cookies(): Record<string, string> {
84
+ if (!this.#parsedCookies) {
85
+ this.#parsedCookies = getCookies(this.#headers);
86
+ }
87
+ return this.#parsedCookies;
88
+ }
89
+
90
+ get body(): RapidRequestBody {
91
+ if (!this.#bodyParsed) {
92
+ throw new Error("Request body not parsed, you should call 'parseBody()' method before getting the body.");
93
+ }
94
+ return this.#body;
95
+ }
96
+ }