@ruiapp/rapid-core 0.11.5 → 0.11.7

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 (204) hide show
  1. package/CHANGELOG.md +11 -11
  2. package/dist/core/pluginManager.d.ts +2 -0
  3. package/dist/core/server.d.ts +3 -0
  4. package/dist/dataAccess/entityManager.d.ts +3 -3
  5. package/dist/index.js +118 -41
  6. package/dist/server.d.ts +1 -0
  7. package/dist/types.d.ts +2 -0
  8. package/package.json +1 -1
  9. package/rollup.config.js +16 -16
  10. package/src/bootstrapApplicationConfig.ts +904 -904
  11. package/src/core/ExpressionInterpreter.ts +45 -45
  12. package/src/core/actionHandler.ts +24 -24
  13. package/src/core/actionHandlers/ifActionHandler.ts +27 -27
  14. package/src/core/eventManager.ts +20 -20
  15. package/src/core/facility.ts +7 -7
  16. package/src/core/http/formDataParser.ts +87 -87
  17. package/src/core/http-types.ts +4 -4
  18. package/src/core/pluginManager.ts +202 -193
  19. package/src/core/providers/runtimeProvider.ts +5 -5
  20. package/src/core/request.ts +96 -96
  21. package/src/core/response.ts +84 -84
  22. package/src/core/routeContext.ts +127 -127
  23. package/src/core/routes/healthz.ts +20 -20
  24. package/src/core/routes/index.ts +3 -3
  25. package/src/core/routesBuilder.ts +129 -122
  26. package/src/core/server.ts +161 -158
  27. package/src/dataAccess/columnTypeMapper.ts +22 -22
  28. package/src/dataAccess/dataAccessTypes.ts +165 -165
  29. package/src/dataAccess/dataAccessor.ts +135 -135
  30. package/src/dataAccess/entityManager.ts +2031 -1986
  31. package/src/dataAccess/entityMapper.ts +111 -111
  32. package/src/dataAccess/entityValidator.ts +33 -33
  33. package/src/dataAccess/propertyMapper.ts +28 -28
  34. package/src/deno-std/assert/assert.ts +9 -9
  35. package/src/deno-std/assert/assertion_error.ts +7 -7
  36. package/src/deno-std/datetime/to_imf.ts +32 -32
  37. package/src/deno-std/encoding/base64.ts +141 -141
  38. package/src/deno-std/http/cookie.ts +372 -372
  39. package/src/facilities/cache/CacheFacilityTypes.ts +29 -29
  40. package/src/facilities/cache/CacheFactory.ts +31 -31
  41. package/src/facilities/cache/MemoryCache.ts +58 -58
  42. package/src/facilities/cache/MemoryCacheProvider.ts +15 -15
  43. package/src/facilities/log/LogFacility.ts +35 -35
  44. package/src/helpers/dbTransactionHelper.ts +42 -42
  45. package/src/helpers/entityHelper.ts +89 -89
  46. package/src/helpers/filterHelper.ts +148 -148
  47. package/src/helpers/inputHelper.ts +11 -11
  48. package/src/helpers/licenseHelper.ts +29 -29
  49. package/src/helpers/metaHelper.ts +111 -111
  50. package/src/helpers/runCollectionEntityActionHandler.ts +58 -58
  51. package/src/index.ts +85 -85
  52. package/src/plugins/auth/AuthPlugin.ts +107 -107
  53. package/src/plugins/auth/AuthPluginTypes.ts +11 -11
  54. package/src/plugins/auth/actionHandlers/changePassword.ts +61 -61
  55. package/src/plugins/auth/actionHandlers/createSession.ts +68 -68
  56. package/src/plugins/auth/actionHandlers/deleteSession.ts +18 -18
  57. package/src/plugins/auth/actionHandlers/getMyProfile.ts +28 -28
  58. package/src/plugins/auth/actionHandlers/index.ts +8 -8
  59. package/src/plugins/auth/actionHandlers/resetPassword.ts +45 -45
  60. package/src/plugins/auth/models/AccessToken.ts +56 -56
  61. package/src/plugins/auth/models/index.ts +3 -3
  62. package/src/plugins/auth/routes/changePassword.ts +15 -15
  63. package/src/plugins/auth/routes/getMyProfile.ts +15 -15
  64. package/src/plugins/auth/routes/index.ts +7 -7
  65. package/src/plugins/auth/routes/resetPassword.ts +15 -15
  66. package/src/plugins/auth/routes/signin.ts +15 -15
  67. package/src/plugins/auth/routes/signout.ts +15 -15
  68. package/src/plugins/auth/services/AuthService.ts +66 -66
  69. package/src/plugins/cronJob/CronJobPlugin.ts +104 -104
  70. package/src/plugins/cronJob/CronJobPluginTypes.ts +44 -44
  71. package/src/plugins/cronJob/actionHandlers/index.ts +4 -4
  72. package/src/plugins/cronJob/actionHandlers/runCronJob.ts +32 -32
  73. package/src/plugins/cronJob/entityWatchers/cronJobEntityWatchers.ts +24 -24
  74. package/src/plugins/cronJob/entityWatchers/index.ts +4 -4
  75. package/src/plugins/cronJob/models/CronJob.ts +129 -129
  76. package/src/plugins/cronJob/models/index.ts +3 -3
  77. package/src/plugins/cronJob/routes/index.ts +3 -3
  78. package/src/plugins/cronJob/routes/runCronJob.ts +15 -15
  79. package/src/plugins/cronJob/services/CronJobService.ts +255 -255
  80. package/src/plugins/dataManage/DataManagePlugin.ts +165 -165
  81. package/src/plugins/dataManage/actionHandlers/addEntityRelations.ts +15 -15
  82. package/src/plugins/dataManage/actionHandlers/countCollectionEntities.ts +17 -17
  83. package/src/plugins/dataManage/actionHandlers/createCollectionEntitiesBatch.ts +81 -81
  84. package/src/plugins/dataManage/actionHandlers/createCollectionEntity.ts +20 -20
  85. package/src/plugins/dataManage/actionHandlers/deleteCollectionEntities.ts +47 -45
  86. package/src/plugins/dataManage/actionHandlers/deleteCollectionEntityById.ts +20 -20
  87. package/src/plugins/dataManage/actionHandlers/findCollectionEntities.ts +27 -27
  88. package/src/plugins/dataManage/actionHandlers/findCollectionEntityById.ts +30 -30
  89. package/src/plugins/dataManage/actionHandlers/queryDatabase.ts +22 -22
  90. package/src/plugins/dataManage/actionHandlers/removeEntityRelations.ts +15 -15
  91. package/src/plugins/dataManage/actionHandlers/saveEntity.ts +46 -46
  92. package/src/plugins/dataManage/actionHandlers/updateCollectionEntityById.ts +38 -38
  93. package/src/plugins/entityAccessControl/EntityAccessControlPlugin.ts +146 -146
  94. package/src/plugins/fileManage/FileManagePlugin.ts +52 -52
  95. package/src/plugins/fileManage/actionHandlers/downloadDocument.ts +65 -65
  96. package/src/plugins/fileManage/actionHandlers/downloadFile.ts +44 -44
  97. package/src/plugins/fileManage/actionHandlers/uploadFile.ts +33 -33
  98. package/src/plugins/fileManage/routes/downloadDocument.ts +15 -15
  99. package/src/plugins/fileManage/routes/downloadFile.ts +15 -15
  100. package/src/plugins/fileManage/routes/index.ts +5 -5
  101. package/src/plugins/fileManage/routes/uploadFile.ts +15 -15
  102. package/src/plugins/license/LicensePlugin.ts +79 -79
  103. package/src/plugins/license/LicensePluginTypes.ts +95 -95
  104. package/src/plugins/license/LicenseService.ts +141 -141
  105. package/src/plugins/license/actionHandlers/getLicense.ts +18 -18
  106. package/src/plugins/license/actionHandlers/index.ts +5 -5
  107. package/src/plugins/license/actionHandlers/updateLicense.ts +24 -24
  108. package/src/plugins/license/helpers/certHelper.ts +21 -21
  109. package/src/plugins/license/helpers/cryptoHelper.ts +47 -47
  110. package/src/plugins/license/models/index.ts +1 -1
  111. package/src/plugins/license/routes/getLicense.ts +15 -15
  112. package/src/plugins/license/routes/index.ts +4 -4
  113. package/src/plugins/license/routes/updateLicense.ts +15 -15
  114. package/src/plugins/mail/MailPlugin.ts +74 -74
  115. package/src/plugins/mail/MailPluginTypes.ts +27 -27
  116. package/src/plugins/mail/MailService.ts +38 -38
  117. package/src/plugins/mail/actionHandlers/index.ts +3 -3
  118. package/src/plugins/mail/models/index.ts +1 -1
  119. package/src/plugins/mail/routes/index.ts +1 -1
  120. package/src/plugins/metaManage/MetaManagePlugin.ts +198 -198
  121. package/src/plugins/metaManage/actionHandlers/getMetaModelDetail.ts +10 -10
  122. package/src/plugins/metaManage/actionHandlers/listMetaModels.ts +10 -10
  123. package/src/plugins/metaManage/actionHandlers/listMetaRoutes.ts +10 -10
  124. package/src/plugins/metaManage/services/MetaService.ts +376 -376
  125. package/src/plugins/notification/NotificationPlugin.ts +68 -68
  126. package/src/plugins/notification/NotificationPluginTypes.ts +13 -13
  127. package/src/plugins/notification/NotificationService.ts +25 -25
  128. package/src/plugins/notification/actionHandlers/index.ts +3 -3
  129. package/src/plugins/notification/models/Notification.ts +60 -60
  130. package/src/plugins/notification/models/index.ts +3 -3
  131. package/src/plugins/notification/routes/index.ts +1 -1
  132. package/src/plugins/routeManage/RouteManagePlugin.ts +64 -64
  133. package/src/plugins/routeManage/actionHandlers/httpProxy.ts +13 -13
  134. package/src/plugins/routeManage/actionHandlers/mock.ts +28 -28
  135. package/src/plugins/sequence/SequencePlugin.ts +146 -146
  136. package/src/plugins/sequence/SequencePluginTypes.ts +69 -69
  137. package/src/plugins/sequence/SequenceService.ts +92 -92
  138. package/src/plugins/sequence/actionHandlers/generateSn.ts +32 -32
  139. package/src/plugins/sequence/actionHandlers/index.ts +4 -4
  140. package/src/plugins/sequence/models/SequenceAutoIncrementRecord.ts +49 -49
  141. package/src/plugins/sequence/models/SequenceRule.ts +42 -42
  142. package/src/plugins/sequence/models/index.ts +4 -4
  143. package/src/plugins/sequence/routes/generateSn.ts +15 -15
  144. package/src/plugins/sequence/routes/index.ts +3 -3
  145. package/src/plugins/sequence/segment-utility.ts +11 -11
  146. package/src/plugins/sequence/segments/autoIncrement.ts +90 -90
  147. package/src/plugins/sequence/segments/dayOfMonth.ts +19 -19
  148. package/src/plugins/sequence/segments/index.ts +9 -9
  149. package/src/plugins/sequence/segments/literal.ts +16 -16
  150. package/src/plugins/sequence/segments/month.ts +19 -19
  151. package/src/plugins/sequence/segments/parameter.ts +20 -20
  152. package/src/plugins/sequence/segments/year.ts +19 -19
  153. package/src/plugins/serverOperation/ServerOperationPlugin.ts +93 -93
  154. package/src/plugins/serverOperation/ServerOperationPluginTypes.ts +25 -25
  155. package/src/plugins/serverOperation/actionHandlers/index.ts +4 -4
  156. package/src/plugins/serverOperation/actionHandlers/runServerOperation.ts +20 -20
  157. package/src/plugins/setting/SettingPlugin.ts +68 -68
  158. package/src/plugins/setting/SettingPluginTypes.ts +37 -37
  159. package/src/plugins/setting/SettingService.ts +222 -222
  160. package/src/plugins/setting/actionHandlers/getSystemSettingValues.ts +30 -30
  161. package/src/plugins/setting/actionHandlers/getUserSettingValues.ts +38 -38
  162. package/src/plugins/setting/actionHandlers/index.ts +6 -6
  163. package/src/plugins/setting/actionHandlers/setSystemSettingValues.ts +30 -30
  164. package/src/plugins/setting/models/SystemSettingGroupSetting.ts +57 -57
  165. package/src/plugins/setting/models/SystemSettingItem.ts +48 -48
  166. package/src/plugins/setting/models/SystemSettingItemSetting.ts +73 -73
  167. package/src/plugins/setting/models/UserSettingGroupSetting.ts +57 -57
  168. package/src/plugins/setting/models/UserSettingItem.ts +55 -55
  169. package/src/plugins/setting/models/UserSettingItemSetting.ts +73 -73
  170. package/src/plugins/setting/models/index.ts +8 -8
  171. package/src/plugins/setting/routes/getSystemSettingValues.ts +15 -15
  172. package/src/plugins/setting/routes/getUserSettingValues.ts +15 -15
  173. package/src/plugins/setting/routes/index.ts +5 -5
  174. package/src/plugins/setting/routes/setSystemSettingValues.ts +15 -15
  175. package/src/plugins/stateMachine/StateMachinePlugin.ts +196 -196
  176. package/src/plugins/stateMachine/StateMachinePluginTypes.ts +48 -48
  177. package/src/plugins/stateMachine/actionHandlers/index.ts +4 -4
  178. package/src/plugins/stateMachine/actionHandlers/sendStateMachineEvent.ts +54 -54
  179. package/src/plugins/stateMachine/models/StateMachine.ts +42 -42
  180. package/src/plugins/stateMachine/models/index.ts +3 -3
  181. package/src/plugins/stateMachine/routes/index.ts +3 -3
  182. package/src/plugins/stateMachine/routes/sendStateMachineEvent.ts +15 -15
  183. package/src/plugins/stateMachine/stateMachineHelper.ts +36 -36
  184. package/src/plugins/webhooks/WebhooksPlugin.ts +148 -148
  185. package/src/plugins/webhooks/pluginConfig.ts +75 -75
  186. package/src/polyfill.ts +5 -5
  187. package/src/proxy/mod.ts +38 -38
  188. package/src/proxy/types.ts +21 -21
  189. package/src/queryBuilder/index.ts +1 -1
  190. package/src/queryBuilder/queryBuilder.ts +755 -755
  191. package/src/server.ts +567 -556
  192. package/src/types/cron-job-types.ts +71 -71
  193. package/src/types.ts +884 -882
  194. package/src/utilities/accessControlUtility.ts +33 -33
  195. package/src/utilities/entityUtility.ts +18 -18
  196. package/src/utilities/errorUtility.ts +15 -15
  197. package/src/utilities/fsUtility.ts +137 -137
  198. package/src/utilities/httpUtility.ts +19 -19
  199. package/src/utilities/jwtUtility.ts +26 -26
  200. package/src/utilities/passwordUtility.ts +26 -26
  201. package/src/utilities/pathUtility.ts +14 -14
  202. package/src/utilities/timeUtility.ts +17 -17
  203. package/src/utilities/typeUtility.ts +15 -15
  204. package/tsconfig.json +19 -19
@@ -1,122 +1,129 @@
1
- import Router from "koa-tree-router";
2
- import qs from "qs";
3
- import { ActionHandlerContext } from "~/core/actionHandler";
4
- import { IRpdServer } from "~/core/server";
5
- import { RpdApplicationConfig, RpdRoute } from "~/types";
6
- import { isNullOrUndefined } from "~/utilities/typeUtility";
7
- import { Next, RouteContext } from "./routeContext";
8
- import { cloneDeep, isFunction, isString } from "lodash";
9
- import { executeInRouteContext } from "~/helpers/dbTransactionHelper";
10
-
11
- async function executeHandlerOfActions(server: IRpdServer, routeConfig: RpdRoute, handlerContext: ActionHandlerContext) {
12
- let handler = routeConfig.handler as any;
13
- if (handler) {
14
- if (isString(handler)) {
15
- handler = new Function(`return (${routeConfig.handler})`) as any;
16
- }
17
-
18
- if (isFunction(handler)) {
19
- const result = handler(handlerContext);
20
- if (result instanceof Promise) {
21
- await result;
22
- }
23
- } else {
24
- throw new Error(`Invalid handler for route ${routeConfig.code}: ${routeConfig.handler}`);
25
- }
26
- } else if (routeConfig.actions) {
27
- for (const actionConfig of routeConfig.actions) {
28
- const actionCode = actionConfig.code;
29
- const handler = server.getActionHandlerByCode(actionCode);
30
- if (!handler) {
31
- throw new Error("Unknown handler: " + actionCode);
32
- }
33
-
34
- await server.beforeRunActionHandler(handlerContext, actionConfig);
35
-
36
- const result = handler(handlerContext, actionConfig.config);
37
- if (result instanceof Promise) {
38
- await result;
39
- }
40
- }
41
- }
42
- }
43
-
44
- async function handleRouteRequest(routeContext: RouteContext, next: Next, server: IRpdServer, routeConfig: RpdRoute) {
45
- if (!routeConfig.handler && !routeConfig.actions) {
46
- throw new Error(`No handler or actions defined for route ${routeConfig.code}`);
47
- }
48
-
49
- const logger = server.getLogger();
50
- routeConfig = cloneDeep(routeConfig);
51
- routeContext.routeConfig = routeConfig;
52
- const { request, params } = routeContext;
53
-
54
- let search = request.url.search;
55
- if (search && search.startsWith("?")) {
56
- search = search.substring(1);
57
- }
58
- const query = qs.parse(search);
59
- const input = Object.assign({}, params, query);
60
-
61
- const requestMethod = request.method;
62
- if (requestMethod === "POST" || requestMethod === "PUT" || requestMethod === "PATCH") {
63
- const body = request.body;
64
- if (body) {
65
- Object.assign(input, body.value);
66
- }
67
- }
68
-
69
- // Normalize input value
70
-
71
- logger.debug("Processing rapid request.", {
72
- method: requestMethod,
73
- url: request.url.toString(),
74
- input,
75
- });
76
-
77
- routeContext.response.status = 200;
78
-
79
- let handlerContext: ActionHandlerContext = {
80
- logger,
81
- routerContext: routeContext,
82
- next,
83
- server,
84
- input,
85
- results: [],
86
- };
87
-
88
- await server.beforeRunRouteActions(handlerContext);
89
-
90
- await executeInRouteContext(routeContext, routeConfig.executeInDbTransaction, async () => {
91
- await executeHandlerOfActions(server, routeConfig, handlerContext);
92
- });
93
-
94
- if (!isNullOrUndefined(handlerContext.output)) {
95
- routeContext.json(handlerContext.output, handlerContext.status);
96
- }
97
- }
98
-
99
- export async function buildRoutes(server: IRpdServer, applicationConfig: RpdApplicationConfig) {
100
- const router = new Router();
101
-
102
- let baseUrl = server.config.baseUrl;
103
- if (baseUrl) {
104
- if (baseUrl.endsWith("/")) {
105
- baseUrl = baseUrl.substring(0, baseUrl.length - 1);
106
- }
107
- } else {
108
- baseUrl = "";
109
- }
110
-
111
- applicationConfig.routes.forEach((routeConfig) => {
112
- if (routeConfig.type !== "RESTful") {
113
- return;
114
- }
115
-
116
- const routePath = baseUrl + routeConfig.endpoint;
117
-
118
- (router as any)[routeConfig.method.toLowerCase()](routePath, (routeContext, next) => handleRouteRequest(routeContext, next, server, routeConfig));
119
- });
120
-
121
- return router.routes();
122
- }
1
+ import Router from "koa-tree-router";
2
+ import qs from "qs";
3
+ import { ActionHandlerContext } from "~/core/actionHandler";
4
+ import { IRpdServer } from "~/core/server";
5
+ import { RpdApplicationConfig, RpdRoute } from "~/types";
6
+ import { isNullOrUndefined } from "~/utilities/typeUtility";
7
+ import { Next, RouteContext } from "./routeContext";
8
+ import { cloneDeep, isFunction, isString } from "lodash";
9
+ import { executeInRouteContext } from "~/helpers/dbTransactionHelper";
10
+
11
+ async function executeHandlerOfActions(server: IRpdServer, routeConfig: RpdRoute, handlerContext: ActionHandlerContext) {
12
+ let handler = routeConfig.handler as any;
13
+ if (handler) {
14
+ if (isString(handler)) {
15
+ handler = new Function(`return (${routeConfig.handler})`) as any;
16
+ }
17
+
18
+ if (isFunction(handler)) {
19
+ const result = handler(handlerContext);
20
+ if (result instanceof Promise) {
21
+ await result;
22
+ }
23
+ } else {
24
+ throw new Error(`Invalid handler for route ${routeConfig.code}: ${routeConfig.handler}`);
25
+ }
26
+ } else if (routeConfig.actions) {
27
+ for (const actionConfig of routeConfig.actions) {
28
+ const actionCode = actionConfig.code;
29
+ const handler = server.getActionHandlerByCode(actionCode);
30
+ if (!handler) {
31
+ throw new Error("Unknown handler: " + actionCode);
32
+ }
33
+
34
+ await server.beforeRunActionHandler(handlerContext, actionConfig);
35
+ let err: any;
36
+ try {
37
+ const result = handler(handlerContext, actionConfig.config);
38
+ if (result instanceof Promise) {
39
+ await result;
40
+ }
41
+ } catch (error) {
42
+ err = error;
43
+ throw error;
44
+ } finally {
45
+ await server.afterRunActionHandler(handlerContext, actionConfig, err);
46
+ }
47
+ }
48
+ }
49
+ }
50
+
51
+ async function handleRouteRequest(routeContext: RouteContext, next: Next, server: IRpdServer, routeConfig: RpdRoute) {
52
+ if (!routeConfig.handler && !routeConfig.actions) {
53
+ throw new Error(`No handler or actions defined for route ${routeConfig.code}`);
54
+ }
55
+
56
+ const logger = server.getLogger();
57
+ routeConfig = cloneDeep(routeConfig);
58
+ routeContext.routeConfig = routeConfig;
59
+ const { request, params } = routeContext;
60
+
61
+ let search = request.url.search;
62
+ if (search && search.startsWith("?")) {
63
+ search = search.substring(1);
64
+ }
65
+ const query = qs.parse(search);
66
+ const input = Object.assign({}, params, query);
67
+
68
+ const requestMethod = request.method;
69
+ if (requestMethod === "POST" || requestMethod === "PUT" || requestMethod === "PATCH") {
70
+ const body = request.body;
71
+ if (body) {
72
+ Object.assign(input, body.value);
73
+ }
74
+ }
75
+
76
+ // Normalize input value
77
+
78
+ logger.debug("Processing rapid request.", {
79
+ method: requestMethod,
80
+ url: request.url.toString(),
81
+ input,
82
+ });
83
+
84
+ routeContext.response.status = 200;
85
+
86
+ let handlerContext: ActionHandlerContext = {
87
+ logger,
88
+ routerContext: routeContext,
89
+ next,
90
+ server,
91
+ input,
92
+ results: [],
93
+ };
94
+
95
+ await server.beforeRunRouteActions(handlerContext);
96
+
97
+ await executeInRouteContext(routeContext, routeConfig.executeInDbTransaction, async () => {
98
+ await executeHandlerOfActions(server, routeConfig, handlerContext);
99
+ });
100
+
101
+ if (!isNullOrUndefined(handlerContext.output)) {
102
+ routeContext.json(handlerContext.output, handlerContext.status);
103
+ }
104
+ }
105
+
106
+ export async function buildRoutes(server: IRpdServer, applicationConfig: RpdApplicationConfig) {
107
+ const router = new Router();
108
+
109
+ let baseUrl = server.config.baseUrl;
110
+ if (baseUrl) {
111
+ if (baseUrl.endsWith("/")) {
112
+ baseUrl = baseUrl.substring(0, baseUrl.length - 1);
113
+ }
114
+ } else {
115
+ baseUrl = "";
116
+ }
117
+
118
+ applicationConfig.routes.forEach((routeConfig) => {
119
+ if (routeConfig.type !== "RESTful") {
120
+ return;
121
+ }
122
+
123
+ const routePath = baseUrl + routeConfig.endpoint;
124
+
125
+ (router as any)[routeConfig.method.toLowerCase()](routePath, (routeContext, next) => handleRouteRequest(routeContext, next, server, routeConfig));
126
+ });
127
+
128
+ return router.routes();
129
+ }
@@ -1,158 +1,161 @@
1
- import {
2
- CreateEntityOptions,
3
- EmitServerEventOptions,
4
- EntityWatcherType,
5
- GetDataAccessorOptions,
6
- GetModelOptions,
7
- IDatabaseAccessor,
8
- IDatabaseClient,
9
- IDatabaseConfig,
10
- IQueryBuilder,
11
- IRpdDataAccessor,
12
- RapidServerConfig,
13
- RpdApplicationConfig,
14
- RpdDataModel,
15
- RpdDataModelProperty,
16
- RpdRouteActionConfig,
17
- RpdServerEventTypes,
18
- RunActionHandlersOptions,
19
- UpdateEntityByIdOptions,
20
- } from "~/types";
21
- import { IPluginActionHandler, ActionHandler, ActionHandlerContext } from "./actionHandler";
22
- import { Next, RouteContext } from "./routeContext";
23
- import EntityManager from "~/dataAccess/entityManager";
24
- import { Logger } from "~/facilities/log/LogFacility";
25
- import { FacilityFactory } from "./facility";
26
- import { CronJobConfiguration } from "~/types/cron-job-types";
27
- import { RapidRequest } from "./request";
28
-
29
- export interface IRpdServer {
30
- config: RapidServerConfig;
31
- databaseConfig: IDatabaseConfig;
32
- queryBuilder: IQueryBuilder;
33
- getLogger(): Logger;
34
-
35
- registerFacilityFactory(factory: FacilityFactory);
36
-
37
- getFacility<TFacility = any, TOptions = any>(name: string, options?: TOptions): Promise<TFacility>;
38
-
39
- getDatabaseAccessor(): IDatabaseAccessor;
40
- queryDatabaseObject: (sql: string, params?: unknown[] | Record<string, unknown>, client?: IDatabaseClient, dropErrorLog?: boolean) => Promise<any[]>;
41
- tryQueryDatabaseObject: (sql: string, params?: unknown[] | Record<string, unknown>, client?: IDatabaseClient, dropErrorLog?: boolean) => Promise<any[]>;
42
- registerMiddleware(middleware: any): void;
43
- registerActionHandler(plugin: RapidPlugin, options: IPluginActionHandler): void;
44
- getActionHandlerByCode(code: string): ActionHandler | undefined;
45
- getDataAccessor<T = any>(options: GetDataAccessorOptions): IRpdDataAccessor<T>;
46
- getEntityManager<TEntity = any>(singularCode: string): EntityManager<TEntity>;
47
- registerService(name: string, service: any);
48
- getService<TService>(name: string): TService;
49
- getApplicationConfig(): RpdApplicationConfig;
50
- appendApplicationConfig(config: Partial<RpdApplicationConfig>);
51
- appendModelProperties(modelSingularCode: string, properties: RpdDataModelProperty[]);
52
- getModel(options: GetModelOptions): RpdDataModel | undefined;
53
- registerEventHandler<K extends keyof RpdServerEventTypes>(eventName: K, listener: (...args: RpdServerEventTypes[K]) => void);
54
- registerEntityWatcher(entityWatcher: EntityWatcherType);
55
- emitEvent<TEventName extends keyof RpdServerEventTypes>(event: EmitServerEventOptions<TEventName>): void;
56
- handleRequest(request: RapidRequest, next: Next): Promise<Response>;
57
- runActionHandlers(handlerContext: ActionHandlerContext, actions: RpdRouteActionConfig[]): Promise<void>;
58
- beforeRunRouteActions(handlerContext: ActionHandlerContext): Promise<void>;
59
- beforeRunActionHandler(handlerContext: ActionHandlerContext, actionConfig: RpdRouteActionConfig): Promise<void>;
60
- beforeCreateEntity(model: RpdDataModel, options: CreateEntityOptions): Promise<void>;
61
- beforeUpdateEntity(model: RpdDataModel, options: UpdateEntityByIdOptions, currentEntity: any): Promise<void>;
62
-
63
- registerCronJob(job: CronJobConfiguration): void;
64
- listCronJobs(): CronJobConfiguration[];
65
- }
66
-
67
- export type RpdConfigurationItemTypes = "integer" | "text" | "boolean" | "date" | "datetime" | "json";
68
-
69
- export interface RpdConfigurationItemOptions {
70
- /**
71
- * 配置项名称。可以包含中文。
72
- */
73
- name: string;
74
- /**
75
- * 配置项代码。
76
- */
77
- code: string;
78
- /**
79
- * 配置项类型。
80
- */
81
- type: RpdConfigurationItemTypes;
82
- /**
83
- * 是否必须有值。默认为 false。
84
- */
85
- required?: boolean;
86
- /**
87
- * 默认值。使用默认值的 JavaScript 字面量表示。
88
- */
89
- defaultValue?: string;
90
- }
91
-
92
- export type RpdServerPluginExtendingAbilities =
93
- | /** 是指提供处理网络请求的middleware的能力。 */ "extendMiddleware"
94
- | /** 是指增加系统中的集合的能力。 */ "extendModel"
95
- | /** 是指可以对模型增加属性的能力。 */ "extendProperty"
96
- | /** 是指增加接口动作的能力。 */ "extendActionHandler"
97
- | /** 是指增加或者修改接口定义的能力。 */ "extendRoute"
98
- | /** 是指对实体数据进行标准化的能力。 */ "normalizeEntity"
99
- | /** 处理事件总线发送过来的事件的能力。 */ "handleEvent"
100
- | /** 处理消息队列发送过来的消息的能力。 */ "handleMessage"
101
- | /** 对特定任务进行处理的能力。 */ "processTask";
102
-
103
- export interface RpdServerPluginConfigurableTargetOptions {
104
- targetCode: string;
105
-
106
- configurations: RpdConfigurationItemOptions[];
107
- }
108
-
109
- export interface RapidPlugin {
110
- /** 插件代码 */
111
- get code(): string;
112
- /** 插件描述 */
113
- get description(): string;
114
- /** 插件可以提供哪些扩展能力 */
115
- get extendingAbilities(): RpdServerPluginExtendingAbilities[];
116
- /** 插件可以配置的目标实体,以及和配置目标相关的配置项 */
117
- get configurableTargets(): RpdServerPluginConfigurableTargetOptions[];
118
- /** 插件的全局配置项 */
119
- get configurations(): RpdConfigurationItemOptions[];
120
- /** 初始化插件时调用。插件可以在此时进行一些内部对象的初始化工作。 */
121
- initPlugin?: (server: IRpdServer) => Promise<any>;
122
- /** 注册中间件 */
123
- registerMiddlewares?: (server: IRpdServer) => Promise<any>;
124
- /** 注册接口动作处理程序 */
125
- registerActionHandlers?: (server: IRpdServer) => Promise<any>;
126
- /** 注册事件处理程序 */
127
- registerEventHandlers?: (server: IRpdServer) => Promise<any>;
128
- /** 注册消息处理程序 */
129
- registerMessageHandlers?: (server: IRpdServer) => Promise<any>;
130
- /** 注册任务处理程序 */
131
- registerTaskProcessors?: (server: IRpdServer) => Promise<any>;
132
- /** 在加载应用前调用。 */
133
- onLoadingApplication?: (server: IRpdServer, applicationConfig: RpdApplicationConfig) => Promise<any>;
134
- /** 配置数据集合 */
135
- configureModels?: (server: IRpdServer, applicationConfig: RpdApplicationConfig) => Promise<any>;
136
- /** 配置模型属性 */
137
- configureModelProperties?: (server: IRpdServer, applicationConfig: RpdApplicationConfig) => Promise<any>;
138
- /** 配置服务 */
139
- configureServices?: (server: IRpdServer, applicationConfig: RpdApplicationConfig) => Promise<any>;
140
- /** 配置路由 */
141
- configureRoutes?: (server: IRpdServer, applicationConfig: RpdApplicationConfig) => Promise<any>;
142
- /** 注册定时任务 */
143
- registerCronJobs?: (server: IRpdServer) => Promise<any>;
144
- /** 在应用配置加载完成后调用。此时插件可以进行一些数据的初始化工作。 */
145
- onApplicationLoaded?: (server: IRpdServer, applicationConfig: RpdApplicationConfig) => Promise<any>;
146
- /** 在应用准备完成后调用。此时服务器已经可以处理网络请求,可以对外广播消息。 */
147
- onApplicationReady?: (server: IRpdServer, applicationConfig: RpdApplicationConfig) => Promise<any>;
148
- /** 在接收到HTTP请求,准备路由上下文时调用。 */
149
- onPrepareRouteContext?: (server: IRpdServer, routeContext: RouteContext) => Promise<any>;
150
- /** 在接收到HTTP请求,执行 actions 前调用。 */
151
- beforeRunRouteActions?: (server: IRpdServer, handlerContext: ActionHandlerContext) => Promise<any>;
152
- /** 在执行 action hanlder 前调用。 */
153
- beforeRunActionHandler?: (server: IRpdServer, handlerContext: ActionHandlerContext, actionConfig: RpdRouteActionConfig) => Promise<any>;
154
- /** 在创建实体前调用。 */
155
- beforeCreateEntity?: (server: IRpdServer, model: RpdDataModel, options: CreateEntityOptions) => Promise<any>;
156
- /** 在更新实体前调用。 */
157
- beforeUpdateEntity?: (server: IRpdServer, model: RpdDataModel, options: UpdateEntityByIdOptions, currentEntity: any) => Promise<any>;
158
- }
1
+ import {
2
+ CreateEntityOptions,
3
+ EmitServerEventOptions,
4
+ EntityWatcherType,
5
+ GetDataAccessorOptions,
6
+ GetModelOptions,
7
+ IDatabaseAccessor,
8
+ IDatabaseClient,
9
+ IDatabaseConfig,
10
+ IQueryBuilder,
11
+ IRpdDataAccessor,
12
+ RapidServerConfig,
13
+ RpdApplicationConfig,
14
+ RpdDataModel,
15
+ RpdDataModelProperty,
16
+ RpdRouteActionConfig,
17
+ RpdServerEventTypes,
18
+ RunActionHandlersOptions,
19
+ UpdateEntityByIdOptions,
20
+ } from "~/types";
21
+ import { IPluginActionHandler, ActionHandler, ActionHandlerContext } from "./actionHandler";
22
+ import { Next, RouteContext } from "./routeContext";
23
+ import EntityManager from "~/dataAccess/entityManager";
24
+ import { Logger } from "~/facilities/log/LogFacility";
25
+ import { FacilityFactory } from "./facility";
26
+ import { CronJobConfiguration } from "~/types/cron-job-types";
27
+ import { RapidRequest } from "./request";
28
+
29
+ export interface IRpdServer {
30
+ config: RapidServerConfig;
31
+ databaseConfig: IDatabaseConfig;
32
+ queryBuilder: IQueryBuilder;
33
+ getLogger(): Logger;
34
+
35
+ registerFacilityFactory(factory: FacilityFactory);
36
+
37
+ getFacility<TFacility = any, TOptions = any>(name: string, options?: TOptions): Promise<TFacility>;
38
+
39
+ getDatabaseAccessor(): IDatabaseAccessor;
40
+ queryDatabaseObject: (sql: string, params?: unknown[] | Record<string, unknown>, client?: IDatabaseClient, dropErrorLog?: boolean) => Promise<any[]>;
41
+ tryQueryDatabaseObject: (sql: string, params?: unknown[] | Record<string, unknown>, client?: IDatabaseClient, dropErrorLog?: boolean) => Promise<any[]>;
42
+ registerMiddleware(middleware: any): void;
43
+ registerActionHandler(plugin: RapidPlugin, options: IPluginActionHandler): void;
44
+ getActionHandlerByCode(code: string): ActionHandler | undefined;
45
+ getDataAccessor<T = any>(options: GetDataAccessorOptions): IRpdDataAccessor<T>;
46
+ getEntityManager<TEntity = any>(singularCode: string): EntityManager<TEntity>;
47
+ registerService(name: string, service: any);
48
+ getService<TService>(name: string): TService;
49
+ getApplicationConfig(): RpdApplicationConfig;
50
+ appendApplicationConfig(config: Partial<RpdApplicationConfig>);
51
+ appendModelProperties(modelSingularCode: string, properties: RpdDataModelProperty[]);
52
+ getModel(options: GetModelOptions): RpdDataModel | undefined;
53
+ registerEventHandler<K extends keyof RpdServerEventTypes>(eventName: K, listener: (...args: RpdServerEventTypes[K]) => void);
54
+ registerEntityWatcher(entityWatcher: EntityWatcherType);
55
+ emitEvent<TEventName extends keyof RpdServerEventTypes>(event: EmitServerEventOptions<TEventName>): void;
56
+ handleRequest(request: RapidRequest, next: Next): Promise<Response>;
57
+ runActionHandlers(handlerContext: ActionHandlerContext, actions: RpdRouteActionConfig[]): Promise<void>;
58
+ beforeRunRouteActions(handlerContext: ActionHandlerContext): Promise<void>;
59
+ beforeRunActionHandler(handlerContext: ActionHandlerContext, actionConfig: RpdRouteActionConfig): Promise<void>;
60
+ afterRunActionHandler(handlerContext: ActionHandlerContext, actionConfig: RpdRouteActionConfig, error?: Error): Promise<void>;
61
+ beforeCreateEntity(model: RpdDataModel, options: CreateEntityOptions): Promise<void>;
62
+ beforeUpdateEntity(model: RpdDataModel, options: UpdateEntityByIdOptions, currentEntity: any): Promise<void>;
63
+
64
+ registerCronJob(job: CronJobConfiguration): void;
65
+ listCronJobs(): CronJobConfiguration[];
66
+ }
67
+
68
+ export type RpdConfigurationItemTypes = "integer" | "text" | "boolean" | "date" | "datetime" | "json";
69
+
70
+ export interface RpdConfigurationItemOptions {
71
+ /**
72
+ * 配置项名称。可以包含中文。
73
+ */
74
+ name: string;
75
+ /**
76
+ * 配置项代码。
77
+ */
78
+ code: string;
79
+ /**
80
+ * 配置项类型。
81
+ */
82
+ type: RpdConfigurationItemTypes;
83
+ /**
84
+ * 是否必须有值。默认为 false。
85
+ */
86
+ required?: boolean;
87
+ /**
88
+ * 默认值。使用默认值的 JavaScript 字面量表示。
89
+ */
90
+ defaultValue?: string;
91
+ }
92
+
93
+ export type RpdServerPluginExtendingAbilities =
94
+ | /** 是指提供处理网络请求的middleware的能力。 */ "extendMiddleware"
95
+ | /** 是指增加系统中的集合的能力。 */ "extendModel"
96
+ | /** 是指可以对模型增加属性的能力。 */ "extendProperty"
97
+ | /** 是指增加接口动作的能力。 */ "extendActionHandler"
98
+ | /** 是指增加或者修改接口定义的能力。 */ "extendRoute"
99
+ | /** 是指对实体数据进行标准化的能力。 */ "normalizeEntity"
100
+ | /** 处理事件总线发送过来的事件的能力。 */ "handleEvent"
101
+ | /** 处理消息队列发送过来的消息的能力。 */ "handleMessage"
102
+ | /** 对特定任务进行处理的能力。 */ "processTask";
103
+
104
+ export interface RpdServerPluginConfigurableTargetOptions {
105
+ targetCode: string;
106
+
107
+ configurations: RpdConfigurationItemOptions[];
108
+ }
109
+
110
+ export interface RapidPlugin {
111
+ /** 插件代码 */
112
+ get code(): string;
113
+ /** 插件描述 */
114
+ get description(): string;
115
+ /** 插件可以提供哪些扩展能力 */
116
+ get extendingAbilities(): RpdServerPluginExtendingAbilities[];
117
+ /** 插件可以配置的目标实体,以及和配置目标相关的配置项 */
118
+ get configurableTargets(): RpdServerPluginConfigurableTargetOptions[];
119
+ /** 插件的全局配置项 */
120
+ get configurations(): RpdConfigurationItemOptions[];
121
+ /** 初始化插件时调用。插件可以在此时进行一些内部对象的初始化工作。 */
122
+ initPlugin?: (server: IRpdServer) => Promise<any>;
123
+ /** 注册中间件 */
124
+ registerMiddlewares?: (server: IRpdServer) => Promise<any>;
125
+ /** 注册接口动作处理程序 */
126
+ registerActionHandlers?: (server: IRpdServer) => Promise<any>;
127
+ /** 注册事件处理程序 */
128
+ registerEventHandlers?: (server: IRpdServer) => Promise<any>;
129
+ /** 注册消息处理程序 */
130
+ registerMessageHandlers?: (server: IRpdServer) => Promise<any>;
131
+ /** 注册任务处理程序 */
132
+ registerTaskProcessors?: (server: IRpdServer) => Promise<any>;
133
+ /** 在加载应用前调用。 */
134
+ onLoadingApplication?: (server: IRpdServer, applicationConfig: RpdApplicationConfig) => Promise<any>;
135
+ /** 配置数据集合 */
136
+ configureModels?: (server: IRpdServer, applicationConfig: RpdApplicationConfig) => Promise<any>;
137
+ /** 配置模型属性 */
138
+ configureModelProperties?: (server: IRpdServer, applicationConfig: RpdApplicationConfig) => Promise<any>;
139
+ /** 配置服务 */
140
+ configureServices?: (server: IRpdServer, applicationConfig: RpdApplicationConfig) => Promise<any>;
141
+ /** 配置路由 */
142
+ configureRoutes?: (server: IRpdServer, applicationConfig: RpdApplicationConfig) => Promise<any>;
143
+ /** 注册定时任务 */
144
+ registerCronJobs?: (server: IRpdServer) => Promise<any>;
145
+ /** 在应用配置加载完成后调用。此时插件可以进行一些数据的初始化工作。 */
146
+ onApplicationLoaded?: (server: IRpdServer, applicationConfig: RpdApplicationConfig) => Promise<any>;
147
+ /** 在应用准备完成后调用。此时服务器已经可以处理网络请求,可以对外广播消息。 */
148
+ onApplicationReady?: (server: IRpdServer, applicationConfig: RpdApplicationConfig) => Promise<any>;
149
+ /** 在接收到HTTP请求,准备路由上下文时调用。 */
150
+ onPrepareRouteContext?: (server: IRpdServer, routeContext: RouteContext) => Promise<any>;
151
+ /** 在接收到HTTP请求,执行 actions 前调用。 */
152
+ beforeRunRouteActions?: (server: IRpdServer, handlerContext: ActionHandlerContext) => Promise<any>;
153
+ /** 在执行 action hanlder 前调用。 */
154
+ beforeRunActionHandler?: (server: IRpdServer, handlerContext: ActionHandlerContext, actionConfig: RpdRouteActionConfig) => Promise<any>;
155
+ /** 在执行 action handler 后调用。 */
156
+ afterRunActionHandler?: (server: IRpdServer, handlerContext: ActionHandlerContext, actionConfig: RpdRouteActionConfig, error?: Error) => Promise<any>;
157
+ /** 在创建实体前调用。 */
158
+ beforeCreateEntity?: (server: IRpdServer, model: RpdDataModel, options: CreateEntityOptions) => Promise<any>;
159
+ /** 在更新实体前调用。 */
160
+ beforeUpdateEntity?: (server: IRpdServer, model: RpdDataModel, options: UpdateEntityByIdOptions, currentEntity: any) => Promise<any>;
161
+ }
@@ -1,22 +1,22 @@
1
- import { RpdDataPropertyTypes } from "~/types";
2
- import { DataAccessPgColumnTypes } from "./dataAccessTypes";
3
-
4
- export const pgPropertyTypeColumnMap: Record<Exclude<RpdDataPropertyTypes, "relation" | "relation[]">, DataAccessPgColumnTypes> = {
5
- integer: "int4",
6
- long: "int8",
7
- float: "float4",
8
- double: "float8",
9
- decimal: "decimal",
10
- text: "text",
11
- boolean: "bool",
12
- date: "date",
13
- time: "time",
14
- datetime: "timestamptz",
15
- json: "jsonb",
16
- option: "text",
17
- "option[]": "text[]",
18
- file: "jsonb",
19
- "file[]": "jsonb",
20
- image: "jsonb",
21
- "image[]": "jsonb",
22
- };
1
+ import { RpdDataPropertyTypes } from "~/types";
2
+ import { DataAccessPgColumnTypes } from "./dataAccessTypes";
3
+
4
+ export const pgPropertyTypeColumnMap: Record<Exclude<RpdDataPropertyTypes, "relation" | "relation[]">, DataAccessPgColumnTypes> = {
5
+ integer: "int4",
6
+ long: "int8",
7
+ float: "float4",
8
+ double: "float8",
9
+ decimal: "decimal",
10
+ text: "text",
11
+ boolean: "bool",
12
+ date: "date",
13
+ time: "time",
14
+ datetime: "timestamptz",
15
+ json: "jsonb",
16
+ option: "text",
17
+ "option[]": "text[]",
18
+ file: "jsonb",
19
+ "file[]": "jsonb",
20
+ image: "jsonb",
21
+ "image[]": "jsonb",
22
+ };