cgserver 12.0.8 → 12.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/README.md +9 -0
  2. package/dist/lib/Framework/AI/AiObject.js +10 -10
  3. package/dist/lib/Framework/AI/Astar.js +133 -133
  4. package/dist/lib/Framework/AI/BehaviorAI.js +340 -307
  5. package/dist/lib/Framework/AI/Entity.js +33 -33
  6. package/dist/lib/Framework/AI/Point.js +68 -68
  7. package/dist/lib/Framework/AI/TriggerMgr.js +201 -201
  8. package/dist/lib/Framework/Config/Config.js +74 -41
  9. package/dist/lib/Framework/Config/DbConfig.js +14 -14
  10. package/dist/lib/Framework/Config/FrameworkConfig.js +139 -173
  11. package/dist/lib/Framework/Config/IServerConfig.js +31 -31
  12. package/dist/lib/Framework/Config/_error_.js +35 -35
  13. package/dist/lib/Framework/Core/ByteTool.js +85 -85
  14. package/dist/lib/Framework/Core/Core.js +724 -688
  15. package/dist/lib/Framework/Core/Timer.js +116 -116
  16. package/dist/lib/Framework/Database/Decorator/AutoIncrement.js +10 -11
  17. package/dist/lib/Framework/Database/Decorator/DBCache.js +98 -65
  18. package/dist/lib/Framework/Database/Decorator/NotNull.js +10 -11
  19. package/dist/lib/Framework/Database/Decorator/PrimaryKey.js +10 -11
  20. package/dist/lib/Framework/Database/Decorator/Property.js +61 -61
  21. package/dist/lib/Framework/Database/Decorator/Table.js +14 -15
  22. package/dist/lib/Framework/Database/Decorator/Type.js +19 -20
  23. package/dist/lib/Framework/Database/MSSql/MSSqlManager.js +86 -53
  24. package/dist/lib/Framework/Database/Mongo/MongoBaseService.js +141 -141
  25. package/dist/lib/Framework/Database/Mongo/MongoManager.js +595 -547
  26. package/dist/lib/Framework/Database/Mongo/MongoServiceManager.js +52 -52
  27. package/dist/lib/Framework/Database/Mysql/MysqlBaseService.js +280 -280
  28. package/dist/lib/Framework/Database/Mysql/MysqlManager.js +138 -105
  29. package/dist/lib/Framework/Database/Redis/RedisManager.js +94 -61
  30. package/dist/lib/Framework/Decorator/AdminValidate.js +18 -19
  31. package/dist/lib/Framework/Decorator/AuthorityValidate.js +22 -22
  32. package/dist/lib/Framework/Decorator/CreatorValidate.js +18 -19
  33. package/dist/lib/Framework/Decorator/JsonAdminValidate.js +14 -15
  34. package/dist/lib/Framework/Decorator/JsonAuthorityValidate.js +20 -20
  35. package/dist/lib/Framework/Decorator/JsonCreatorValidate.js +18 -19
  36. package/dist/lib/Framework/Decorator/SyncCall.js +41 -42
  37. package/dist/lib/Framework/Decorator/SyncCallServer.js +77 -77
  38. package/dist/lib/Framework/Logic/CacheTool.js +106 -73
  39. package/dist/lib/Framework/Logic/EventTool.js +31 -28
  40. package/dist/lib/Framework/Logic/HttpTool.js +138 -105
  41. package/dist/lib/Framework/Logic/Log.js +121 -88
  42. package/dist/lib/Framework/Logic/SyncQueueTool.js +44 -44
  43. package/dist/lib/Framework/Server/ProtoFilter/GoogleProtoFilter.js +90 -57
  44. package/dist/lib/Framework/Server/ProtoFilter/IProtoFilter.js +9 -9
  45. package/dist/lib/Framework/Server/ProtoFilter/JsonProtoFilter.js +29 -29
  46. package/dist/lib/Framework/Server/ProtoFilter/ProtoFactory.js +35 -35
  47. package/dist/lib/Framework/Server/RpcWebSocketServer/CgMq.js +180 -180
  48. package/dist/lib/Framework/Server/RpcWebSocketServer/IRpc.js +38 -38
  49. package/dist/lib/Framework/Server/RpcWebSocketServer/IRpcClientWebSocket.js +253 -253
  50. package/dist/lib/Framework/Server/RpcWebSocketServer/IRpcServerWebSocket.js +94 -94
  51. package/dist/lib/Framework/Server/SocketServer/IClientSocket.js +44 -44
  52. package/dist/lib/Framework/Server/SocketServer/IServerSocket.js +114 -81
  53. package/dist/lib/Framework/Server/SocketServer/ISocket.js +255 -222
  54. package/dist/lib/Framework/Server/SocketServer/ISocketServer.js +177 -144
  55. package/dist/lib/Framework/Server/SocketServer/PacketParser.js +40 -40
  56. package/dist/lib/Framework/Server/WebServer/Controller/BaseController.js +119 -119
  57. package/dist/lib/Framework/Server/WebServer/Controller/MongoBaseUserController.js +171 -171
  58. package/dist/lib/Framework/Server/WebServer/Controller/MysqlBaseUserController.js +169 -169
  59. package/dist/lib/Framework/Server/WebServer/Engine/ControllerManager.js +115 -115
  60. package/dist/lib/Framework/Server/WebServer/Engine/Engine.js +254 -218
  61. package/dist/lib/Framework/Server/WebServer/Engine/RazorJs.js +543 -543
  62. package/dist/lib/Framework/Server/WebServer/Engine/Request.js +226 -226
  63. package/dist/lib/Framework/Server/WebServer/Engine/Response.js +120 -87
  64. package/dist/lib/Framework/Server/WebServer/IWebServer.js +55 -55
  65. package/dist/lib/Framework/Server/WebSocketServer/IClientWebSocket.js +44 -44
  66. package/dist/lib/Framework/Server/WebSocketServer/IServerWebSocket.js +128 -95
  67. package/dist/lib/Framework/Server/WebSocketServer/IWebSocket.js +248 -215
  68. package/dist/lib/Framework/Server/WebSocketServer/IWebSocketServer.js +250 -217
  69. package/dist/lib/Framework/Service/MongoAccountService.js +339 -339
  70. package/dist/lib/Framework/Service/MongoCacheService.js +50 -50
  71. package/dist/lib/Framework/Service/MongoUserService.js +129 -96
  72. package/dist/lib/Framework/Service/MysqlAccountService.js +411 -411
  73. package/dist/lib/Framework/Service/MysqlUserService.js +204 -171
  74. package/dist/lib/Framework/Service/ini.js +36 -36
  75. package/dist/lib/Framework/ThirdParty/AlipayTool.js +117 -205
  76. package/dist/lib/Framework/ThirdParty/Alisms.js +61 -50
  77. package/dist/lib/Framework/ThirdParty/AppleTool.js +271 -235
  78. package/dist/lib/Framework/ThirdParty/CgRankTool.js +215 -215
  79. package/dist/lib/Framework/ThirdParty/EmailTool.js +71 -38
  80. package/dist/lib/Framework/ThirdParty/QQTool.js +162 -129
  81. package/dist/lib/Framework/ThirdParty/QiniuTool.js +62 -29
  82. package/dist/lib/Framework/ThirdParty/Rpc.js +79 -79
  83. package/dist/lib/Framework/ThirdParty/WechatTool.js +167 -134
  84. package/dist/lib/Framework/cgserver.js +215 -212
  85. package/dist/lib/Framework/global.js +74 -74
  86. package/dist/lib/Framework/index.js +38 -5
  87. package/dist/lib/Framework/index_export_.js +180 -177
  88. package/dist/lib/test/test.js +21 -21
  89. package/dist/types/Framework/AI/AiObject.d.ts +5 -5
  90. package/dist/types/Framework/AI/Astar.d.ts +38 -38
  91. package/dist/types/Framework/AI/BehaviorAI.d.ts +24 -24
  92. package/dist/types/Framework/AI/Entity.d.ts +12 -12
  93. package/dist/types/Framework/AI/Point.d.ts +17 -17
  94. package/dist/types/Framework/AI/TriggerMgr.d.ts +51 -51
  95. package/dist/types/Framework/Config/Config.d.ts +9 -9
  96. package/dist/types/Framework/Config/DbConfig.d.ts +11 -11
  97. package/dist/types/Framework/Config/FrameworkConfig.d.ts +146 -178
  98. package/dist/types/Framework/Config/IServerConfig.d.ts +9 -9
  99. package/dist/types/Framework/Config/_error_.d.ts +99 -99
  100. package/dist/types/Framework/Core/ByteTool.d.ts +21 -21
  101. package/dist/types/Framework/Core/Core.d.ts +119 -120
  102. package/dist/types/Framework/Core/Timer.d.ts +16 -16
  103. package/dist/types/Framework/Database/Decorator/AutoIncrement.d.ts +1 -1
  104. package/dist/types/Framework/Database/Decorator/DBCache.d.ts +22 -22
  105. package/dist/types/Framework/Database/Decorator/NotNull.d.ts +1 -1
  106. package/dist/types/Framework/Database/Decorator/PrimaryKey.d.ts +1 -1
  107. package/dist/types/Framework/Database/Decorator/Property.d.ts +57 -57
  108. package/dist/types/Framework/Database/Decorator/Table.d.ts +1 -1
  109. package/dist/types/Framework/Database/Decorator/Type.d.ts +1 -1
  110. package/dist/types/Framework/Database/MSSql/MSSqlManager.d.ts +26 -26
  111. package/dist/types/Framework/Database/Mongo/MongoBaseService.d.ts +116 -116
  112. package/dist/types/Framework/Database/Mongo/MongoManager.d.ts +207 -204
  113. package/dist/types/Framework/Database/Mongo/MongoServiceManager.d.ts +13 -13
  114. package/dist/types/Framework/Database/Mysql/MysqlBaseService.d.ts +34 -34
  115. package/dist/types/Framework/Database/Mysql/MysqlManager.d.ts +30 -30
  116. package/dist/types/Framework/Database/Redis/RedisManager.d.ts +24 -24
  117. package/dist/types/Framework/Decorator/AdminValidate.d.ts +1 -1
  118. package/dist/types/Framework/Decorator/AuthorityValidate.d.ts +2 -2
  119. package/dist/types/Framework/Decorator/CreatorValidate.d.ts +1 -1
  120. package/dist/types/Framework/Decorator/JsonAdminValidate.d.ts +1 -1
  121. package/dist/types/Framework/Decorator/JsonAuthorityValidate.d.ts +2 -2
  122. package/dist/types/Framework/Decorator/JsonCreatorValidate.d.ts +1 -1
  123. package/dist/types/Framework/Decorator/SyncCall.d.ts +12 -12
  124. package/dist/types/Framework/Decorator/SyncCallServer.d.ts +14 -14
  125. package/dist/types/Framework/Logic/CacheTool.d.ts +27 -27
  126. package/dist/types/Framework/Logic/EventTool.d.ts +11 -12
  127. package/dist/types/Framework/Logic/HttpTool.d.ts +19 -19
  128. package/dist/types/Framework/Logic/Log.d.ts +18 -18
  129. package/dist/types/Framework/Logic/SyncQueueTool.d.ts +21 -21
  130. package/dist/types/Framework/Server/ProtoFilter/GoogleProtoFilter.d.ts +9 -9
  131. package/dist/types/Framework/Server/ProtoFilter/IProtoFilter.d.ts +10 -10
  132. package/dist/types/Framework/Server/ProtoFilter/JsonProtoFilter.d.ts +6 -6
  133. package/dist/types/Framework/Server/ProtoFilter/ProtoFactory.d.ts +12 -12
  134. package/dist/types/Framework/Server/RpcWebSocketServer/CgMq.d.ts +59 -59
  135. package/dist/types/Framework/Server/RpcWebSocketServer/IRpc.d.ts +33 -33
  136. package/dist/types/Framework/Server/RpcWebSocketServer/IRpcClientWebSocket.d.ts +34 -34
  137. package/dist/types/Framework/Server/RpcWebSocketServer/IRpcServerWebSocket.d.ts +23 -23
  138. package/dist/types/Framework/Server/SocketServer/IClientSocket.d.ts +16 -18
  139. package/dist/types/Framework/Server/SocketServer/IServerSocket.d.ts +27 -29
  140. package/dist/types/Framework/Server/SocketServer/ISocket.d.ts +78 -81
  141. package/dist/types/Framework/Server/SocketServer/ISocketServer.d.ts +44 -45
  142. package/dist/types/Framework/Server/SocketServer/PacketParser.d.ts +8 -10
  143. package/dist/types/Framework/Server/WebServer/Controller/BaseController.d.ts +34 -34
  144. package/dist/types/Framework/Server/WebServer/Controller/MongoBaseUserController.d.ts +28 -28
  145. package/dist/types/Framework/Server/WebServer/Controller/MysqlBaseUserController.d.ts +27 -27
  146. package/dist/types/Framework/Server/WebServer/Engine/ControllerManager.d.ts +37 -37
  147. package/dist/types/Framework/Server/WebServer/Engine/Engine.d.ts +42 -44
  148. package/dist/types/Framework/Server/WebServer/Engine/RazorJs.d.ts +21 -21
  149. package/dist/types/Framework/Server/WebServer/Engine/Request.d.ts +47 -50
  150. package/dist/types/Framework/Server/WebServer/Engine/Response.d.ts +26 -26
  151. package/dist/types/Framework/Server/WebServer/IWebServer.d.ts +22 -22
  152. package/dist/types/Framework/Server/WebSocketServer/IClientWebSocket.d.ts +17 -17
  153. package/dist/types/Framework/Server/WebSocketServer/IServerWebSocket.d.ts +37 -38
  154. package/dist/types/Framework/Server/WebSocketServer/IWebSocket.d.ts +76 -76
  155. package/dist/types/Framework/Server/WebSocketServer/IWebSocketServer.d.ts +49 -49
  156. package/dist/types/Framework/Service/MongoAccountService.d.ts +62 -62
  157. package/dist/types/Framework/Service/MongoCacheService.d.ts +19 -19
  158. package/dist/types/Framework/Service/MongoUserService.d.ts +31 -31
  159. package/dist/types/Framework/Service/MysqlAccountService.d.ts +67 -67
  160. package/dist/types/Framework/Service/MysqlUserService.d.ts +33 -33
  161. package/dist/types/Framework/Service/ini.d.ts +29 -29
  162. package/dist/types/Framework/ThirdParty/AlipayTool.d.ts +76 -108
  163. package/dist/types/Framework/ThirdParty/Alisms.d.ts +23 -13
  164. package/dist/types/Framework/ThirdParty/AppleTool.d.ts +131 -131
  165. package/dist/types/Framework/ThirdParty/CgRankTool.d.ts +107 -107
  166. package/dist/types/Framework/ThirdParty/EmailTool.d.ts +4 -4
  167. package/dist/types/Framework/ThirdParty/QQTool.d.ts +41 -41
  168. package/dist/types/Framework/ThirdParty/QiniuTool.d.ts +5 -5
  169. package/dist/types/Framework/ThirdParty/Rpc.d.ts +28 -28
  170. package/dist/types/Framework/ThirdParty/WechatTool.d.ts +30 -30
  171. package/dist/types/Framework/cgserver.d.ts +63 -63
  172. package/dist/types/Framework/global.d.ts +45 -45
  173. package/dist/types/Framework/index.d.ts +2 -2
  174. package/dist/types/Framework/index_export_.d.ts +81 -79
  175. package/dist/types/test/test.d.ts +1 -1
  176. package/package.json +8 -4
@@ -1,688 +1,724 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.core = void 0;
4
- let os = require('os');
5
- let request = require('request');
6
- const _ = require("underscore");
7
- const crypto = require("crypto");
8
- const CryptoJS = require("crypto-js");
9
- const ec_key_1 = require("ec-key");
10
- const uuid_1 = require("uuid");
11
- const Log_1 = require("../Logic/Log");
12
- /**
13
- * 一些通用的常用函数,
14
- * 比如格式化字符串,常用加解密,
15
- * 时间计算,类型判断等
16
- */
17
- class core {
18
- /**
19
- * 判断变量是不是对象
20
- * @param param 需要检查的变量
21
- * @returns true为对象
22
- */
23
- static isObject(param) {
24
- return typeof (param) === "object";
25
- }
26
- static isArray(param) {
27
- return param instanceof Array;
28
- }
29
- static isNumber(param) {
30
- return typeof (param) === "number";
31
- }
32
- static isNaN(param) {
33
- return isNaN(param);
34
- }
35
- static isFunction(param) {
36
- return typeof (param) === "function";
37
- }
38
- static isString(param) {
39
- return typeof (param) === "string";
40
- }
41
- static isAsyncFunc(fun) {
42
- if (!this.isFunction(fun)) {
43
- return;
44
- }
45
- return fun[Symbol.toStringTag] === "AsyncFunction";
46
- }
47
- /**
48
- * 深度拷贝
49
- * @param obj
50
- * @returns
51
- */
52
- static clone(obj) {
53
- if (!obj) {
54
- return obj;
55
- }
56
- if (core.isArray(obj)) {
57
- let newArray = new Array();
58
- for (let i = 0, length = obj.length; i < length; ++i) {
59
- newArray[i] = this.clone(obj[i]);
60
- }
61
- return newArray;
62
- }
63
- if (core.isObject(obj)) {
64
- let newObj = new Object();
65
- for (let i in obj) {
66
- newObj[i] = this.clone(obj[i]);
67
- }
68
- return newObj;
69
- }
70
- return obj;
71
- }
72
- //合并但是不改变dest
73
- static merge(dest, src) {
74
- let t = core.clone(dest);
75
- if (!src) {
76
- return t;
77
- }
78
- if (core.isArray(src)) {
79
- t = t || [];
80
- let tlen = t.length;
81
- for (let i = 0, len = src.length; i < len; ++i) {
82
- let value = src[i];
83
- if (core.isFunction(value)) {
84
- continue;
85
- }
86
- if (core.isArray(value) || core.isObject(value)) {
87
- if (i < tlen) {
88
- t[i] = core.merge(null, value);
89
- }
90
- else {
91
- t.push(core.merge(null, value));
92
- }
93
- }
94
- else {
95
- if (i < tlen) {
96
- t[i] = value;
97
- }
98
- else {
99
- t.push(value);
100
- }
101
- }
102
- }
103
- }
104
- else if (core.isObject(src)) {
105
- t = t || {};
106
- for (let key in src) {
107
- let value = src[key];
108
- if (core.isFunction(value)) {
109
- continue;
110
- }
111
- if (core.isArray(value) || core.isObject(value)) {
112
- t[key] = core.merge(null, value);
113
- }
114
- else {
115
- t[key] = value;
116
- }
117
- }
118
- }
119
- else {
120
- t = src;
121
- }
122
- return t;
123
- }
124
- //只是取出template里面已经有的部分
125
- static getExit(template, src) {
126
- if (!src || !template) {
127
- return {};
128
- }
129
- let t = {};
130
- for (let key in src) {
131
- if (template[key] === undefined) {
132
- continue;
133
- }
134
- let value = src[key];
135
- if (core.isFunction(value)) {
136
- continue;
137
- }
138
- if (core.isArray(value) || core.isObject(value)) {
139
- t[key] = core.getExit(template[key], value);
140
- }
141
- else {
142
- t[key] = value;
143
- }
144
- }
145
- return t;
146
- }
147
- static toArray(table) {
148
- let array = [];
149
- for (let key in table) {
150
- if (core.isFunction(table[key])) {
151
- continue;
152
- }
153
- array.push(key);
154
- array.push(table[key]);
155
- }
156
- return array;
157
- }
158
- static foreach(items, callback) {
159
- if (!items || !callback) {
160
- return;
161
- }
162
- if (core.isNumber(items)) {
163
- for (let i = 0; i < items; ++i) {
164
- let ret = callback(i);
165
- if (ret) {
166
- return;
167
- }
168
- }
169
- }
170
- else if (core.isString(items)) {
171
- for (let i = 0, length = items.length; i < length; i++) {
172
- let ret = callback(i, items.charAt(i));
173
- if (ret) {
174
- return;
175
- }
176
- }
177
- }
178
- else if (core.isArray(items)) {
179
- for (let i = 0, length = items.length; i < length; ++i) {
180
- let ret = callback(i, items[i]);
181
- if (ret) {
182
- return;
183
- }
184
- }
185
- }
186
- else if (core.isObject(items)) {
187
- for (let key in items) {
188
- let ret = callback(key, items[key]);
189
- if (ret) {
190
- return;
191
- }
192
- }
193
- }
194
- return;
195
- }
196
- static getLength(items) {
197
- if (core.isArray(items)) {
198
- return items.length;
199
- }
200
- if (core.isObject(items)) {
201
- let len = 0;
202
- core.foreach(items, () => {
203
- ++len;
204
- });
205
- return len;
206
- }
207
- return 0;
208
- }
209
- static char2buf(str) {
210
- let out = new ArrayBuffer(str.length * 2);
211
- let u16a = new Uint16Array(out);
212
- let strs = str.split("");
213
- for (let i = 0; i < strs.length; i++) {
214
- u16a[i] = strs[i].charCodeAt();
215
- }
216
- return out;
217
- }
218
- static array2arraybuffer(array) {
219
- let b = new ArrayBuffer(array.length);
220
- let v = new DataView(b, 0);
221
- for (let i = 0; i < array.length; i++) {
222
- v.setUint8(i, array[i]);
223
- }
224
- return b;
225
- }
226
- static arraybuffer2array(buffer) {
227
- let v = new DataView(buffer, 0);
228
- let a = new Uint8Array(v.byteLength);
229
- for (let i = 0; i < v.byteLength; i++) {
230
- a[i] = v.getUint8(i);
231
- }
232
- return a;
233
- }
234
- static firstCharUpCase(str) {
235
- let reg = /\b(\w)|\s(\w)/g;
236
- str = str.toLowerCase();
237
- return str.replace(reg, function (m) { return m.toUpperCase(); });
238
- }
239
- static convertIntToUInt8Array(num) {
240
- let c2 = num % 256;
241
- let c1 = Math.floor(num / 256);
242
- let arr = new Uint8Array(2);
243
- arr[0] = c1;
244
- arr[1] = c2;
245
- return arr;
246
- }
247
- static convertUInt8ArrayToInt(array) {
248
- if (array.length != 2) {
249
- return 0;
250
- }
251
- return array[0] * 256 + array[1];
252
- }
253
- //从一个数组里面按照下标和长度的方式去获取另一个数组,至少返回空数组
254
- //包含start
255
- static getArrayFromArray(data, start, l) {
256
- let len = data.length;
257
- start = start || 0; //默认最开始
258
- l = l || len; //默认到最后
259
- if (start >= len) {
260
- return new Uint8Array();
261
- }
262
- let arr = new Uint8Array(l);
263
- for (let i = start; i < start + l && i < len; ++i) {
264
- arr[i] = data[i];
265
- }
266
- return arr;
267
- }
268
- static blobToArrayBuffer(data, callback) {
269
- let fileReader = new FileReader();
270
- fileReader.onload = function (progressEvent) {
271
- if (callback) {
272
- callback(this.result);
273
- }
274
- };
275
- fileReader.readAsArrayBuffer(data);
276
- }
277
- static format = function (src, formatStr) {
278
- if (core.isString(src)) {
279
- let args = Array.prototype.slice.call(arguments, 1);
280
- return src.replace(/\{(\d+)\}/g, function (m, i) {
281
- return args[i];
282
- });
283
- }
284
- else {
285
- if (this.isNumber(src)) {
286
- src = new Date(src);
287
- }
288
- let str = formatStr;
289
- let Week = ['日', '一', '二', '三', '四', '五', '六'];
290
- let month = src.getMonth() + 1;
291
- let year = src.getFullYear();
292
- let date = src.getDate();
293
- let hour = src.getHours();
294
- let min = src.getMinutes();
295
- let sec = src.getSeconds();
296
- let day = src.getDay();
297
- str = str.replace(/yyyy|YYYY/, year);
298
- str = str.replace(/yy|YY/, (year % 100) > 9 ? (year % 100).toString() : '0' + (year % 100));
299
- str = str.replace(/MM/, month > 9 ? month.toString() : '0' + month);
300
- str = str.replace(/M/g, month);
301
- str = str.replace(/w|W/g, Week[day]);
302
- str = str.replace(/dd|DD/, date > 9 ? date.toString() : '0' + date);
303
- str = str.replace(/d|D/g, date);
304
- str = str.replace(/hh|HH/, hour > 9 ? hour.toString() : '0' + hour);
305
- str = str.replace(/h|H/g, hour);
306
- str = str.replace(/mm/, min > 9 ? min.toString() : '0' + min);
307
- str = str.replace(/m/g, min);
308
- str = str.replace(/ss|SS/, sec > 9 ? sec.toString() : '0' + sec);
309
- str = str.replace(/s|S/g, sec);
310
- return str;
311
- }
312
- };
313
- /**
314
- * 字符串中间保密
315
- * @param str
316
- */
317
- static fuzzy(str) {
318
- if (!str) {
319
- return str;
320
- }
321
- if (str.length <= 1) {
322
- return str;
323
- }
324
- if (str.length == 2) {
325
- return str[0] + "*";
326
- }
327
- let first = str[0];
328
- let last = str[str.length - 1];
329
- let newStr = first;
330
- for (let i = 0; i < str.length - 2; ++i) {
331
- newStr += "*";
332
- }
333
- newStr += last;
334
- return newStr;
335
- }
336
- static md5(str, inputEncoding = null, encoding = "hex") {
337
- let _md5 = crypto.createHash('md5');
338
- let hash = null;
339
- if (inputEncoding) {
340
- hash = _md5.update(str, inputEncoding);
341
- }
342
- else {
343
- hash = _md5.update(str);
344
- }
345
- let md5_str = hash.digest(encoding);
346
- return md5_str;
347
- }
348
- static sha1(str, inputEncoding = null, encoding = "hex") {
349
- let _sha1 = crypto.createHash('sha1');
350
- let hash = null;
351
- if (inputEncoding) {
352
- hash = _sha1.update(str, inputEncoding);
353
- }
354
- else {
355
- hash = _sha1.update(str);
356
- }
357
- let sha1_str = hash.digest(encoding);
358
- return sha1_str;
359
- }
360
- static getLocalIP = function () {
361
- let iptable = {};
362
- let ifaces = os.networkInterfaces();
363
- for (let dev in ifaces) {
364
- ifaces[dev].forEach(function (details, alias) {
365
- if ((details.family == 'IPv4') && (details.internal == false)) {
366
- iptable['localIP'] = details.address;
367
- }
368
- });
369
- }
370
- return iptable['localIP'];
371
- };
372
- static getIP = async function () {
373
- return new Promise((resolve, reject) => {
374
- request('http://ip.chinaz.com/getip.aspx', function (error, response, body) {
375
- if (!error && response.statusCode == 200) {
376
- body = eval('(' + body + ')');
377
- resolve(body.ip);
378
- }
379
- else {
380
- console.error("can not get correct ip!");
381
- resolve(null);
382
- }
383
- });
384
- });
385
- };
386
- /**
387
- * 判断是否是手机号
388
- * @param phone 手机号
389
- */
390
- static isPhoneNo(phone) {
391
- let reg = /^1[3-9]\d{9}$/; //验证规则
392
- let flag = reg.test(phone); //true
393
- return flag;
394
- }
395
- /**
396
- * 判断是否是email
397
- * @param email
398
- */
399
- static isEmail(email) {
400
- if (!email) {
401
- return false;
402
- }
403
- var regu = "^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*))@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2}|net|com|gov|mil|org|edu|int|name|asia)$";
404
- var re = new RegExp(regu);
405
- if (email.search(re) == -1) {
406
- return false;
407
- }
408
- return true;
409
- }
410
- /**
411
- * 根据概率分布获取概率分布的下标
412
- * @param probabilitys 概率分布列表
413
- * @param totalProbability 总概率
414
- */
415
- static getRandomIndex(probabilitys, totalProbability) {
416
- let result = 0;
417
- let random = 0;
418
- totalProbability = totalProbability || -1;
419
- if (totalProbability < 0) {
420
- totalProbability = eval(probabilitys.join("+"));
421
- }
422
- if (totalProbability > 1) {
423
- random = _.random(totalProbability);
424
- }
425
- else {
426
- random = Math.random();
427
- }
428
- let value = 0;
429
- for (let index = 0; index < probabilitys.length; ++index) {
430
- value += probabilitys[index];
431
- if (random < value) {
432
- result = index;
433
- break;
434
- }
435
- }
436
- return result;
437
- }
438
- /**
439
- * 检查是否是闰年
440
- * @param year
441
- */
442
- static checkLeap(year) {
443
- if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
444
- return true;
445
- }
446
- else {
447
- return false;
448
- }
449
- }
450
- /**
451
- * 获取几月一共有多少天
452
- * @param year
453
- * @param month
454
- */
455
- static getMonthDays(year, month) {
456
- let months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
457
- if (this.checkLeap(year)) {
458
- months[1] = 29;
459
- }
460
- return months[month - 1];
461
- }
462
- /**
463
- * 获取今日开始的时间
464
- */
465
- static getTodayStartTime() {
466
- let now = new Date();
467
- let time = now.getTime();
468
- time = time - (now.getHours() * 60 * 60 * 1000 + now.getMinutes() * 60 * 1000 + now.getSeconds() * 1000 + now.getMilliseconds());
469
- return time;
470
- }
471
- /**
472
- * 获取某个时间的开始时间
473
- * @param time 时间戳
474
- * @returns
475
- */
476
- static getStartTime(time) {
477
- let now = null;
478
- if (time) {
479
- now = new Date(time);
480
- }
481
- else {
482
- now = new Date();
483
- }
484
- time = now.getTime();
485
- time = time - (now.getHours() * 60 * 60 * 1000 + now.getMinutes() * 60 * 1000 + now.getSeconds() * 1000 + now.getMilliseconds());
486
- return time;
487
- }
488
- static getLastMonthStartTime() {
489
- let now = new Date();
490
- let time = null;
491
- if (now.getMonth() != 0) {
492
- time = new Date(now.getFullYear(), now.getMonth() - 1);
493
- }
494
- else {
495
- time = new Date(now.getFullYear() - 1, 12);
496
- }
497
- return time.getTime();
498
- }
499
- static getCurMonthStartTime() {
500
- let now = new Date();
501
- let time = new Date(now.getFullYear(), now.getMonth());
502
- return time.getTime();
503
- }
504
- static getNextWeekStartTime() {
505
- let one_day = 24 * 60 * 60 * 1000;
506
- let time = this.getTodayStartTime();
507
- let day = new Date().getDay();
508
- return time + (7 - (day - 1)) * one_day;
509
- }
510
- static getCurWeekStartTime() {
511
- let one_day = 24 * 60 * 60 * 1000;
512
- let time = this.getTodayStartTime();
513
- let day = new Date().getDay();
514
- return time - (day - 1) * one_day;
515
- }
516
- static isSameMonth(src_time, target_time) {
517
- let src_date = new Date(src_time);
518
- let target_date = new Date(target_time);
519
- if (src_date.getFullYear() != target_date.getFullYear()) {
520
- return false;
521
- }
522
- return src_date.getMonth() == target_date.getMonth();
523
- }
524
- static isSameDay(src_time, target_time) {
525
- let oneDayTime = 1000 * 60 * 60 * 24;
526
- let eight_time = 1000 * 60 * 60 * 8;
527
- let old_count = Math.floor((src_time + eight_time) / oneDayTime);
528
- let now_other = Math.floor((target_time + eight_time) / oneDayTime);
529
- return old_count == now_other;
530
- }
531
- /**
532
- * 两个日期是否是同一周
533
- * 思路: 因为1970年1月1 是周4 所以(天数+4)/7 取整 就是周数 如果相同就是同一周反之就不是
534
- * @param old
535
- * @param now
536
- */
537
- static isSameWeek(src_time, target_time) {
538
- let oneDayTime = 1000 * 60 * 60 * 24;
539
- let eight_time = 1000 * 60 * 60 * 8;
540
- let old_count = Math.floor((src_time + eight_time) / oneDayTime);
541
- let now_other = Math.floor((target_time + eight_time) / oneDayTime);
542
- return Math.floor((old_count + 4) / 7) == Math.floor((now_other + 4) / 7);
543
- }
544
- static sum(datas) {
545
- let total = 0;
546
- for (let v of datas) {
547
- total += v;
548
- }
549
- return total;
550
- }
551
- /**
552
- * 转球为全球数字格式,三位数一个逗号
553
- * @param num
554
- */
555
- static convertToGlobalStr(num) {
556
- if (!num) {
557
- return num + "";
558
- }
559
- if (num < 1000) {
560
- return num + "";
561
- }
562
- let str = "";
563
- while (true) {
564
- let n = num % 1000;
565
- if (n > 99) {
566
- str = "," + n + str;
567
- }
568
- else if (n > 9) {
569
- str = ",0" + n + str;
570
- }
571
- else {
572
- str = ",00" + n + str;
573
- }
574
- num = Math.floor(num / 1000);
575
- if (num < 1000) {
576
- str = num + str;
577
- break;
578
- }
579
- }
580
- return str;
581
- }
582
- /**
583
- * 暂停多少毫秒
584
- * @param milliseconds 毫秒
585
- * @returns
586
- */
587
- static sleep(milliseconds) {
588
- return new Promise((resolve) => {
589
- setTimeout(() => {
590
- resolve(null);
591
- }, milliseconds);
592
- });
593
- }
594
- static async safeCall(func, thisArg = null, ...params) {
595
- if (!func || !core.isFunction(func)) {
596
- return;
597
- }
598
- try {
599
- let rs = undefined;
600
- if (core.isAsyncFunc(func)) {
601
- if (thisArg) {
602
- rs = await func.call(thisArg, ...params).catch((reason) => {
603
- Log_1.gLog.error(reason);
604
- rs = { errcode: { id: 1008611, des: "failed" } };
605
- });
606
- }
607
- else {
608
- rs = await func(...params).catch((reason) => {
609
- Log_1.gLog.error(reason);
610
- rs = { errcode: { id: 1008612, des: "failed" } };
611
- });
612
- }
613
- }
614
- else {
615
- if (thisArg) {
616
- rs = func.call(thisArg, ...params);
617
- }
618
- else {
619
- rs = func(...params);
620
- }
621
- }
622
- return rs;
623
- }
624
- catch (e) {
625
- Log_1.gLog.error(e.stack);
626
- return { errcode: { id: 1008613, des: "failed" } };
627
- }
628
- }
629
- //判断当前日期为当年第几周
630
- static getYearWeek(time) {
631
- //date1是当前日期
632
- //date2是当年第一天
633
- //d是当前日期是今年第多少天
634
- //用d + 当前年的第一天的周差距的和在除以7就是本年第几周
635
- let tar = new Date(time);
636
- let start = new Date(tar.getFullYear(), 0, 1);
637
- let days = Math.round((tar.valueOf() - start.valueOf()) / 86400000);
638
- return Math.ceil((days + ((start.getDay() + 1) - 1)) / 7);
639
- }
640
- static toBase64(content) {
641
- var wordArray = CryptoJS.enc.Hex.parse(content);
642
- var base64Str = CryptoJS.enc.Base64.stringify(wordArray);
643
- return base64Str;
644
- }
645
- static aesEncode(content, key, iv) {
646
- let _iv = CryptoJS.enc.Utf8.parse(iv);
647
- let etext = CryptoJS.AES.encrypt(content, key, {
648
- iv: _iv,
649
- mode: CryptoJS.mode.CBC,
650
- padding: CryptoJS.pad.Pkcs7
651
- }).toString();
652
- return etext;
653
- }
654
- static aesDecode(base64_str, key, iv) {
655
- let _iv = CryptoJS.enc.Utf8.parse(iv);
656
- let dtext = CryptoJS.AES.decrypt(base64_str, key, {
657
- iv: _iv,
658
- mode: CryptoJS.mode.CBC,
659
- padding: CryptoJS.pad.Pkcs7
660
- }).toString(CryptoJS.enc.Utf8);
661
- return dtext;
662
- }
663
- static getUuid() {
664
- let id = (0, uuid_1.v4)();
665
- return id;
666
- }
667
- static signatureBase64(private_key, rsa_name, payload) {
668
- // Create an Elliptic Curve Digital Signature Algorithm (ECDSA) object using the private key.
669
- const key = new ec_key_1.default(private_key, 'pem');
670
- // Set up the cryptographic format used to sign the key with the SHA-256 hashing algorithm.
671
- const cryptoSign = key.createSign(rsa_name);
672
- // Add the payload string to sign.
673
- cryptoSign.update(payload);
674
- /*
675
- The Node.js crypto library creates a DER-formatted binary value signature,
676
- and then base-64 encodes it to create the string that you will use in StoreKit.
677
- */
678
- const signature = cryptoSign.sign('base64');
679
- return signature;
680
- }
681
- static signatureVerifyBase64(signature, private_key, rsa_name, payload) {
682
- // Create an Elliptic Curve Digital Signature Algorithm (ECDSA) object using the private key.
683
- let key = new ec_key_1.default(private_key, 'pem');
684
- let verificationResult = key.createVerify(rsa_name).update(payload).verify(signature, 'base64');
685
- return verificationResult;
686
- }
687
- }
688
- exports.core = core;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.core = void 0;
40
+ let os = require('os');
41
+ let request = require('request');
42
+ const _ = __importStar(require("underscore"));
43
+ const crypto = __importStar(require("crypto"));
44
+ const CryptoJS = __importStar(require("crypto-js"));
45
+ const ec_key_1 = __importDefault(require("ec-key"));
46
+ const uuid_1 = require("uuid");
47
+ const Log_1 = require("../Logic/Log");
48
+ /**
49
+ * 一些通用的常用函数,
50
+ * 比如格式化字符串,常用加解密,
51
+ * 时间计算,类型判断等
52
+ */
53
+ class core {
54
+ /**
55
+ * 判断变量是不是对象
56
+ * @param param 需要检查的变量
57
+ * @returns true为对象
58
+ */
59
+ static isObject(param) {
60
+ return typeof (param) === "object";
61
+ }
62
+ static isArray(param) {
63
+ return param instanceof Array;
64
+ }
65
+ static isNumber(param) {
66
+ return typeof (param) === "number";
67
+ }
68
+ static isNaN(param) {
69
+ return isNaN(param);
70
+ }
71
+ static isFunction(param) {
72
+ return typeof (param) === "function";
73
+ }
74
+ static isString(param) {
75
+ return typeof (param) === "string";
76
+ }
77
+ static isAsyncFunc(fun) {
78
+ if (!this.isFunction(fun)) {
79
+ return;
80
+ }
81
+ return fun[Symbol.toStringTag] === "AsyncFunction";
82
+ }
83
+ /**
84
+ * 深度拷贝
85
+ * @param obj
86
+ * @returns
87
+ */
88
+ static clone(obj) {
89
+ if (!obj) {
90
+ return obj;
91
+ }
92
+ if (core.isArray(obj)) {
93
+ let newArray = new Array();
94
+ for (let i = 0, length = obj.length; i < length; ++i) {
95
+ newArray[i] = this.clone(obj[i]);
96
+ }
97
+ return newArray;
98
+ }
99
+ if (core.isObject(obj)) {
100
+ let newObj = new Object();
101
+ for (let i in obj) {
102
+ newObj[i] = this.clone(obj[i]);
103
+ }
104
+ return newObj;
105
+ }
106
+ return obj;
107
+ }
108
+ //合并但是不改变dest
109
+ static merge(dest, src) {
110
+ let t = core.clone(dest);
111
+ if (!src) {
112
+ return t;
113
+ }
114
+ if (core.isArray(src)) {
115
+ t = t || [];
116
+ let tlen = t.length;
117
+ for (let i = 0, len = src.length; i < len; ++i) {
118
+ let value = src[i];
119
+ if (core.isFunction(value)) {
120
+ continue;
121
+ }
122
+ if (core.isArray(value) || core.isObject(value)) {
123
+ if (i < tlen) {
124
+ t[i] = core.merge(null, value);
125
+ }
126
+ else {
127
+ t.push(core.merge(null, value));
128
+ }
129
+ }
130
+ else {
131
+ if (i < tlen) {
132
+ t[i] = value;
133
+ }
134
+ else {
135
+ t.push(value);
136
+ }
137
+ }
138
+ }
139
+ }
140
+ else if (core.isObject(src)) {
141
+ t = t || {};
142
+ for (let key in src) {
143
+ let value = src[key];
144
+ if (core.isFunction(value)) {
145
+ continue;
146
+ }
147
+ if (core.isArray(value) || core.isObject(value)) {
148
+ t[key] = core.merge(null, value);
149
+ }
150
+ else {
151
+ t[key] = value;
152
+ }
153
+ }
154
+ }
155
+ else {
156
+ t = src;
157
+ }
158
+ return t;
159
+ }
160
+ //只是取出template里面已经有的部分
161
+ static getExit(template, src) {
162
+ if (!src || !template) {
163
+ return {};
164
+ }
165
+ let t = {};
166
+ for (let key in src) {
167
+ if (template[key] === undefined) {
168
+ continue;
169
+ }
170
+ let value = src[key];
171
+ if (core.isFunction(value)) {
172
+ continue;
173
+ }
174
+ if (core.isArray(value) || core.isObject(value)) {
175
+ t[key] = core.getExit(template[key], value);
176
+ }
177
+ else {
178
+ t[key] = value;
179
+ }
180
+ }
181
+ return t;
182
+ }
183
+ static toArray(table) {
184
+ let array = [];
185
+ for (let key in table) {
186
+ if (core.isFunction(table[key])) {
187
+ continue;
188
+ }
189
+ array.push(key);
190
+ array.push(table[key]);
191
+ }
192
+ return array;
193
+ }
194
+ static foreach(items, callback) {
195
+ if (!items || !callback) {
196
+ return;
197
+ }
198
+ if (core.isNumber(items)) {
199
+ for (let i = 0; i < items; ++i) {
200
+ let ret = callback(i);
201
+ if (ret) {
202
+ return;
203
+ }
204
+ }
205
+ }
206
+ else if (core.isString(items)) {
207
+ for (let i = 0, length = items.length; i < length; i++) {
208
+ let ret = callback(i, items.charAt(i));
209
+ if (ret) {
210
+ return;
211
+ }
212
+ }
213
+ }
214
+ else if (core.isArray(items)) {
215
+ for (let i = 0, length = items.length; i < length; ++i) {
216
+ let ret = callback(i, items[i]);
217
+ if (ret) {
218
+ return;
219
+ }
220
+ }
221
+ }
222
+ else if (core.isObject(items)) {
223
+ for (let key in items) {
224
+ let ret = callback(key, items[key]);
225
+ if (ret) {
226
+ return;
227
+ }
228
+ }
229
+ }
230
+ return;
231
+ }
232
+ static getLength(items) {
233
+ if (core.isArray(items)) {
234
+ return items.length;
235
+ }
236
+ if (core.isObject(items)) {
237
+ let len = 0;
238
+ core.foreach(items, () => {
239
+ ++len;
240
+ });
241
+ return len;
242
+ }
243
+ return 0;
244
+ }
245
+ static char2buf(str) {
246
+ let out = new ArrayBuffer(str.length * 2);
247
+ let u16a = new Uint16Array(out);
248
+ let strs = str.split("");
249
+ for (let i = 0; i < strs.length; i++) {
250
+ u16a[i] = strs[i].charCodeAt();
251
+ }
252
+ return out;
253
+ }
254
+ static array2arraybuffer(array) {
255
+ let b = new ArrayBuffer(array.length);
256
+ let v = new DataView(b, 0);
257
+ for (let i = 0; i < array.length; i++) {
258
+ v.setUint8(i, array[i]);
259
+ }
260
+ return b;
261
+ }
262
+ static arraybuffer2array(buffer) {
263
+ let v = new DataView(buffer, 0);
264
+ let a = new Uint8Array(v.byteLength);
265
+ for (let i = 0; i < v.byteLength; i++) {
266
+ a[i] = v.getUint8(i);
267
+ }
268
+ return a;
269
+ }
270
+ static firstCharUpCase(str) {
271
+ let reg = /\b(\w)|\s(\w)/g;
272
+ str = str.toLowerCase();
273
+ return str.replace(reg, function (m) { return m.toUpperCase(); });
274
+ }
275
+ static convertIntToUInt8Array(num) {
276
+ let c2 = num % 256;
277
+ let c1 = Math.floor(num / 256);
278
+ let arr = new Uint8Array(2);
279
+ arr[0] = c1;
280
+ arr[1] = c2;
281
+ return arr;
282
+ }
283
+ static convertUInt8ArrayToInt(array) {
284
+ if (array.length != 2) {
285
+ return 0;
286
+ }
287
+ return array[0] * 256 + array[1];
288
+ }
289
+ //从一个数组里面按照下标和长度的方式去获取另一个数组,至少返回空数组
290
+ //包含start
291
+ static getArrayFromArray(data, start, l) {
292
+ let len = data.length;
293
+ start = start || 0; //默认最开始
294
+ l = l || len; //默认到最后
295
+ if (start >= len) {
296
+ return new Uint8Array();
297
+ }
298
+ let arr = new Uint8Array(l);
299
+ for (let i = start; i < start + l && i < len; ++i) {
300
+ arr[i] = data[i];
301
+ }
302
+ return arr;
303
+ }
304
+ static blobToArrayBuffer(data, callback) {
305
+ let fileReader = new FileReader();
306
+ fileReader.onload = function (progressEvent) {
307
+ if (callback) {
308
+ callback(this.result);
309
+ }
310
+ };
311
+ fileReader.readAsArrayBuffer(data);
312
+ }
313
+ static format = function (src, formatStr) {
314
+ if (core.isString(src)) {
315
+ let args = Array.prototype.slice.call(arguments, 1);
316
+ return src.replace(/\{(\d+)\}/g, function (m, i) {
317
+ return args[i];
318
+ });
319
+ }
320
+ else {
321
+ if (this.isNumber(src)) {
322
+ src = new Date(src);
323
+ }
324
+ let str = formatStr;
325
+ let Week = ['日', '一', '二', '三', '四', '五', '六'];
326
+ let month = src.getMonth() + 1;
327
+ let year = src.getFullYear();
328
+ let date = src.getDate();
329
+ let hour = src.getHours();
330
+ let min = src.getMinutes();
331
+ let sec = src.getSeconds();
332
+ let day = src.getDay();
333
+ str = str.replace(/yyyy|YYYY/, year);
334
+ str = str.replace(/yy|YY/, (year % 100) > 9 ? (year % 100).toString() : '0' + (year % 100));
335
+ str = str.replace(/MM/, month > 9 ? month.toString() : '0' + month);
336
+ str = str.replace(/M/g, month);
337
+ str = str.replace(/w|W/g, Week[day]);
338
+ str = str.replace(/dd|DD/, date > 9 ? date.toString() : '0' + date);
339
+ str = str.replace(/d|D/g, date);
340
+ str = str.replace(/hh|HH/, hour > 9 ? hour.toString() : '0' + hour);
341
+ str = str.replace(/h|H/g, hour);
342
+ str = str.replace(/mm/, min > 9 ? min.toString() : '0' + min);
343
+ str = str.replace(/m/g, min);
344
+ str = str.replace(/ss|SS/, sec > 9 ? sec.toString() : '0' + sec);
345
+ str = str.replace(/s|S/g, sec);
346
+ return str;
347
+ }
348
+ };
349
+ /**
350
+ * 字符串中间保密
351
+ * @param str
352
+ */
353
+ static fuzzy(str) {
354
+ if (!str) {
355
+ return str;
356
+ }
357
+ if (str.length <= 1) {
358
+ return str;
359
+ }
360
+ if (str.length == 2) {
361
+ return str[0] + "*";
362
+ }
363
+ let first = str[0];
364
+ let last = str[str.length - 1];
365
+ let newStr = first;
366
+ for (let i = 0; i < str.length - 2; ++i) {
367
+ newStr += "*";
368
+ }
369
+ newStr += last;
370
+ return newStr;
371
+ }
372
+ static md5(str, inputEncoding = null, encoding = "hex") {
373
+ let _md5 = crypto.createHash('md5');
374
+ let hash = null;
375
+ if (inputEncoding) {
376
+ hash = _md5.update(str, inputEncoding);
377
+ }
378
+ else {
379
+ hash = _md5.update(str);
380
+ }
381
+ let md5_str = hash.digest(encoding);
382
+ return md5_str;
383
+ }
384
+ static sha1(str, inputEncoding = null, encoding = "hex") {
385
+ let _sha1 = crypto.createHash('sha1');
386
+ let hash = null;
387
+ if (inputEncoding) {
388
+ hash = _sha1.update(str, inputEncoding);
389
+ }
390
+ else {
391
+ hash = _sha1.update(str);
392
+ }
393
+ let sha1_str = hash.digest(encoding);
394
+ return sha1_str;
395
+ }
396
+ static getLocalIP = function () {
397
+ let iptable = {};
398
+ let ifaces = os.networkInterfaces();
399
+ for (let dev in ifaces) {
400
+ ifaces[dev].forEach(function (details, alias) {
401
+ if ((details.family == 'IPv4') && (details.internal == false)) {
402
+ iptable['localIP'] = details.address;
403
+ }
404
+ });
405
+ }
406
+ return iptable['localIP'];
407
+ };
408
+ static getIP = async function () {
409
+ return new Promise((resolve, reject) => {
410
+ request('http://ip.chinaz.com/getip.aspx', function (error, response, body) {
411
+ if (!error && response.statusCode == 200) {
412
+ body = eval('(' + body + ')');
413
+ resolve(body.ip);
414
+ }
415
+ else {
416
+ console.error("can not get correct ip!");
417
+ resolve(null);
418
+ }
419
+ });
420
+ });
421
+ };
422
+ /**
423
+ * 判断是否是手机号
424
+ * @param phone 手机号
425
+ */
426
+ static isPhoneNo(phone) {
427
+ let reg = /^1[3-9]\d{9}$/; //验证规则
428
+ let flag = reg.test(phone); //true
429
+ return flag;
430
+ }
431
+ /**
432
+ * 判断是否是email
433
+ * @param email
434
+ */
435
+ static isEmail(email) {
436
+ if (!email) {
437
+ return false;
438
+ }
439
+ var regu = "^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*))@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2}|net|com|gov|mil|org|edu|int|name|asia)$";
440
+ var re = new RegExp(regu);
441
+ if (email.search(re) == -1) {
442
+ return false;
443
+ }
444
+ return true;
445
+ }
446
+ /**
447
+ * 根据概率分布获取概率分布的下标
448
+ * @param probabilitys 概率分布列表
449
+ * @param totalProbability 总概率
450
+ */
451
+ static getRandomIndex(probabilitys, totalProbability) {
452
+ let result = 0;
453
+ let random = 0;
454
+ totalProbability = totalProbability || -1;
455
+ if (totalProbability < 0) {
456
+ totalProbability = eval(probabilitys.join("+"));
457
+ }
458
+ if (totalProbability > 1) {
459
+ random = _.random(totalProbability);
460
+ }
461
+ else {
462
+ random = Math.random();
463
+ }
464
+ let value = 0;
465
+ for (let index = 0; index < probabilitys.length; ++index) {
466
+ value += probabilitys[index];
467
+ if (random < value) {
468
+ result = index;
469
+ break;
470
+ }
471
+ }
472
+ return result;
473
+ }
474
+ /**
475
+ * 检查是否是闰年
476
+ * @param year
477
+ */
478
+ static checkLeap(year) {
479
+ if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
480
+ return true;
481
+ }
482
+ else {
483
+ return false;
484
+ }
485
+ }
486
+ /**
487
+ * 获取几月一共有多少天
488
+ * @param year
489
+ * @param month
490
+ */
491
+ static getMonthDays(year, month) {
492
+ let months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
493
+ if (this.checkLeap(year)) {
494
+ months[1] = 29;
495
+ }
496
+ return months[month - 1];
497
+ }
498
+ /**
499
+ * 获取今日开始的时间
500
+ */
501
+ static getTodayStartTime() {
502
+ let now = new Date();
503
+ let time = now.getTime();
504
+ time = time - (now.getHours() * 60 * 60 * 1000 + now.getMinutes() * 60 * 1000 + now.getSeconds() * 1000 + now.getMilliseconds());
505
+ return time;
506
+ }
507
+ /**
508
+ * 获取某个时间的开始时间
509
+ * @param time 时间戳
510
+ * @returns
511
+ */
512
+ static getStartTime(time) {
513
+ let now = null;
514
+ if (time) {
515
+ now = new Date(time);
516
+ }
517
+ else {
518
+ now = new Date();
519
+ }
520
+ time = now.getTime();
521
+ time = time - (now.getHours() * 60 * 60 * 1000 + now.getMinutes() * 60 * 1000 + now.getSeconds() * 1000 + now.getMilliseconds());
522
+ return time;
523
+ }
524
+ static getLastMonthStartTime() {
525
+ let now = new Date();
526
+ let time = null;
527
+ if (now.getMonth() != 0) {
528
+ time = new Date(now.getFullYear(), now.getMonth() - 1);
529
+ }
530
+ else {
531
+ time = new Date(now.getFullYear() - 1, 12);
532
+ }
533
+ return time.getTime();
534
+ }
535
+ static getCurMonthStartTime() {
536
+ let now = new Date();
537
+ let time = new Date(now.getFullYear(), now.getMonth());
538
+ return time.getTime();
539
+ }
540
+ static getNextWeekStartTime() {
541
+ let one_day = 24 * 60 * 60 * 1000;
542
+ let time = this.getTodayStartTime();
543
+ let day = new Date().getDay();
544
+ return time + (7 - (day - 1)) * one_day;
545
+ }
546
+ static getCurWeekStartTime() {
547
+ let one_day = 24 * 60 * 60 * 1000;
548
+ let time = this.getTodayStartTime();
549
+ let day = new Date().getDay();
550
+ return time - (day - 1) * one_day;
551
+ }
552
+ static isSameMonth(src_time, target_time) {
553
+ let src_date = new Date(src_time);
554
+ let target_date = new Date(target_time);
555
+ if (src_date.getFullYear() != target_date.getFullYear()) {
556
+ return false;
557
+ }
558
+ return src_date.getMonth() == target_date.getMonth();
559
+ }
560
+ static isSameDay(src_time, target_time) {
561
+ let oneDayTime = 1000 * 60 * 60 * 24;
562
+ let eight_time = 1000 * 60 * 60 * 8;
563
+ let old_count = Math.floor((src_time + eight_time) / oneDayTime);
564
+ let now_other = Math.floor((target_time + eight_time) / oneDayTime);
565
+ return old_count == now_other;
566
+ }
567
+ /**
568
+ * 两个日期是否是同一周
569
+ * 思路: 因为1970年1月1 是周4 所以(天数+4)/7 取整 就是周数 如果相同就是同一周反之就不是
570
+ * @param old
571
+ * @param now
572
+ */
573
+ static isSameWeek(src_time, target_time) {
574
+ let oneDayTime = 1000 * 60 * 60 * 24;
575
+ let eight_time = 1000 * 60 * 60 * 8;
576
+ let old_count = Math.floor((src_time + eight_time) / oneDayTime);
577
+ let now_other = Math.floor((target_time + eight_time) / oneDayTime);
578
+ return Math.floor((old_count + 4) / 7) == Math.floor((now_other + 4) / 7);
579
+ }
580
+ static sum(datas) {
581
+ let total = 0;
582
+ for (let v of datas) {
583
+ total += v;
584
+ }
585
+ return total;
586
+ }
587
+ /**
588
+ * 转球为全球数字格式,三位数一个逗号
589
+ * @param num
590
+ */
591
+ static convertToGlobalStr(num) {
592
+ if (!num) {
593
+ return num + "";
594
+ }
595
+ if (num < 1000) {
596
+ return num + "";
597
+ }
598
+ let str = "";
599
+ while (true) {
600
+ let n = num % 1000;
601
+ if (n > 99) {
602
+ str = "," + n + str;
603
+ }
604
+ else if (n > 9) {
605
+ str = ",0" + n + str;
606
+ }
607
+ else {
608
+ str = ",00" + n + str;
609
+ }
610
+ num = Math.floor(num / 1000);
611
+ if (num < 1000) {
612
+ str = num + str;
613
+ break;
614
+ }
615
+ }
616
+ return str;
617
+ }
618
+ /**
619
+ * 暂停多少毫秒
620
+ * @param milliseconds 毫秒
621
+ * @returns
622
+ */
623
+ static sleep(milliseconds) {
624
+ return new Promise((resolve) => {
625
+ setTimeout(() => {
626
+ resolve(null);
627
+ }, milliseconds);
628
+ });
629
+ }
630
+ static async safeCall(func, thisArg = null, ...params) {
631
+ if (!func || !core.isFunction(func)) {
632
+ return;
633
+ }
634
+ try {
635
+ let rs = undefined;
636
+ if (core.isAsyncFunc(func)) {
637
+ if (thisArg) {
638
+ rs = await func.call(thisArg, ...params).catch((reason) => {
639
+ Log_1.gLog.error(reason);
640
+ rs = { errcode: { id: 1008611, des: "failed" } };
641
+ });
642
+ }
643
+ else {
644
+ rs = await func(...params).catch((reason) => {
645
+ Log_1.gLog.error(reason);
646
+ rs = { errcode: { id: 1008612, des: "failed" } };
647
+ });
648
+ }
649
+ }
650
+ else {
651
+ if (thisArg) {
652
+ rs = func.call(thisArg, ...params);
653
+ }
654
+ else {
655
+ rs = func(...params);
656
+ }
657
+ }
658
+ return rs;
659
+ }
660
+ catch (e) {
661
+ Log_1.gLog.error(e.stack);
662
+ return { errcode: { id: 1008613, des: "failed" } };
663
+ }
664
+ }
665
+ //判断当前日期为当年第几周
666
+ static getYearWeek(time) {
667
+ //date1是当前日期
668
+ //date2是当年第一天
669
+ //d是当前日期是今年第多少天
670
+ //用d + 当前年的第一天的周差距的和在除以7就是本年第几周
671
+ let tar = new Date(time);
672
+ let start = new Date(tar.getFullYear(), 0, 1);
673
+ let days = Math.round((tar.valueOf() - start.valueOf()) / 86400000);
674
+ return Math.ceil((days + ((start.getDay() + 1) - 1)) / 7);
675
+ }
676
+ static toBase64(content) {
677
+ var wordArray = CryptoJS.enc.Hex.parse(content);
678
+ var base64Str = CryptoJS.enc.Base64.stringify(wordArray);
679
+ return base64Str;
680
+ }
681
+ static aesEncode(content, key, iv) {
682
+ let _iv = CryptoJS.enc.Utf8.parse(iv);
683
+ let etext = CryptoJS.AES.encrypt(content, key, {
684
+ iv: _iv,
685
+ mode: CryptoJS.mode.CBC,
686
+ padding: CryptoJS.pad.Pkcs7
687
+ }).toString();
688
+ return etext;
689
+ }
690
+ static aesDecode(base64_str, key, iv) {
691
+ let _iv = CryptoJS.enc.Utf8.parse(iv);
692
+ let dtext = CryptoJS.AES.decrypt(base64_str, key, {
693
+ iv: _iv,
694
+ mode: CryptoJS.mode.CBC,
695
+ padding: CryptoJS.pad.Pkcs7
696
+ }).toString(CryptoJS.enc.Utf8);
697
+ return dtext;
698
+ }
699
+ static getUuid() {
700
+ let id = (0, uuid_1.v4)();
701
+ return id;
702
+ }
703
+ static signatureBase64(private_key, rsa_name, payload) {
704
+ // Create an Elliptic Curve Digital Signature Algorithm (ECDSA) object using the private key.
705
+ const key = new ec_key_1.default(private_key, 'pem');
706
+ // Set up the cryptographic format used to sign the key with the SHA-256 hashing algorithm.
707
+ const cryptoSign = key.createSign(rsa_name);
708
+ // Add the payload string to sign.
709
+ cryptoSign.update(payload);
710
+ /*
711
+ The Node.js crypto library creates a DER-formatted binary value signature,
712
+ and then base-64 encodes it to create the string that you will use in StoreKit.
713
+ */
714
+ const signature = cryptoSign.sign('base64');
715
+ return signature;
716
+ }
717
+ static signatureVerifyBase64(signature, private_key, rsa_name, payload) {
718
+ // Create an Elliptic Curve Digital Signature Algorithm (ECDSA) object using the private key.
719
+ let key = new ec_key_1.default(private_key, 'pem');
720
+ let verificationResult = key.createVerify(rsa_name).update(payload).verify(signature, 'base64');
721
+ return verificationResult;
722
+ }
723
+ }
724
+ exports.core = core;