@ruiapp/rapid-core 0.1.79 → 0.1.81

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 (104) hide show
  1. package/dist/index.js +83 -42
  2. package/dist/plugins/dataManage/actionHandlers/deleteCollectionEntities.d.ts +8 -0
  3. package/package.json +1 -1
  4. package/rollup.config.js +16 -16
  5. package/src/core/actionHandler.ts +22 -22
  6. package/src/core/eventManager.ts +20 -20
  7. package/src/core/facility.ts +7 -7
  8. package/src/core/http/formDataParser.ts +89 -89
  9. package/src/core/pluginManager.ts +175 -175
  10. package/src/core/providers/runtimeProvider.ts +5 -5
  11. package/src/core/request.ts +86 -86
  12. package/src/core/response.ts +76 -76
  13. package/src/core/routeContext.ts +43 -43
  14. package/src/core/routesBuilder.ts +88 -88
  15. package/src/dataAccess/dataAccessor.ts +137 -137
  16. package/src/deno-std/datetime/to_imf.ts +32 -32
  17. package/src/deno-std/encoding/base64.ts +141 -141
  18. package/src/facilities/log/LogFacility.ts +35 -35
  19. package/src/helpers/entityHelpers.ts +76 -76
  20. package/src/plugins/auth/actionHandlers/changePassword.ts +54 -54
  21. package/src/plugins/auth/actionHandlers/createSession.ts +63 -63
  22. package/src/plugins/auth/actionHandlers/deleteSession.ts +18 -18
  23. package/src/plugins/auth/actionHandlers/getMyProfile.ts +35 -35
  24. package/src/plugins/auth/actionHandlers/index.ts +8 -8
  25. package/src/plugins/auth/actionHandlers/resetPassword.ts +38 -38
  26. package/src/plugins/auth/models/AccessToken.ts +56 -56
  27. package/src/plugins/auth/models/index.ts +3 -3
  28. package/src/plugins/auth/routes/changePassword.ts +15 -15
  29. package/src/plugins/auth/routes/getMyProfile.ts +15 -15
  30. package/src/plugins/auth/routes/index.ts +7 -7
  31. package/src/plugins/auth/routes/resetPassword.ts +15 -15
  32. package/src/plugins/auth/routes/signin.ts +15 -15
  33. package/src/plugins/auth/routes/signout.ts +15 -15
  34. package/src/plugins/cronJob/CronJobPluginTypes.ts +49 -49
  35. package/src/plugins/cronJob/actionHandlers/index.ts +4 -4
  36. package/src/plugins/cronJob/actionHandlers/runCronJob.ts +29 -29
  37. package/src/plugins/cronJob/routes/index.ts +3 -3
  38. package/src/plugins/cronJob/routes/runCronJob.ts +15 -15
  39. package/src/plugins/dataManage/DataManagePlugin.ts +8 -0
  40. package/src/plugins/dataManage/actionHandlers/addEntityRelations.ts +20 -20
  41. package/src/plugins/dataManage/actionHandlers/countCollectionEntities.ts +15 -15
  42. package/src/plugins/dataManage/actionHandlers/createCollectionEntitiesBatch.ts +42 -42
  43. package/src/plugins/dataManage/actionHandlers/createCollectionEntity.ts +24 -24
  44. package/src/plugins/dataManage/actionHandlers/deleteCollectionEntities.ts +38 -0
  45. package/src/plugins/dataManage/actionHandlers/findCollectionEntities.ts +26 -26
  46. package/src/plugins/dataManage/actionHandlers/findCollectionEntityById.ts +21 -21
  47. package/src/plugins/dataManage/actionHandlers/queryDatabase.ts +22 -22
  48. package/src/plugins/dataManage/actionHandlers/removeEntityRelations.ts +20 -20
  49. package/src/plugins/dataManage/actionHandlers/updateCollectionEntityById.ts +35 -35
  50. package/src/plugins/entityAccessControl/EntityAccessControlPlugin.ts +1 -1
  51. package/src/plugins/fileManage/actionHandlers/downloadDocument.ts +36 -36
  52. package/src/plugins/fileManage/actionHandlers/uploadFile.ts +33 -33
  53. package/src/plugins/fileManage/routes/downloadDocument.ts +15 -15
  54. package/src/plugins/fileManage/routes/downloadFile.ts +15 -15
  55. package/src/plugins/fileManage/routes/index.ts +5 -5
  56. package/src/plugins/fileManage/routes/uploadFile.ts +15 -15
  57. package/src/plugins/metaManage/actionHandlers/getMetaModelDetail.ts +10 -10
  58. package/src/plugins/metaManage/actionHandlers/listMetaModels.ts +9 -9
  59. package/src/plugins/metaManage/actionHandlers/listMetaRoutes.ts +9 -9
  60. package/src/plugins/routeManage/actionHandlers/httpProxy.ts +13 -13
  61. package/src/plugins/sequence/SequenceService.ts +81 -81
  62. package/src/plugins/sequence/actionHandlers/generateSn.ts +32 -32
  63. package/src/plugins/sequence/actionHandlers/index.ts +4 -4
  64. package/src/plugins/sequence/models/SequenceAutoIncrementRecord.ts +49 -49
  65. package/src/plugins/sequence/models/SequenceRule.ts +42 -42
  66. package/src/plugins/sequence/models/index.ts +4 -4
  67. package/src/plugins/sequence/routes/generateSn.ts +15 -15
  68. package/src/plugins/sequence/routes/index.ts +3 -3
  69. package/src/plugins/sequence/segment-utility.ts +11 -11
  70. package/src/plugins/sequence/segments/index.ts +9 -9
  71. package/src/plugins/serverOperation/ServerOperationPlugin.ts +91 -91
  72. package/src/plugins/serverOperation/ServerOperationPluginTypes.ts +15 -15
  73. package/src/plugins/serverOperation/actionHandlers/index.ts +4 -4
  74. package/src/plugins/setting/SettingService.ts +213 -213
  75. package/src/plugins/setting/actionHandlers/getSystemSettingValues.ts +30 -30
  76. package/src/plugins/setting/actionHandlers/getUserSettingValues.ts +38 -38
  77. package/src/plugins/setting/actionHandlers/index.ts +6 -6
  78. package/src/plugins/setting/actionHandlers/setSystemSettingValues.ts +30 -30
  79. package/src/plugins/setting/models/SystemSettingGroupSetting.ts +57 -57
  80. package/src/plugins/setting/models/SystemSettingItem.ts +42 -42
  81. package/src/plugins/setting/models/SystemSettingItemSetting.ts +73 -73
  82. package/src/plugins/setting/models/UserSettingGroupSetting.ts +57 -57
  83. package/src/plugins/setting/models/UserSettingItem.ts +49 -49
  84. package/src/plugins/setting/models/UserSettingItemSetting.ts +73 -73
  85. package/src/plugins/setting/models/index.ts +8 -8
  86. package/src/plugins/setting/routes/getSystemSettingValues.ts +15 -15
  87. package/src/plugins/setting/routes/getUserSettingValues.ts +15 -15
  88. package/src/plugins/setting/routes/index.ts +5 -5
  89. package/src/plugins/setting/routes/setSystemSettingValues.ts +15 -15
  90. package/src/plugins/stateMachine/actionHandlers/index.ts +4 -4
  91. package/src/plugins/stateMachine/actionHandlers/sendStateMachineEvent.ts +51 -51
  92. package/src/plugins/stateMachine/models/StateMachine.ts +42 -42
  93. package/src/plugins/stateMachine/models/index.ts +3 -3
  94. package/src/plugins/stateMachine/routes/index.ts +3 -3
  95. package/src/plugins/stateMachine/routes/sendStateMachineEvent.ts +15 -15
  96. package/src/polyfill.ts +5 -5
  97. package/src/proxy/mod.ts +38 -38
  98. package/src/queryBuilder/queryBuilder.ts +5 -1
  99. package/src/utilities/accessControlUtility.ts +33 -33
  100. package/src/utilities/fsUtility.ts +61 -61
  101. package/src/utilities/httpUtility.ts +19 -19
  102. package/src/utilities/jwtUtility.ts +26 -26
  103. package/src/utilities/timeUtility.ts +9 -9
  104. package/tsconfig.json +19 -19
@@ -1,76 +1,76 @@
1
- import { isArray, isObject } from "lodash";
2
- import { HttpStatus, ResponseData } from "./http-types";
3
-
4
- export const GlobalResponse = global.Response;
5
-
6
- function mergeHeaders(target: Headers, source: HeadersInit) {
7
- if (source instanceof Headers) {
8
- for (const keyValuePair of source.entries()) {
9
- target.set(keyValuePair[0], keyValuePair[1]);
10
- }
11
- } else if (isArray(source)) {
12
- for (const keyValuePair of source) {
13
- target.set(keyValuePair[0], keyValuePair[1]);
14
- }
15
- } else if (isObject(source)) {
16
- Object.entries(source).forEach(([key, value]) => target.set(key, value));
17
- }
18
- return target;
19
- }
20
-
21
- interface NewResponseOptions {
22
- body?: ResponseData;
23
- status?: HttpStatus;
24
- headers?: HeadersInit;
25
- }
26
-
27
- function newResponse(options: NewResponseOptions) {
28
- return new Response(options.body, {
29
- headers: options.headers,
30
- status: options.status || 200,
31
- });
32
- }
33
-
34
- export class RapidResponse {
35
- #response: Response;
36
- status: number;
37
- body: BodyInit;
38
- headers: Headers;
39
-
40
- constructor(body?: BodyInit, init?: ResponseInit) {
41
- this.body = body;
42
- this.headers = new Headers(init?.headers);
43
- this.status = init?.status;
44
- }
45
-
46
- json(obj: any, status?: HttpStatus, headers?: HeadersInit) {
47
- let body: string | null = null;
48
- if (obj) {
49
- body = JSON.stringify(obj);
50
- }
51
- this.headers.set("Content-Type", "application/json");
52
- const responseHeaders = new Headers(this.headers);
53
- if (headers) {
54
- mergeHeaders(responseHeaders, headers);
55
- }
56
- this.#response = newResponse({ body, status: status || 200, headers: responseHeaders });
57
- }
58
-
59
- redirect(location: string, status?: HttpStatus) {
60
- this.headers.set("Location", location);
61
- this.#response = newResponse({
62
- headers: this.headers,
63
- status: status || 302,
64
- });
65
- }
66
-
67
- getResponse() {
68
- if (!this.#response) {
69
- this.#response = new Response(this.body, {
70
- status: this.status || (this.body ? 200 : 404),
71
- headers: this.headers,
72
- });
73
- }
74
- return this.#response;
75
- }
76
- }
1
+ import { isArray, isObject } from "lodash";
2
+ import { HttpStatus, ResponseData } from "./http-types";
3
+
4
+ export const GlobalResponse = global.Response;
5
+
6
+ function mergeHeaders(target: Headers, source: HeadersInit) {
7
+ if (source instanceof Headers) {
8
+ for (const keyValuePair of source.entries()) {
9
+ target.set(keyValuePair[0], keyValuePair[1]);
10
+ }
11
+ } else if (isArray(source)) {
12
+ for (const keyValuePair of source) {
13
+ target.set(keyValuePair[0], keyValuePair[1]);
14
+ }
15
+ } else if (isObject(source)) {
16
+ Object.entries(source).forEach(([key, value]) => target.set(key, value));
17
+ }
18
+ return target;
19
+ }
20
+
21
+ interface NewResponseOptions {
22
+ body?: ResponseData;
23
+ status?: HttpStatus;
24
+ headers?: HeadersInit;
25
+ }
26
+
27
+ function newResponse(options: NewResponseOptions) {
28
+ return new Response(options.body, {
29
+ headers: options.headers,
30
+ status: options.status || 200,
31
+ });
32
+ }
33
+
34
+ export class RapidResponse {
35
+ #response: Response;
36
+ status: number;
37
+ body: BodyInit;
38
+ headers: Headers;
39
+
40
+ constructor(body?: BodyInit, init?: ResponseInit) {
41
+ this.body = body;
42
+ this.headers = new Headers(init?.headers);
43
+ this.status = init?.status;
44
+ }
45
+
46
+ json(obj: any, status?: HttpStatus, headers?: HeadersInit) {
47
+ let body: string | null = null;
48
+ if (obj) {
49
+ body = JSON.stringify(obj);
50
+ }
51
+ this.headers.set("Content-Type", "application/json");
52
+ const responseHeaders = new Headers(this.headers);
53
+ if (headers) {
54
+ mergeHeaders(responseHeaders, headers);
55
+ }
56
+ this.#response = newResponse({ body, status: status || 200, headers: responseHeaders });
57
+ }
58
+
59
+ redirect(location: string, status?: HttpStatus) {
60
+ this.headers.set("Location", location);
61
+ this.#response = newResponse({
62
+ headers: this.headers,
63
+ status: status || 302,
64
+ });
65
+ }
66
+
67
+ getResponse() {
68
+ if (!this.#response) {
69
+ this.#response = new Response(this.body, {
70
+ status: this.status || (this.body ? 200 : 404),
71
+ headers: this.headers,
72
+ });
73
+ }
74
+ return this.#response;
75
+ }
76
+ }
@@ -1,43 +1,43 @@
1
- import { isArray, isObject } from "lodash";
2
- import { RapidRequest } from "./request";
3
- import { RapidResponse } from "./response";
4
- import { HttpStatus, ResponseData } from "./http-types";
5
- import { IRpdServer } from "./server";
6
- import { Logger } from "~/facilities/log/LogFacility";
7
-
8
- export type Next = () => Promise<void>;
9
-
10
- export class RouteContext {
11
- #logger: Logger;
12
- readonly request: RapidRequest;
13
- readonly response: RapidResponse;
14
- readonly state: Record<string, any>;
15
- method: string;
16
- path: string;
17
- params: Record<string, string>;
18
- routeConfig: any;
19
-
20
- constructor(server: IRpdServer, request: RapidRequest) {
21
- this.#logger = server.getLogger();
22
- this.request = request;
23
- this.state = {};
24
- this.response = new RapidResponse();
25
-
26
- // `method` and `path` are used by `koa-tree-router` to match route
27
- this.method = request.method;
28
- this.path = request.url.pathname;
29
- }
30
-
31
- // `koa-tree-router` uses this method to set headers
32
- set(headerName: string, headerValue: string) {
33
- this.response.headers.set(headerName, headerValue);
34
- }
35
-
36
- json(obj: any, status?: HttpStatus, headers?: HeadersInit) {
37
- this.response.json(obj, status, headers);
38
- }
39
-
40
- redirect(url: string, status?: HttpStatus) {
41
- this.response.redirect(url, status);
42
- }
43
- }
1
+ import { isArray, isObject } from "lodash";
2
+ import { RapidRequest } from "./request";
3
+ import { RapidResponse } from "./response";
4
+ import { HttpStatus, ResponseData } from "./http-types";
5
+ import { IRpdServer } from "./server";
6
+ import { Logger } from "~/facilities/log/LogFacility";
7
+
8
+ export type Next = () => Promise<void>;
9
+
10
+ export class RouteContext {
11
+ #logger: Logger;
12
+ readonly request: RapidRequest;
13
+ readonly response: RapidResponse;
14
+ readonly state: Record<string, any>;
15
+ method: string;
16
+ path: string;
17
+ params: Record<string, string>;
18
+ routeConfig: any;
19
+
20
+ constructor(server: IRpdServer, request: RapidRequest) {
21
+ this.#logger = server.getLogger();
22
+ this.request = request;
23
+ this.state = {};
24
+ this.response = new RapidResponse();
25
+
26
+ // `method` and `path` are used by `koa-tree-router` to match route
27
+ this.method = request.method;
28
+ this.path = request.url.pathname;
29
+ }
30
+
31
+ // `koa-tree-router` uses this method to set headers
32
+ set(headerName: string, headerValue: string) {
33
+ this.response.headers.set(headerName, headerValue);
34
+ }
35
+
36
+ json(obj: any, status?: HttpStatus, headers?: HeadersInit) {
37
+ this.response.json(obj, status, headers);
38
+ }
39
+
40
+ redirect(url: string, status?: HttpStatus) {
41
+ this.response.redirect(url, status);
42
+ }
43
+ }
@@ -1,88 +1,88 @@
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 } from "~/types";
6
- import { isNullOrUndefined } from "~/utilities/typeUtility";
7
- import { Next, RouteContext } from "./routeContext";
8
- import { cloneDeep } from "lodash";
9
-
10
- export async function buildRoutes(server: IRpdServer, applicationConfig: RpdApplicationConfig) {
11
- const logger = server.getLogger();
12
- const router = new Router();
13
-
14
- let baseUrl = server.config.baseUrl;
15
- if (baseUrl) {
16
- if (baseUrl.endsWith("/")) {
17
- baseUrl = baseUrl.substring(0, baseUrl.length - 1);
18
- }
19
- } else {
20
- baseUrl = "";
21
- }
22
-
23
- applicationConfig.routes.forEach((routeConfig) => {
24
- if (routeConfig.type !== "RESTful") {
25
- return;
26
- }
27
-
28
- const routePath = baseUrl + routeConfig.endpoint;
29
-
30
- (router as any)[routeConfig.method.toLowerCase()](routePath, async (routerContext: RouteContext, next: Next) => {
31
- routerContext.routeConfig = cloneDeep(routeConfig);
32
- const { request, params } = routerContext;
33
-
34
- let search = request.url.search;
35
- if (search && search.startsWith("?")) {
36
- search = search.substring(1);
37
- }
38
- const query = qs.parse(search);
39
- const input = Object.assign({}, params, query);
40
-
41
- const requestMethod = request.method;
42
- if (requestMethod === "POST" || requestMethod === "PUT" || requestMethod === "PATCH") {
43
- const body = request.body;
44
- if (body) {
45
- Object.assign(input, body.value);
46
- }
47
- }
48
-
49
- // Normalize input value
50
-
51
- logger.debug("Processing rapid request.", {
52
- method: requestMethod,
53
- url: request.url.toString(),
54
- input,
55
- });
56
-
57
- let handlerContext: ActionHandlerContext = {
58
- logger,
59
- routerContext,
60
- next,
61
- server,
62
- applicationConfig,
63
- input,
64
- };
65
-
66
- await server.beforeRunRouteActions(handlerContext);
67
-
68
- for (const actionConfig of routeConfig.actions) {
69
- const actionCode = actionConfig.code;
70
- const handler = server.getActionHandlerByCode(actionCode);
71
- if (!handler) {
72
- throw new Error("Unknown handler: " + actionCode);
73
- }
74
-
75
- const result = handler(handlerContext, actionConfig.config);
76
- if (result instanceof Promise) {
77
- await result;
78
- }
79
- }
80
-
81
- if (!isNullOrUndefined(handlerContext.output)) {
82
- routerContext.json(handlerContext.output, handlerContext.status);
83
- }
84
- });
85
- });
86
-
87
- return router.routes();
88
- }
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 } from "~/types";
6
+ import { isNullOrUndefined } from "~/utilities/typeUtility";
7
+ import { Next, RouteContext } from "./routeContext";
8
+ import { cloneDeep } from "lodash";
9
+
10
+ export async function buildRoutes(server: IRpdServer, applicationConfig: RpdApplicationConfig) {
11
+ const logger = server.getLogger();
12
+ const router = new Router();
13
+
14
+ let baseUrl = server.config.baseUrl;
15
+ if (baseUrl) {
16
+ if (baseUrl.endsWith("/")) {
17
+ baseUrl = baseUrl.substring(0, baseUrl.length - 1);
18
+ }
19
+ } else {
20
+ baseUrl = "";
21
+ }
22
+
23
+ applicationConfig.routes.forEach((routeConfig) => {
24
+ if (routeConfig.type !== "RESTful") {
25
+ return;
26
+ }
27
+
28
+ const routePath = baseUrl + routeConfig.endpoint;
29
+
30
+ (router as any)[routeConfig.method.toLowerCase()](routePath, async (routerContext: RouteContext, next: Next) => {
31
+ routerContext.routeConfig = cloneDeep(routeConfig);
32
+ const { request, params } = routerContext;
33
+
34
+ let search = request.url.search;
35
+ if (search && search.startsWith("?")) {
36
+ search = search.substring(1);
37
+ }
38
+ const query = qs.parse(search);
39
+ const input = Object.assign({}, params, query);
40
+
41
+ const requestMethod = request.method;
42
+ if (requestMethod === "POST" || requestMethod === "PUT" || requestMethod === "PATCH") {
43
+ const body = request.body;
44
+ if (body) {
45
+ Object.assign(input, body.value);
46
+ }
47
+ }
48
+
49
+ // Normalize input value
50
+
51
+ logger.debug("Processing rapid request.", {
52
+ method: requestMethod,
53
+ url: request.url.toString(),
54
+ input,
55
+ });
56
+
57
+ let handlerContext: ActionHandlerContext = {
58
+ logger,
59
+ routerContext,
60
+ next,
61
+ server,
62
+ applicationConfig,
63
+ input,
64
+ };
65
+
66
+ await server.beforeRunRouteActions(handlerContext);
67
+
68
+ for (const actionConfig of routeConfig.actions) {
69
+ const actionCode = actionConfig.code;
70
+ const handler = server.getActionHandlerByCode(actionCode);
71
+ if (!handler) {
72
+ throw new Error("Unknown handler: " + actionCode);
73
+ }
74
+
75
+ const result = handler(handlerContext, actionConfig.config);
76
+ if (result instanceof Promise) {
77
+ await result;
78
+ }
79
+ }
80
+
81
+ if (!isNullOrUndefined(handlerContext.output)) {
82
+ routerContext.json(handlerContext.output, handlerContext.status);
83
+ }
84
+ });
85
+ });
86
+
87
+ return router.routes();
88
+ }