midway-fatcms 0.0.1-beta.26 → 0.0.1-beta.29

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 (188) hide show
  1. package/dist/config/config.default.js +6 -4
  2. package/dist/controller/home.controller.js +2 -1
  3. package/dist/controller/manage/CrudStandardDesignApi.js +8 -8
  4. package/dist/controller/render/AppRenderController.js +2 -1
  5. package/dist/middleware/global.middleware.js +22 -9
  6. package/dist/models/AsyncTaskModel.d.ts +2 -0
  7. package/dist/models/AsyncTaskModel.js +3 -1
  8. package/dist/models/RedisKeys.d.ts +2 -0
  9. package/dist/models/RedisKeys.js +2 -0
  10. package/dist/models/bizmodels.d.ts +1 -0
  11. package/dist/service/UserSessionService.d.ts +21 -0
  12. package/dist/service/UserSessionService.js +71 -1
  13. package/dist/service/WorkbenchService.d.ts +32 -0
  14. package/dist/service/WorkbenchService.js +54 -11
  15. package/dist/service/anyapi/AnyApiSandboxService.js +12 -12
  16. package/dist/service/asyncTask/AsyncTaskRunnerService.d.ts +14 -1
  17. package/dist/service/asyncTask/AsyncTaskRunnerService.js +70 -25
  18. package/dist/service/asyncTask/handler/ExportExcelAsyncTaskHandler.js +1 -1
  19. package/dist/service/asyncTask/handler/ExportExcelByInnerHttpHandler.js +11 -2
  20. package/dist/service/base/RedisCacheService.d.ts +7 -0
  21. package/dist/service/base/RedisCacheService.js +7 -0
  22. package/dist/service/crudstd/CrudStdService.d.ts +0 -6
  23. package/dist/service/crudstd/CrudStdService.js +13 -33
  24. package/package.json +1 -5
  25. package/src/config/config.default.ts +0 -207
  26. package/src/config/seed/aeskey.txt +0 -1
  27. package/src/config/utils.ts +0 -22
  28. package/src/configuration.ts +0 -109
  29. package/src/controller/base/BaseApiController.ts +0 -170
  30. package/src/controller/gateway/AnyApiGatewayController.ts +0 -33
  31. package/src/controller/gateway/AsyncTaskController.ts +0 -157
  32. package/src/controller/gateway/CrudMtdGatewayController.ts +0 -111
  33. package/src/controller/gateway/CrudStdGatewayController.ts +0 -101
  34. package/src/controller/gateway/DocGatewayController.ts +0 -173
  35. package/src/controller/gateway/FileController.ts +0 -109
  36. package/src/controller/gateway/ProxyApiGatewayController.ts +0 -47
  37. package/src/controller/gateway/PublicApiController.ts +0 -142
  38. package/src/controller/gateway/StaticController.ts +0 -298
  39. package/src/controller/helpers.controller.ts +0 -161
  40. package/src/controller/home.controller.ts +0 -64
  41. package/src/controller/manage/AnyApiMangeApi.ts +0 -66
  42. package/src/controller/manage/AppLogMangeApi.ts +0 -53
  43. package/src/controller/manage/AppMangeApi.ts +0 -53
  44. package/src/controller/manage/AppPageMangeApi.ts +0 -52
  45. package/src/controller/manage/AppSchemaHistoryApi.ts +0 -49
  46. package/src/controller/manage/CrudMethodsMangeApi.ts +0 -49
  47. package/src/controller/manage/CrudStandardDesignApi.ts +0 -346
  48. package/src/controller/manage/DataDictManageApi.ts +0 -78
  49. package/src/controller/manage/DeployManageApi.ts +0 -175
  50. package/src/controller/manage/DocLibManageApi.ts +0 -69
  51. package/src/controller/manage/DocManageApi.ts +0 -99
  52. package/src/controller/manage/FileManageApi.ts +0 -45
  53. package/src/controller/manage/LowCodeTplManageApi.ts +0 -52
  54. package/src/controller/manage/MenuManageApi.ts +0 -58
  55. package/src/controller/manage/ProxyApiMangeApi.ts +0 -52
  56. package/src/controller/manage/SuperAdminManageApi.ts +0 -139
  57. package/src/controller/manage/SysConfigMangeApi.ts +0 -95
  58. package/src/controller/manage/SystemInfoManageApi.ts +0 -53
  59. package/src/controller/manage/UserAccountManageApi.ts +0 -94
  60. package/src/controller/manage/WorkbenchMangeApi.ts +0 -72
  61. package/src/controller/myinfo/AuthController.ts +0 -108
  62. package/src/controller/myinfo/MyInfoController.ts +0 -32
  63. package/src/controller/render/AppRenderController.ts +0 -79
  64. package/src/controller/test.controller.ts +0 -37
  65. package/src/filter/default.filter.ts +0 -13
  66. package/src/filter/notfound.filter.ts +0 -10
  67. package/src/index.ts +0 -106
  68. package/src/interface.ts +0 -31
  69. package/src/libs/crud-pro/CrudPro.ts +0 -165
  70. package/src/libs/crud-pro/defaultConfigs.ts +0 -15
  71. package/src/libs/crud-pro/exceptions.ts +0 -124
  72. package/src/libs/crud-pro/interfaces.ts +0 -190
  73. package/src/libs/crud-pro/models/ExecuteContext.ts +0 -120
  74. package/src/libs/crud-pro/models/ExecuteContextFunc.ts +0 -96
  75. package/src/libs/crud-pro/models/FuncContext.ts +0 -21
  76. package/src/libs/crud-pro/models/RequestCfgModel.ts +0 -141
  77. package/src/libs/crud-pro/models/RequestModel.ts +0 -141
  78. package/src/libs/crud-pro/models/ResModel.ts +0 -19
  79. package/src/libs/crud-pro/models/ServiceHub.ts +0 -32
  80. package/src/libs/crud-pro/models/SqlCfgModel.ts +0 -52
  81. package/src/libs/crud-pro/models/SqlSegArg.ts +0 -13
  82. package/src/libs/crud-pro/models/Transaction.ts +0 -73
  83. package/src/libs/crud-pro/models/TransactionMySQL.ts +0 -79
  84. package/src/libs/crud-pro/models/TransactionPostgres.ts +0 -91
  85. package/src/libs/crud-pro/models/TransactionSqlServer.ts +0 -102
  86. package/src/libs/crud-pro/models/keys.ts +0 -159
  87. package/src/libs/crud-pro/services/CrudProCachedCfgService.ts +0 -83
  88. package/src/libs/crud-pro/services/CrudProExecuteFuncService.ts +0 -128
  89. package/src/libs/crud-pro/services/CrudProExecuteSqlService.ts +0 -262
  90. package/src/libs/crud-pro/services/CrudProFieldUpdateService.ts +0 -60
  91. package/src/libs/crud-pro/services/CrudProFieldValidateService.ts +0 -180
  92. package/src/libs/crud-pro/services/CrudProGenSqlCondition.ts +0 -354
  93. package/src/libs/crud-pro/services/CrudProGenSqlService.ts +0 -185
  94. package/src/libs/crud-pro/services/CrudProOriginToExecuteSql.ts +0 -393
  95. package/src/libs/crud-pro/services/CrudProServiceBase.ts +0 -94
  96. package/src/libs/crud-pro/services/CrudProTableMetaService.ts +0 -86
  97. package/src/libs/crud-pro/services/CurdProServiceHub.ts +0 -92
  98. package/src/libs/crud-pro/sql.txt +0 -120
  99. package/src/libs/crud-pro/utils/CompareUtils.ts +0 -23
  100. package/src/libs/crud-pro/utils/DatabaseName.ts +0 -60
  101. package/src/libs/crud-pro/utils/DateTimeUtils.ts +0 -20
  102. package/src/libs/crud-pro/utils/MemoryRefreshCache.ts +0 -64
  103. package/src/libs/crud-pro/utils/MessageParseUtils.ts +0 -33
  104. package/src/libs/crud-pro/utils/MixinUtils.ts +0 -285
  105. package/src/libs/crud-pro/utils/ModelUtils.ts +0 -55
  106. package/src/libs/crud-pro/utils/MultiKeyMap.ts +0 -72
  107. package/src/libs/crud-pro/utils/SqlFuncUtils.ts +0 -29
  108. package/src/libs/crud-pro/utils/TypeUtils.ts +0 -188
  109. package/src/libs/crud-pro/utils/ValidateUtils.ts +0 -165
  110. package/src/libs/crud-pro/utils/pool/MySQLUtils.ts +0 -20
  111. package/src/libs/crud-pro/utils/pool/PostgresUtils.ts +0 -22
  112. package/src/libs/crud-pro/utils/pool/SqlServerUtils.ts +0 -22
  113. package/src/libs/crud-pro/utils/sqlConvert/convertColumnName.ts +0 -26
  114. package/src/libs/crud-pro/utils/sqlConvert/convertMix.ts +0 -26
  115. package/src/libs/crud-pro/utils/sqlConvert/convertMsSql.ts +0 -11
  116. package/src/libs/crud-pro/utils/sqlConvert/convertPgSql.ts +0 -11
  117. package/src/libs/crud-pro/utils/sqlConvert/convertPgType.ts +0 -129
  118. package/src/libs/global-config/global-config.ts +0 -78
  119. package/src/libs/utils/common-dto.ts +0 -52
  120. package/src/libs/utils/crypto-utils.ts +0 -50
  121. package/src/libs/utils/errorToString.ts +0 -61
  122. package/src/libs/utils/fatcms-request.ts +0 -103
  123. package/src/libs/utils/functions.ts +0 -73
  124. package/src/libs/utils/ordernum-utils.ts +0 -14
  125. package/src/libs/utils/parseConfig.ts +0 -54
  126. package/src/libs/utils/parseCreateSql.ts +0 -91
  127. package/src/libs/utils/render-utils.ts +0 -184
  128. package/src/middleware/forbidden.middleware.ts +0 -52
  129. package/src/middleware/global.middleware.ts +0 -280
  130. package/src/middleware/permission.middleware.ts +0 -80
  131. package/src/middleware/tx.middleware.ts +0 -30
  132. package/src/models/AsyncTaskModel.ts +0 -82
  133. package/src/models/RedisKeys.ts +0 -13
  134. package/src/models/SystemEntities.ts +0 -115
  135. package/src/models/SystemPerm.ts +0 -105
  136. package/src/models/SystemTables.ts +0 -27
  137. package/src/models/bizmodels.ts +0 -120
  138. package/src/models/contextLogger.ts +0 -132
  139. package/src/models/devops.ts +0 -17
  140. package/src/models/userSession.ts +0 -216
  141. package/src/schedule/anonymousContext.ts +0 -73
  142. package/src/schedule/index.ts +0 -12
  143. package/src/schedule/runSchedule.ts +0 -82
  144. package/src/schedule/scheduleNames.ts +0 -21
  145. package/src/service/AuthService.ts +0 -272
  146. package/src/service/EnumInfoService.ts +0 -130
  147. package/src/service/FileCenterService.ts +0 -395
  148. package/src/service/SysConfigService.ts +0 -37
  149. package/src/service/UserAccountService.ts +0 -107
  150. package/src/service/UserSessionService.ts +0 -78
  151. package/src/service/VisitStatService.ts +0 -166
  152. package/src/service/WorkbenchService.ts +0 -165
  153. package/src/service/anyapi/AnyApiSandboxService.ts +0 -121
  154. package/src/service/anyapi/AnyApiService.ts +0 -186
  155. package/src/service/asyncTask/AsyncTaskRunnerService.ts +0 -266
  156. package/src/service/asyncTask/AsyncTaskService.ts +0 -21
  157. package/src/service/asyncTask/handler/ExcelInfoModel.ts +0 -11
  158. package/src/service/asyncTask/handler/ExportExcelAsyncTaskHandler.ts +0 -245
  159. package/src/service/asyncTask/handler/ExportExcelByInnerHttpHandler.ts +0 -147
  160. package/src/service/asyncTask/handler/ExportExcelByStdCrudHandler.ts +0 -138
  161. package/src/service/base/ApiBaseService.ts +0 -42
  162. package/src/service/base/ApiRateLimiter.ts +0 -59
  163. package/src/service/base/BaseService.ts +0 -100
  164. package/src/service/base/RedisCacheService.ts +0 -38
  165. package/src/service/crudstd/CrudStdActionService.ts +0 -27
  166. package/src/service/crudstd/CrudStdConstant.ts +0 -62
  167. package/src/service/crudstd/CrudStdRelationService.ts +0 -78
  168. package/src/service/crudstd/CrudStdService.ts +0 -283
  169. package/src/service/curd/CrudProQuick.ts +0 -131
  170. package/src/service/curd/CurdMixByAccountService.ts +0 -90
  171. package/src/service/curd/CurdMixByDictService.ts +0 -114
  172. package/src/service/curd/CurdMixByLinkToCustomService.ts +0 -219
  173. package/src/service/curd/CurdMixBySysConfigService.ts +0 -78
  174. package/src/service/curd/CurdMixByWorkbenchService.ts +0 -71
  175. package/src/service/curd/CurdMixService.ts +0 -97
  176. package/src/service/curd/CurdMixUtils.ts +0 -311
  177. package/src/service/curd/CurdProService.ts +0 -229
  178. package/src/service/curd/fixCfgModel.ts +0 -139
  179. package/src/service/proxyapi/ProxyApiLoadService.ts +0 -174
  180. package/src/service/proxyapi/ProxyApiService.ts +0 -262
  181. package/src/service/proxyapi/ProxyApiUtils.ts +0 -32
  182. package/src/service/proxyapi/RouteHandler.ts +0 -8
  183. package/src/service/proxyapi/RouteTrie.ts +0 -74
  184. package/src/service/proxyapi/WeightedRandom.ts +0 -37
  185. package/src/service/proxyapi/WeightedRoundRobin.ts +0 -44
  186. package/src/views/404_app.html +0 -31
  187. package/src/views/404_workbench.html +0 -34
  188. package/src/views/static/favicon.ico +0 -0
@@ -1,129 +0,0 @@
1
- //
2
- // // 定义 PostgreSQL 数据类型 OID 映射
3
- // const PG_TYPE_OIDS = {
4
- // INT2: 21, // smallint
5
- // INT4: 23, // integer
6
- // INT8: 20, // bigint
7
- // FLOAT4: 700, // real
8
- // FLOAT8: 701, // double precision
9
- // NUMERIC: 1700, // numeric
10
- // MONEY: 790, // money
11
- // BOOL: 16, // boolean
12
- // DATE: 1082, // date
13
- // TIMESTAMP: 1114, // timestamp without time zone
14
- // TIMESTAMPTZ: 1184, // timestamp with time zone
15
- // JSON: 114, // json
16
- // JSONB: 3802, // jsonb
17
- // };
18
- //
19
- //
20
- //
21
- // /**
22
- // * 将 PostgreSQL 数据类型转换为 JavaScript 类型
23
- // * @param {any} value - 原始值
24
- // * @param {number} oid - 数据类型 OID
25
- // * @returns {any} 转换后的值
26
- // */
27
- // function convertPgType(value: any, oid: any) {
28
- // // 如果值为 null,直接返回
29
- // if (value === null) {
30
- // return null;
31
- // }
32
- //
33
- // const typeOfValue = typeof value;
34
- // if (typeOfValue === 'undefined') {
35
- // return null;
36
- // }
37
- // if (typeOfValue === 'number' || typeOfValue === "boolean" || typeOfValue === "object") {
38
- // return value;
39
- // }
40
- // if (typeOfValue === 'bigint') {
41
- // return value.toString()
42
- // }
43
- //
44
- // switch (oid) {
45
- // // 整数类型(全部转为 Number)
46
- // case PG_TYPE_OIDS.INT2: // smallint
47
- // case PG_TYPE_OIDS.INT4: // integer
48
- // return Number(value);
49
- // case PG_TYPE_OIDS.INT8: // bigint
50
- // return value;
51
- //
52
- // // 浮点类型
53
- // case PG_TYPE_OIDS.FLOAT4: // real
54
- // case PG_TYPE_OIDS.FLOAT8: // double precision
55
- // case PG_TYPE_OIDS.NUMERIC: // numeric
56
- // case PG_TYPE_OIDS.MONEY: // money
57
- // return Number(value);
58
- //
59
- // // 布尔类型
60
- // case PG_TYPE_OIDS.BOOL:
61
- // if (typeof value === 'boolean') {
62
- // return value;
63
- // }
64
- // return value === 't' || value === 'true' || value === true;
65
- //
66
- // // 日期/时间类型
67
- // case PG_TYPE_OIDS.DATE:
68
- // return new Date(value).toISOString().split('T')[0];
69
- //
70
- // case PG_TYPE_OIDS.TIMESTAMP:
71
- // case PG_TYPE_OIDS.TIMESTAMPTZ:
72
- // return new Date(value).toISOString();
73
- //
74
- // // JSON 类型
75
- // case PG_TYPE_OIDS.JSON:
76
- // case PG_TYPE_OIDS.JSONB:
77
- // // try {
78
- // // return JSON.parse(value);
79
- // // } catch (e) {
80
- // // return value; // 解析失败时返回原始值
81
- // // }
82
- //
83
- // // 默认不转换
84
- // default:
85
- // return value;
86
- // }
87
- // }
88
- //
89
- //
90
- // /**
91
- // * 获取并转换PG查询结果的数据类型
92
- // * @param result
93
- // */
94
- // function pickAndConvertPgRows(result: any): any[] {
95
- // if (!result || !Array.isArray(result.rows)) {
96
- // return [];
97
- // }
98
- //
99
- // console.log('',convertPgType)
100
- // try {
101
- // // 获取字段类型 OID
102
- // const fieldTypes = result.fields.map((field: any) => field.dataTypeID);
103
- //
104
- // // 转换每一行的数据类型
105
- // return result.rows.map((row:any) => {
106
- // const convertedRow = {};
107
- // Object.keys(row).forEach((key, index) => {
108
- // const value = row[key];
109
- // const oid = fieldTypes[index];
110
- // convertedRow[key] = convertPgType(value, oid);
111
- // });
112
- // return convertedRow;
113
- // });
114
- // } catch (e) {
115
- // console.error('pickAndConvertPgRows', e);
116
- // }
117
- // return [];
118
- // }
119
-
120
- function pickAndConvertPgRows(result: any): any[] {
121
- if (!result || !Array.isArray(result.rows)) {
122
- return [];
123
- }
124
- return result.rows;
125
- }
126
-
127
- export {
128
- pickAndConvertPgRows
129
- }
@@ -1,78 +0,0 @@
1
- import { SqlDbType } from '../crud-pro/models/keys';
2
-
3
- interface IGlobalStaticConfig {
4
- /**
5
- * CrudStd: 业务系统自定义的修改cfgModel
6
- * @param reqJson
7
- * @param cfgModel
8
- * @param appInfo
9
- * @param ctx
10
- */
11
- bizUpdateCfgModelForCrudStd(reqJson: any, cfgModel: any, appInfo: any, ctx: any): Promise<any>;
12
-
13
- /**
14
- * CrudMtd: 业务系统自定义的修改cfgModel
15
- * @param reqJson
16
- * @param cfgModel
17
- * @param methodInfo
18
- * @param ctx
19
- */
20
- bizUpdateCfgModelForCrudMtd(reqJson: any, cfgModel: any, methodInfo: any, ctx: any): Promise<any>;
21
-
22
- /**
23
- * CrudPro: 业务系统自定义的修改cfgModel。这是最底层的!!全局的!!全局的!!全局的!!!
24
- * @param reqJson
25
- * @param cfgModel
26
- */
27
- bizUpdateCfgModelForCrudPro(reqJson: any, cfgModel: any): Promise<any>;
28
-
29
- /**
30
- * 生成用户的账号ID,业务系统可以生成类似工号的ID
31
- * @param userSubmitData
32
- */
33
- generateUserAccountId(userSubmitData: any): Promise<string>;
34
-
35
- /**
36
- * 将业务系统表中的userId映射为fatcms的UserAccountId
37
- * @param bizTableUserId 业余系统表中的UserId
38
- */
39
- toFatcmsUserAccountId(bizTableUserId: any): string;
40
-
41
- SystemDbName: string;
42
- SystemDbType: SqlDbType;
43
- }
44
-
45
- const noop = () => {
46
- return Promise.resolve();
47
- };
48
-
49
- class GlobalStaticConfig {
50
- private configObject: IGlobalStaticConfig;
51
- constructor() {
52
- this.configObject = {
53
- bizUpdateCfgModelForCrudStd: noop,
54
- bizUpdateCfgModelForCrudMtd: noop,
55
- bizUpdateCfgModelForCrudPro: noop,
56
- generateUserAccountId: null,
57
- toFatcmsUserAccountId: (bizTableUserId: any) => {
58
- return bizTableUserId;
59
- },
60
- SystemDbName: 'fatcms',
61
- SystemDbType: SqlDbType.mysql,
62
- };
63
- }
64
- public getConfig(): IGlobalStaticConfig {
65
- return this.configObject as IGlobalStaticConfig;
66
- }
67
-
68
- public setConfig(configObject: any) {
69
- if (!configObject || typeof configObject !== 'object') {
70
- throw new Error('参数configObject不能为空');
71
- }
72
- Object.assign(this.configObject, configObject);
73
- }
74
- }
75
-
76
- const GLOBAL_STATIC_CONFIG = new GlobalStaticConfig();
77
-
78
- export { GLOBAL_STATIC_CONFIG };
@@ -1,52 +0,0 @@
1
- export interface ICommonResult {
2
- success: boolean;
3
- data?: any;
4
- message?: string;
5
- code?: string;
6
- debugInfo?: any;
7
- }
8
-
9
- export class CommonResult implements ICommonResult {
10
- code: string;
11
- data: any;
12
- message: string;
13
- success: boolean;
14
- debugInfo: any;
15
-
16
- public static successNotNull(data?: any): CommonResult {
17
- const res = new CommonResult();
18
- if (data) {
19
- res.success = true;
20
- res.data = data;
21
- } else {
22
- res.success = false;
23
- res.message = '对象找不到';
24
- }
25
- return res;
26
- }
27
-
28
- public static successRes(data?: any): CommonResult {
29
- const res = new CommonResult();
30
- res.success = true;
31
- res.data = data;
32
- return res;
33
- }
34
-
35
- public static successMsg(message: string, data?: any): CommonResult {
36
- const res = new CommonResult();
37
- res.success = true;
38
- res.message = message;
39
- res.data = data;
40
- return res;
41
- }
42
-
43
- public static errorRes(message: string, errorCode = '', debugInfo: any = null): CommonResult {
44
- const res = new CommonResult();
45
- res.success = false;
46
- res.data = null;
47
- res.message = message;
48
- res.code = errorCode;
49
- res.debugInfo = debugInfo;
50
- return res;
51
- }
52
- }
@@ -1,50 +0,0 @@
1
- import * as crypto from 'crypto';
2
- import * as path from 'path';
3
- import * as fs from 'fs';
4
- import * as md5 from 'md5';
5
- import { Aes128CBC } from 'aes-128-cbc';
6
-
7
- function hashUtf8Hex(data: string): string {
8
- const hash = crypto.createHash('sha256');
9
- const chunkSize = 1024; // 每次处理 1MB 数据
10
- for (let i = 0; i < data.length; i += chunkSize) {
11
- const chunk = data.slice(i, i + chunkSize);
12
- const inputBuffer = Buffer.from(chunk, 'utf8');
13
- hash.update(inputBuffer);
14
- }
15
- return hash.digest('hex');
16
- }
17
-
18
- function readSeed1() {
19
- // 这个文件肯定存在
20
- const t = path.join(__dirname, '../../config/seed/aeskey.txt');
21
- return fs.readFileSync(t, 'utf-8');
22
- }
23
-
24
- function readSeed2(): string {
25
- const filePath = path.join(__dirname, '../../../config/seed/aeskey.txt');
26
- if (!fs.existsSync(filePath)) {
27
- return null;
28
- }
29
- return fs.readFileSync(filePath, 'utf-8');
30
- }
31
-
32
- function createAes128BySeedContent(seedContent: string) {
33
- const hash1 = hashUtf8Hex(seedContent.trim());
34
- const key = md5(hash1);
35
- const iv = md5(key + hash1);
36
- return new Aes128CBC(key, iv);
37
- }
38
-
39
- function createAes128BySeedFile() {
40
- const seed2 = readSeed2();
41
- if (seed2) {
42
- return createAes128BySeedContent(seed2);
43
- }
44
- const seed1 = readSeed1();
45
- return createAes128BySeedContent(seed1);
46
- }
47
-
48
- const privateAES = createAes128BySeedFile();
49
-
50
- export { privateAES };
@@ -1,61 +0,0 @@
1
- function errorToString(error: any): string {
2
- // 处理非错误对象的情况
3
- if (typeof error === 'undefined') {
4
- return 'Error: undefined was thrown';
5
- }
6
-
7
- if (error === null) {
8
- return 'Error: null was thrown';
9
- }
10
-
11
- // 处理原始值类型
12
- const primitiveTypes = ['string', 'number', 'boolean', 'symbol'];
13
- if (primitiveTypes.includes(typeof error)) {
14
- return `Error: A primitive value was thrown\nValue: ${String(error)}`;
15
- }
16
-
17
- // 处理 Error 对象
18
- if (error instanceof Error) {
19
- const errorDetails = [];
20
- errorDetails.push(`Error: ${error.name || 'Error'}`);
21
- errorDetails.push(`Message: ${error.message || 'No error message'}`);
22
-
23
- if (error.stack) {
24
- errorDetails.push('Stack Trace:');
25
- errorDetails.push(error.stack);
26
- }
27
-
28
- const extraProperties = ['code', 'fileName', 'lineNumber', 'columnNumber'];
29
- extraProperties.forEach(prop => {
30
- if (error[prop] !== undefined) {
31
- errorDetails.push(`${prop}: ${error[prop]}`);
32
- }
33
- });
34
-
35
- const customProps = Object.keys(error).filter(key => !['name', 'message', 'stack', ...extraProperties].includes(key));
36
-
37
- if (customProps.length > 0) {
38
- errorDetails.push('Custom Properties:');
39
- customProps.forEach(prop => {
40
- try {
41
- const value = JSON.stringify(error[prop], null, 2) || String(error[prop]);
42
- errorDetails.push(` ${prop}: ${value}`);
43
- } catch (e) {
44
- errorDetails.push(` ${prop}: [Object cannot be serialized]`);
45
- }
46
- });
47
- }
48
-
49
- return errorDetails.join('\n');
50
- }
51
-
52
- // 处理普通对象
53
- try {
54
- const objectDetails = JSON.stringify(error, null, 2);
55
- return `Error: A plain object was thrown\nObject: ${objectDetails}`;
56
- } catch (e) {
57
- return `Error: An object was thrown but could not be serialized\nType: ${error.constructor?.name || 'Unknown'}`;
58
- }
59
- }
60
-
61
- export { errorToString };
@@ -1,103 +0,0 @@
1
- import { Context } from '@midwayjs/koa';
2
- import * as _ from 'lodash';
3
- import { privateAES } from './crypto-utils';
4
- import { CommonException } from '../crud-pro/exceptions';
5
-
6
- function isEnableByHeaderKey(ctx: Context, configName: string) {
7
- const fatcmsDebug = ctx.app.getConfig(configName);
8
- const headerKey = _.get(fatcmsDebug, 'headerKey');
9
- const headerSecret = _.get(fatcmsDebug, 'headerSecret');
10
- if (!headerSecret || !headerKey) {
11
- return false;
12
- }
13
- const headers = _.get(ctx, 'request.headers') || {};
14
- return headers[headerKey] === headerSecret;
15
- }
16
-
17
- /**
18
- * 是否开启调试能力
19
- * @param ctx
20
- */
21
- export function isEnableDebug(ctx: Context): boolean {
22
- return isEnableByHeaderKey(ctx, 'fatcmsDebug');
23
- }
24
-
25
- /**
26
- * 是否开启SA账号。只有账号密码没有用,必须通过ModHeader插件设置如下字段
27
- * @param ctx
28
- */
29
- export function isEnableSuperAdmin(ctx: Context): boolean {
30
- return isEnableByHeaderKey(ctx, 'fatcmsSAEnable');
31
- }
32
-
33
- export function isLocalEnv(ctx: Context): boolean {
34
- // 系统内部调用。如定时任务,没有request对象。
35
- if (!ctx.request) {
36
- return true;
37
- }
38
- const host = ctx.request.host;
39
- return host.startsWith('127.0.0.1') || host.startsWith('localhost:');
40
- }
41
-
42
- /**
43
- * 获取调试时专用的站点code
44
- * @param ctx
45
- */
46
- export function getDebugWorkbenchCode(ctx: Context) {
47
- const headers = _.get(ctx, 'request.headers') || {};
48
- return headers['fatcmsworkbench'];
49
- }
50
-
51
- /**
52
- * 代理转发服务专用
53
- * @param ctx
54
- */
55
- export function getDebugProxyTarget(ctx: Context): string {
56
- const headers = _.get(ctx, 'request.headers') || {};
57
- return headers['fatcmsdebugproxytarget'];
58
- }
59
-
60
- export function getCsrfToken(ctx: Context): string {
61
- const headers = _.get(ctx, 'request.headers') || {};
62
- return headers['fatcmscsrftoken'];
63
- }
64
-
65
- /**
66
- * 扩展的源码应用:本地开发调试时加载本地的js脚本
67
- * @param ctx
68
- */
69
- export function getExtLocalLoaderPort(ctx: Context): string {
70
- const headers = _.get(ctx, 'request.headers') || {};
71
- return headers['fatcmsextlocalloaderport'];
72
- }
73
-
74
- export async function isCsrfTokenValid(ctx: Context): Promise<boolean> {
75
- // 本地开发,不需要校验
76
- if (isLocalEnv(ctx) || isEnableDebug(ctx)) {
77
- return true;
78
- }
79
-
80
- const fatcmscsrftoken = getCsrfToken(ctx);
81
- if (!fatcmscsrftoken) {
82
- return false;
83
- }
84
- try {
85
- const depryptToken = await privateAES.time_decrypt_base64_utf8(fatcmscsrftoken);
86
- if (depryptToken) {
87
- const num = Number(depryptToken);
88
- if (num && num + 6 * 3600 * 1000 > Date.now()) {
89
- return true;
90
- }
91
- }
92
- } catch (e) {
93
- console.info('isCsrfTokenValid验证失败');
94
- }
95
- return false;
96
- }
97
-
98
- export async function assertCsrfToken(ctx: Context) {
99
- const isOK = await isCsrfTokenValid(ctx);
100
- if (!isOK) {
101
- throw new CommonException('ASSERT_CSRF_TOKEN_ERROR', 'CSRF_TOKEN 验证失败');
102
- }
103
- }
@@ -1,73 +0,0 @@
1
- import * as md5 from 'md5';
2
- import * as moment from 'moment';
3
-
4
- let createUniqueIdIndex = 0;
5
- function createUniqueId(): string {
6
- createUniqueIdIndex++;
7
- const p1 = md5(Date.now() + '' + Math.random() + '_' + createUniqueIdIndex);
8
- const p2 = Date.now().toString(32);
9
- return p1 + p2;
10
- }
11
-
12
- function parseJsonObject(str: any): any {
13
- if (typeof str === 'object') {
14
- return str;
15
- }
16
-
17
- if (typeof str === 'string') {
18
- str = str.trim();
19
- if (str.startsWith('{') || str.startsWith('[')) {
20
- try {
21
- return JSON.parse(str);
22
- } catch (e) {
23
- return null;
24
- }
25
- }
26
- }
27
- return null;
28
- }
29
-
30
- function trimStringArray(obj: any[]): string[] {
31
- return obj
32
- .map(s => {
33
- if (typeof s === 'string') {
34
- return s.trim();
35
- }
36
- return null;
37
- })
38
- .filter(Boolean);
39
- }
40
-
41
- function parseStringTrimArray(obj: any, separator = ','): string[] {
42
- if (Array.isArray(obj)) {
43
- return trimStringArray(obj);
44
- }
45
-
46
- if (typeof obj === 'string') {
47
- const str = obj.trim();
48
- if (str.length > 0) {
49
- // 可能是一个JSON数组
50
- if (str.startsWith('[') && str.endsWith(']')) {
51
- const arr = parseJsonObject(str);
52
- return trimStringArray(arr);
53
- }
54
-
55
- // 使用分隔符分隔
56
- if (str.includes(separator)) {
57
- const arr = str.split(separator);
58
- return trimStringArray(arr);
59
- }
60
-
61
- return [str];
62
- }
63
- }
64
-
65
- return null;
66
- }
67
-
68
-
69
- function getCurrentFullMoment(): string {
70
- return moment(Date.now()).format('YYYY-MM-DD HH:mm:ss.SSS');
71
- }
72
-
73
- export { createUniqueId, parseJsonObject, parseStringTrimArray, getCurrentFullMoment };
@@ -1,14 +0,0 @@
1
- import * as moment from 'moment';
2
-
3
- function generateOrderNumber(prefix = 'NO'): string {
4
- // 获取当前时间并格式化为YYYYMMDDHHmmss
5
- const timestamp = moment().format('YYYYMMDDHHmmss');
6
-
7
- // 生成6位随机数字
8
- const randomDigits = Math.floor(100000 + Math.random() * 900000);
9
-
10
- // 组合订单号
11
- return prefix + timestamp + randomDigits;
12
- }
13
-
14
- export { generateOrderNumber };
@@ -1,54 +0,0 @@
1
- import * as _ from 'lodash';
2
- import { parseJsonObject } from './functions';
3
-
4
- interface IEnumInfo {
5
- label: string;
6
- value: string | number;
7
- children?: IEnumInfo[];
8
- }
9
-
10
- function parseTreeTableToIEnumInfo(dataSource: any[]): IEnumInfo[] {
11
- if (!dataSource || !Array.isArray(dataSource)) {
12
- return undefined;
13
- }
14
- return dataSource.map((item: any) => {
15
- const { key, nodeName, value, label } = item;
16
- const children = parseTreeTableToIEnumInfo(item.children);
17
- const enumInfo: IEnumInfo = {
18
- label: label || nodeName,
19
- value: value || key,
20
- };
21
- if (children) {
22
- enumInfo.children = children;
23
- }
24
- return enumInfo;
25
- });
26
- }
27
-
28
- function parseConfigContentToEnumInfo(configEntity: any): IEnumInfo[] {
29
- const { config_content, config_type } = configEntity;
30
-
31
- const configObj = parseJsonObject(config_content);
32
- if (!configObj) {
33
- return null;
34
- }
35
-
36
- if (config_type === 'treeTable') {
37
- const dataSource = _.get(configObj, 'data.dataSource');
38
- if (Array.isArray(dataSource)) {
39
- return parseTreeTableToIEnumInfo(dataSource);
40
- }
41
- return [];
42
- }
43
-
44
- if (configObj.data && Array.isArray(configObj.data)) {
45
- return configObj.data;
46
- }
47
-
48
- if (Array.isArray(configObj)) {
49
- return configObj;
50
- }
51
- return [];
52
- }
53
-
54
- export { parseConfigContentToEnumInfo, IEnumInfo };